react-native-ai-debugger 1.6.1 → 1.6.2
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/build/__tests__/unit/executor.test.js +28 -1
- package/build/__tests__/unit/executor.test.js.map +1 -1
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +29 -2
- package/build/core/connection.js.map +1 -1
- package/build/core/executor.d.ts +16 -0
- package/build/core/executor.d.ts.map +1 -1
- package/build/core/executor.js +354 -15
- package/build/core/executor.js.map +1 -1
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +41 -22
- package/build/core/guides.js.map +1 -1
- package/build/core/index.d.ts +1 -1
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +1 -1
- package/build/core/index.js.map +1 -1
- package/build/core/ios.d.ts +12 -1
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +78 -22
- package/build/core/ios.js.map +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +60 -68
- package/build/index.js.map +1 -1
- package/package.json +1 -1
package/build/core/guides.js
CHANGED
|
@@ -49,21 +49,39 @@ const guides = [
|
|
|
49
49
|
1. Take a screenshot (ios_screenshot / android_screenshot) or use ocr_screenshot
|
|
50
50
|
2. Identify the target element visually, estimate its coordinates
|
|
51
51
|
3. Convert screenshot pixels to points: divide by device pixel ratio (e.g. pixel_x / 3 for @3x iPhones)
|
|
52
|
-
4.
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
52
|
+
4. Pick the right tool (see decision below) and call it with (x, y)
|
|
53
|
+
|
|
54
|
+
## get_inspector_selection vs inspect_at_point — DECISION GUIDE
|
|
55
|
+
|
|
56
|
+
Both answer "what is at (x, y)?" but surface different supplementary data. Pick by what you need next.
|
|
57
|
+
|
|
58
|
+
| Question you're asking | Use |
|
|
59
|
+
|---|---|
|
|
60
|
+
| "Why is the borderRadius wrong?" / "What's the padding here?" | get_inspector_selection — RICH STYLE per ancestor |
|
|
61
|
+
| "Why is this hit area so small?" / "Where exactly is each ancestor?" | inspect_at_point — FRAME PER ANCESTOR |
|
|
62
|
+
| "What handler is wired to this Pressable?" / "What testID does it have?" | inspect_at_point — full PROPS (including [Function] handlers) |
|
|
63
|
+
| "Which file owns this component?" | get_inspector_selection (source paths pre-wired; null on React 19 today) |
|
|
64
|
+
| "I need to call this multiple times rapidly" or "before/after a transition" | inspect_at_point — pure JS, no overlay flicker |
|
|
65
|
+
|
|
66
|
+
### get_inspector_selection(x, y)
|
|
67
|
+
- Invokes RN's Element Inspector programmatically (auto toggles overlay on, captures, toggles back off — ~600ms total, brief flicker).
|
|
68
|
+
- Returns: element name, full owner-tree path, frame of the inspected element, merged style of the inspected element, AND a hierarchy where each entry has its own resolved style (paddingHorizontal, borderRadius, fontFamily, etc.).
|
|
69
|
+
- Best for visual/style debugging where you want to see exactly what RN's on-device overlay shows.
|
|
70
|
+
|
|
71
|
+
### inspect_at_point(x, y)
|
|
72
|
+
- Pure fiber-tree hit test via measureInWindow. NO overlay, zero visual side effect.
|
|
73
|
+
- Returns: element name, path, hit-tested ancestors with FRAME PER ANCESTOR, and PROPS (handlers, refs, testID, custom props, style as a flat reference).
|
|
74
|
+
- Best for layout measurements, props inspection, and any rapid/repeated calls.
|
|
75
|
+
|
|
76
|
+
### Other inspection tools
|
|
77
|
+
- find_components(pattern) — regex search by component name across the fiber tree.
|
|
78
|
+
- get_component_tree — full tree overview. Use focusedOnly=true and structureOnly=true for compact output.
|
|
61
79
|
- inspect_component(name) — deep dive into a specific component's props, state, and hooks.
|
|
62
80
|
|
|
63
81
|
## Tips
|
|
64
|
-
- Both
|
|
65
|
-
- get_inspector_selection
|
|
66
|
-
-
|
|
82
|
+
- Both tools work on Paper, Fabric, and Bridgeless / new arch.
|
|
83
|
+
- toggle_element_inspector is rarely needed — get_inspector_selection auto-toggles the overlay around its capture and hides it afterward.
|
|
84
|
+
- Coordinates: get_inspector_selection accepts points/dp; inspect_at_point accepts dp (divide screenshot pixels by pixel ratio).`
|
|
67
85
|
},
|
|
68
86
|
{
|
|
69
87
|
id: "layout",
|
|
@@ -76,15 +94,16 @@ const guides = [
|
|
|
76
94
|
2. Compare visually against expected result or Figma design
|
|
77
95
|
3. If an issue is spotted, drill down with inspection tools
|
|
78
96
|
|
|
79
|
-
## Inspect
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
97
|
+
## Inspect at a Point — Pick the Right Tool
|
|
98
|
+
- Style/identity ("what is this and how is it styled?") → get_inspector_selection(x, y)
|
|
99
|
+
- Returns RN's curated hierarchy with merged style PER ANCESTOR (padding, margin, border, layout).
|
|
100
|
+
- Briefly toggles the on-device overlay (auto-hidden after capture).
|
|
101
|
+
- Layout/props ("frames per ancestor, handler functions, refs") → inspect_at_point(x, y)
|
|
102
|
+
- Returns frame for each hit ancestor + full props (handlers as [Function], testID, refs).
|
|
103
|
+
- Pure JS hit test, no overlay flicker — preferred for rapid calls or before/after comparisons.
|
|
83
104
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
Example: HomeScreen(./(tabs)/index.tsx) > SneakerCard > PulseActionButton
|
|
87
|
-
2. Use the file path to find and edit the source code
|
|
105
|
+
Most layout-debugging questions ("why is this clipped?", "what's the actual size?") fit inspect_at_point.
|
|
106
|
+
Most styling questions ("why does this border look wrong?") fit get_inspector_selection.
|
|
88
107
|
|
|
89
108
|
## Full Screen Layout
|
|
90
109
|
- get_screen_layout — full layout data for all components
|
|
@@ -95,8 +114,8 @@ const guides = [
|
|
|
95
114
|
- ios_screenshot / android_screenshot: visual capture
|
|
96
115
|
- tap: also returns a post-tap screenshot by default (no separate screenshot call needed after tapping)
|
|
97
116
|
- ocr_screenshot: screenshot with text recognition and tap coordinates
|
|
98
|
-
- inspect_at_point:
|
|
99
|
-
- get_inspector_selection:
|
|
117
|
+
- inspect_at_point: frames per ancestor + props (no overlay, fast)
|
|
118
|
+
- get_inspector_selection: rich style per ancestor (briefly toggles RN inspector overlay)`
|
|
100
119
|
},
|
|
101
120
|
{
|
|
102
121
|
id: "interact",
|
package/build/core/guides.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guides.js","sourceRoot":"","sources":["../../src/core/guides.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,MAAM,GAAY;IACpB;QACI,EAAE,EAAE,OAAO;QACX,KAAK,EAAE,eAAe;QACtB,OAAO,EAAE,yDAAyD;QAClE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+CA8B8B;KAC1C;IACD;QACI,EAAE,EAAE,SAAS;QACb,KAAK,EAAE,sBAAsB;QAC7B,OAAO,EAAE,mFAAmF;QAC5F,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"guides.js","sourceRoot":"","sources":["../../src/core/guides.ts"],"names":[],"mappings":"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"}
|
package/build/core/index.d.ts
CHANGED
|
@@ -11,7 +11,7 @@ export { formatRemoteObject, handleCDPMessage, connectToDevice, getConnectedApps
|
|
|
11
11
|
export type { PassiveConnectionStatus, LogPipelineResult, } from "./connection.js";
|
|
12
12
|
export { hasMetro, detectNativeDevices, buildMetroMissingHint, metroMissingHintIfAbsent, } from "./nativeOnlyHints.js";
|
|
13
13
|
export type { NativeDeviceAvailability, MetroMissingHintOptions } from "./nativeOnlyHints.js";
|
|
14
|
-
export { executeInApp, listDebugGlobals, inspectGlobal, reloadApp, getComponentTree, getScreenLayout, getPressableElements, enrichScreenshotWithLayout, inspectComponent, findComponents, pressElement, inspectAtPoint, toggleElementInspector, isInspectorActive, getInspectorSelection, } from "./executor.js";
|
|
14
|
+
export { executeInApp, listDebugGlobals, inspectGlobal, reloadApp, getComponentTree, getScreenLayout, getPressableElements, enrichScreenshotWithLayout, inspectComponent, findComponents, pressElement, inspectAtPoint, toggleElementInspector, isInspectorActive, getInspectorSelection, getInspectorSelectionAtPoint, } from "./executor.js";
|
|
15
15
|
export { isAdbAvailable, listAndroidDevices, getDefaultAndroidDevice, androidScreenshot, androidInstallApp, androidLaunchApp, androidListPackages, ANDROID_KEY_EVENTS, androidTap, androidLongPress, androidSwipe, androidInputText, androidKeyEvent, androidGetScreenSize, androidGetDensity, androidGetStatusBarHeight, androidDescribeAll, androidDescribePoint, androidTapElement, androidGetUITree, androidFindElement, androidWaitForElement, } from "./android.js";
|
|
16
16
|
export type { AndroidAccessibilityElement, AndroidDescribeResult, AndroidUIElement, FindElementResult, WaitForElementResult, FindElementOptions, } from "./android.js";
|
|
17
17
|
export { isSimctlAvailable, listIOSSimulators, getBootedSimulatorUdid, findSimulatorByName, getActiveOrBootedSimulatorUdid, iosScreenshot, iosInstallApp, iosLaunchApp, iosOpenUrl, iosTerminateApp, iosBootSimulator, isIdbAvailable, isAxeAvailable, isUiDriverAvailable, getUiDriverInstallHint, iosTap, iosTapElement, iosSwipe, iosInputText, iosButton, iosKeyEvent, iosKeySequence, iosDescribeAll, iosDescribePoint, IOS_BUTTON_TYPES, iosGetUITree, iosFindElement, iosWaitForElement, getDevicePixelRatio, getIOSSafeAreaTop, } from "./ios.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AACA,cAAc,YAAY,CAAC;AAG3B,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EAEd,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,OAAO,EACP,UAAU,EACV,aAAa,GACd,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAG/E,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAEzB,YAAY,EACV,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAGzB,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAG9F,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,SAAS,EAET,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,EACd,YAAY,EAEZ,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
package/build/core/index.js
CHANGED
|
@@ -23,7 +23,7 @@ export { executeInApp, listDebugGlobals, inspectGlobal, reloadApp,
|
|
|
23
23
|
// React Component Inspection
|
|
24
24
|
getComponentTree, getScreenLayout, getPressableElements, enrichScreenshotWithLayout, inspectComponent, findComponents, pressElement,
|
|
25
25
|
// Coordinate-based inspection
|
|
26
|
-
inspectAtPoint, toggleElementInspector, isInspectorActive, getInspectorSelection, } from "./executor.js";
|
|
26
|
+
inspectAtPoint, toggleElementInspector, isInspectorActive, getInspectorSelection, getInspectorSelectionAtPoint, } from "./executor.js";
|
|
27
27
|
// Android (ADB)
|
|
28
28
|
export { isAdbAvailable, listAndroidDevices, getDefaultAndroidDevice, androidScreenshot, androidInstallApp, androidLaunchApp, androidListPackages,
|
|
29
29
|
// UI Input (Phase 2)
|
package/build/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,8BAA8B;AAC9B,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,cAAc;AACd,0BAA0B;AAC1B,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,QAAQ;AACR,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO;AACP,OAAO,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,OAAO,EACP,UAAU,EACV,aAAa,GACd,MAAM,WAAW,CAAC;AAEnB,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,UAAU;AACV,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,QAAQ;AACR,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AAIpB,aAAa;AACb,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAOzB,kGAAkG;AAClG,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,WAAW;AACX,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,SAAS;AACT,6BAA6B;AAC7B,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,EACd,YAAY;AACZ,8BAA8B;AAC9B,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,8BAA8B;AAC9B,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,cAAc;AACd,0BAA0B;AAC1B,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB,EACnB,gBAAgB,EAChB,kBAAkB,EAClB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAE9B,QAAQ;AACR,OAAO,EACL,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,gBAAgB,EAChB,iBAAiB,EACjB,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,gBAAgB,EAChB,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACvB,iBAAiB,GAClB,MAAM,YAAY,CAAC;AAEpB,OAAO;AACP,OAAO,EACL,SAAS,EACT,cAAc,EACd,UAAU,EACV,OAAO,EACP,UAAU,EACV,aAAa,GACd,MAAM,WAAW,CAAC;AAEnB,eAAe;AACf,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/C,UAAU;AACV,OAAO,EACL,aAAa,EACb,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,GAChB,MAAM,cAAc,CAAC;AAEtB,QAAQ;AACR,OAAO,EACL,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,uBAAuB,EACvB,uBAAuB,EACvB,oBAAoB,EACpB,eAAe,GAChB,MAAM,YAAY,CAAC;AAIpB,aAAa;AACb,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,gCAAgC,EAChC,eAAe,EACf,mBAAmB,EACnB,gBAAgB,EAChB,0BAA0B,EAC1B,wBAAwB,EACxB,oBAAoB,EACpB,0BAA0B,EAC1B,4BAA4B,EAC5B,6BAA6B,EAC7B,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,iBAAiB,CAAC;AAOzB,kGAAkG;AAClG,OAAO,EACL,QAAQ,EACR,mBAAmB,EACnB,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,sBAAsB,CAAC;AAG9B,WAAW;AACX,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,aAAa,EACb,SAAS;AACT,6BAA6B;AAC7B,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,0BAA0B,EAC1B,gBAAgB,EAChB,cAAc,EACd,YAAY;AACZ,8BAA8B;AAC9B,cAAc,EACd,sBAAsB,EACtB,iBAAiB,EACjB,qBAAqB,EACrB,4BAA4B,GAC7B,MAAM,eAAe,CAAC;AAEvB,gBAAgB;AAChB,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,uBAAuB,EACvB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,mBAAmB;AACnB,qBAAqB;AACrB,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,yBAAyB;AACzB,+BAA+B;AAC/B,kBAAkB,EAClB,oBAAoB,EACpB,iBAAiB;AACjB,qCAAqC;AACrC,gBAAgB,EAChB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,cAAc,CAAC;AAYtB,qBAAqB;AACrB,OAAO;AACL,qBAAqB;AACrB,iBAAiB,EACjB,iBAAiB,EACjB,sBAAsB,EACtB,mBAAmB,EACnB,8BAA8B,EAC9B,aAAa,EACb,aAAa,EACb,YAAY,EACZ,UAAU,EACV,eAAe,EACf,gBAAgB;AAChB,+BAA+B;AAC/B,cAAc,EACd,cAAc,EACd,mBAAmB,EACnB,sBAAsB,EACtB,MAAM,EACN,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,SAAS,EACT,WAAW,EACX,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,gBAAgB;AAChB,oDAAoD;AACpD,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,UAAU,CAAC;AAalB,8BAA8B;AAC9B,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,0BAA0B,EAC1B,6BAA6B,EAC7B,iBAAiB,EACjB,eAAe,EACf,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,kBAAkB;AAClB,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,mBAAmB,GACpB,MAAM,cAAc,CAAC;AAGtB,YAAY;AACZ,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,MAAM;AACN,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,wBAAwB,GACzB,MAAM,UAAU,CAAC;AAGlB,wDAAwD;AACxD,OAAO,EACL,oBAAoB,EACpB,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAGhC,+BAA+B;AAC/B,OAAO,EACL,YAAY,EACZ,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,UAAU,EACV,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,GACnB,MAAM,aAAa,CAAC;AAOrB,WAAW;AACX,OAAO,EACL,sBAAsB,EACtB,qBAAqB,EACrB,eAAe,EACf,cAAc,GACf,MAAM,eAAe,CAAC;AAEvB,0BAA0B;AAC1B,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC"}
|
package/build/core/ios.d.ts
CHANGED
|
@@ -53,14 +53,25 @@ export interface iOSAccessibilityElement {
|
|
|
53
53
|
export interface iOSDescribeResult extends iOSResult {
|
|
54
54
|
elements?: iOSAccessibilityElement[];
|
|
55
55
|
}
|
|
56
|
+
export declare const XCODE_MISSING_ERROR: string;
|
|
56
57
|
/**
|
|
57
|
-
* Check if simctl is available
|
|
58
|
+
* Check if simctl is available (cached for the lifetime of the process).
|
|
58
59
|
*/
|
|
59
60
|
export declare function isSimctlAvailable(): Promise<boolean>;
|
|
61
|
+
/**
|
|
62
|
+
* Reset the cached simctl availability check. Test-only.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resetSimctlAvailableCache(): void;
|
|
60
65
|
/**
|
|
61
66
|
* List iOS simulators
|
|
62
67
|
*/
|
|
63
68
|
export declare function listIOSSimulators(onlyBooted?: boolean): Promise<iOSResult>;
|
|
69
|
+
/**
|
|
70
|
+
* Build the actionable "no booted simulator" error message. Lists up to 6
|
|
71
|
+
* recently-available shutdown simulators by name+UDID and points the agent
|
|
72
|
+
* at `ios_boot_simulator`, so it can recover instead of giving up.
|
|
73
|
+
*/
|
|
74
|
+
export declare function buildNoSimulatorError(): Promise<string>;
|
|
64
75
|
/**
|
|
65
76
|
* Get the booted simulator UDID
|
|
66
77
|
*/
|
package/build/core/ios.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../src/core/ios.ts"],"names":[],"mappings":"AAyBA,eAAO,MAAM,gBAAgB,+DAMnB,CAAC;AACX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAgE9D;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG5D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAM/C;
|
|
1
|
+
{"version":3,"file":"ios.d.ts","sourceRoot":"","sources":["../../src/core/ios.ts"],"names":[],"mappings":"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"}
|
package/build/core/ios.js
CHANGED
|
@@ -190,7 +190,7 @@ async function ensureUiDriverReady(udid) {
|
|
|
190
190
|
ready: false,
|
|
191
191
|
error: {
|
|
192
192
|
success: false,
|
|
193
|
-
error:
|
|
193
|
+
error: await buildNoSimulatorError(),
|
|
194
194
|
},
|
|
195
195
|
};
|
|
196
196
|
}
|
|
@@ -205,17 +205,38 @@ async function ensureUiDriverReady(udid) {
|
|
|
205
205
|
}
|
|
206
206
|
return { ready: true, driver, targetUdid };
|
|
207
207
|
}
|
|
208
|
+
// Shared message for callers that hit a missing-Xcode preflight. Includes
|
|
209
|
+
// the actual install command so the agent (or user) can act without guessing.
|
|
210
|
+
export const XCODE_MISSING_ERROR = "Xcode command line tools are not installed or not selected. " +
|
|
211
|
+
"Run `xcode-select --install` for the CLT, or install full Xcode from the App Store " +
|
|
212
|
+
"and run `sudo xcode-select -s /Applications/Xcode.app/Contents/Developer`. " +
|
|
213
|
+
"simctl ships with full Xcode (the standalone CLT does not include it).";
|
|
214
|
+
// Memoized result — Xcode CLT presence does not change mid-session in
|
|
215
|
+
// practice, and `xcrun simctl help` adds 50–200 ms per ios_* call without
|
|
216
|
+
// caching. Re-resolve once per process; restart the MCP server after install.
|
|
217
|
+
let simctlAvailableCache = null;
|
|
208
218
|
/**
|
|
209
|
-
* Check if simctl is available
|
|
219
|
+
* Check if simctl is available (cached for the lifetime of the process).
|
|
210
220
|
*/
|
|
211
221
|
export async function isSimctlAvailable() {
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
222
|
+
if (simctlAvailableCache)
|
|
223
|
+
return simctlAvailableCache;
|
|
224
|
+
simctlAvailableCache = (async () => {
|
|
225
|
+
try {
|
|
226
|
+
await execAsync("xcrun simctl help", { timeout: 5000 });
|
|
227
|
+
return true;
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
return false;
|
|
231
|
+
}
|
|
232
|
+
})();
|
|
233
|
+
return simctlAvailableCache;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Reset the cached simctl availability check. Test-only.
|
|
237
|
+
*/
|
|
238
|
+
export function resetSimctlAvailableCache() {
|
|
239
|
+
simctlAvailableCache = null;
|
|
219
240
|
}
|
|
220
241
|
/**
|
|
221
242
|
* List iOS simulators
|
|
@@ -226,7 +247,7 @@ export async function listIOSSimulators(onlyBooted = false) {
|
|
|
226
247
|
if (!simctlAvailable) {
|
|
227
248
|
return {
|
|
228
249
|
success: false,
|
|
229
|
-
error:
|
|
250
|
+
error: XCODE_MISSING_ERROR,
|
|
230
251
|
};
|
|
231
252
|
}
|
|
232
253
|
const { stdout } = await execAsync("xcrun simctl list devices -j", {
|
|
@@ -294,6 +315,41 @@ export async function listIOSSimulators(onlyBooted = false) {
|
|
|
294
315
|
};
|
|
295
316
|
}
|
|
296
317
|
}
|
|
318
|
+
/**
|
|
319
|
+
* Build the actionable "no booted simulator" error message. Lists up to 6
|
|
320
|
+
* recently-available shutdown simulators by name+UDID and points the agent
|
|
321
|
+
* at `ios_boot_simulator`, so it can recover instead of giving up.
|
|
322
|
+
*/
|
|
323
|
+
export async function buildNoSimulatorError() {
|
|
324
|
+
const base = "No iOS simulator is currently running. " +
|
|
325
|
+
"Boot one with `ios_boot_simulator` (pass udid or name), " +
|
|
326
|
+
"or run `xcrun simctl boot <udid>` directly.";
|
|
327
|
+
try {
|
|
328
|
+
const { stdout } = await execAsync("xcrun simctl list devices -j", {
|
|
329
|
+
timeout: SIMCTL_TIMEOUT,
|
|
330
|
+
});
|
|
331
|
+
const data = JSON.parse(stdout);
|
|
332
|
+
const shutdown = [];
|
|
333
|
+
for (const list of Object.values(data.devices)) {
|
|
334
|
+
if (!Array.isArray(list))
|
|
335
|
+
continue;
|
|
336
|
+
for (const d of list) {
|
|
337
|
+
if (d.isAvailable === false)
|
|
338
|
+
continue;
|
|
339
|
+
if (d.state === "Shutdown")
|
|
340
|
+
shutdown.push({ name: d.name, udid: d.udid });
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
if (shutdown.length === 0)
|
|
344
|
+
return base;
|
|
345
|
+
const top = shutdown.slice(0, 6).map((d) => ` - ${d.name} (${d.udid})`).join("\n");
|
|
346
|
+
const more = shutdown.length > 6 ? `\n ...and ${shutdown.length - 6} more (run list_ios_simulators)` : "";
|
|
347
|
+
return `${base}\n\nAvailable simulators (shutdown):\n${top}${more}`;
|
|
348
|
+
}
|
|
349
|
+
catch {
|
|
350
|
+
return base;
|
|
351
|
+
}
|
|
352
|
+
}
|
|
297
353
|
/**
|
|
298
354
|
* Get the booted simulator UDID
|
|
299
355
|
*/
|
|
@@ -381,7 +437,7 @@ export async function iosScreenshot(outputPath, udid) {
|
|
|
381
437
|
if (!simctlAvailable) {
|
|
382
438
|
return {
|
|
383
439
|
success: false,
|
|
384
|
-
error:
|
|
440
|
+
error: XCODE_MISSING_ERROR,
|
|
385
441
|
};
|
|
386
442
|
}
|
|
387
443
|
// Resolve target UDID (prefer Metro-connected simulator)
|
|
@@ -389,7 +445,7 @@ export async function iosScreenshot(outputPath, udid) {
|
|
|
389
445
|
if (!targetUdid) {
|
|
390
446
|
return {
|
|
391
447
|
success: false,
|
|
392
|
-
error:
|
|
448
|
+
error: await buildNoSimulatorError(),
|
|
393
449
|
};
|
|
394
450
|
}
|
|
395
451
|
// Generate output path if not provided
|
|
@@ -446,7 +502,7 @@ export async function iosInstallApp(appPath, udid) {
|
|
|
446
502
|
if (!simctlAvailable) {
|
|
447
503
|
return {
|
|
448
504
|
success: false,
|
|
449
|
-
error:
|
|
505
|
+
error: XCODE_MISSING_ERROR,
|
|
450
506
|
};
|
|
451
507
|
}
|
|
452
508
|
// Verify app exists
|
|
@@ -461,7 +517,7 @@ export async function iosInstallApp(appPath, udid) {
|
|
|
461
517
|
if (!targetUdid) {
|
|
462
518
|
return {
|
|
463
519
|
success: false,
|
|
464
|
-
error:
|
|
520
|
+
error: await buildNoSimulatorError(),
|
|
465
521
|
};
|
|
466
522
|
}
|
|
467
523
|
await execAsync(`xcrun simctl install ${targetUdid} "${appPath}"`, {
|
|
@@ -488,7 +544,7 @@ export async function iosLaunchApp(bundleId, udid) {
|
|
|
488
544
|
if (!simctlAvailable) {
|
|
489
545
|
return {
|
|
490
546
|
success: false,
|
|
491
|
-
error:
|
|
547
|
+
error: XCODE_MISSING_ERROR,
|
|
492
548
|
};
|
|
493
549
|
}
|
|
494
550
|
// Resolve target UDID (prefer Metro-connected simulator)
|
|
@@ -496,7 +552,7 @@ export async function iosLaunchApp(bundleId, udid) {
|
|
|
496
552
|
if (!targetUdid) {
|
|
497
553
|
return {
|
|
498
554
|
success: false,
|
|
499
|
-
error:
|
|
555
|
+
error: await buildNoSimulatorError(),
|
|
500
556
|
};
|
|
501
557
|
}
|
|
502
558
|
await execAsync(`xcrun simctl launch ${targetUdid} ${bundleId}`, {
|
|
@@ -529,7 +585,7 @@ export async function iosOpenUrl(url, udid) {
|
|
|
529
585
|
if (!simctlAvailable) {
|
|
530
586
|
return {
|
|
531
587
|
success: false,
|
|
532
|
-
error:
|
|
588
|
+
error: XCODE_MISSING_ERROR,
|
|
533
589
|
};
|
|
534
590
|
}
|
|
535
591
|
// Resolve target UDID (prefer Metro-connected simulator)
|
|
@@ -537,7 +593,7 @@ export async function iosOpenUrl(url, udid) {
|
|
|
537
593
|
if (!targetUdid) {
|
|
538
594
|
return {
|
|
539
595
|
success: false,
|
|
540
|
-
error:
|
|
596
|
+
error: await buildNoSimulatorError(),
|
|
541
597
|
};
|
|
542
598
|
}
|
|
543
599
|
await execAsync(`xcrun simctl openurl ${targetUdid} "${url}"`, {
|
|
@@ -571,7 +627,7 @@ export async function iosTerminateApp(bundleId, udid) {
|
|
|
571
627
|
if (!simctlAvailable) {
|
|
572
628
|
return {
|
|
573
629
|
success: false,
|
|
574
|
-
error:
|
|
630
|
+
error: XCODE_MISSING_ERROR,
|
|
575
631
|
};
|
|
576
632
|
}
|
|
577
633
|
// Resolve target UDID (prefer Metro-connected simulator)
|
|
@@ -579,7 +635,7 @@ export async function iosTerminateApp(bundleId, udid) {
|
|
|
579
635
|
if (!targetUdid) {
|
|
580
636
|
return {
|
|
581
637
|
success: false,
|
|
582
|
-
error:
|
|
638
|
+
error: await buildNoSimulatorError(),
|
|
583
639
|
};
|
|
584
640
|
}
|
|
585
641
|
await execAsync(`xcrun simctl terminate ${targetUdid} ${bundleId}`, {
|
|
@@ -606,7 +662,7 @@ export async function iosBootSimulator(udid) {
|
|
|
606
662
|
if (!simctlAvailable) {
|
|
607
663
|
return {
|
|
608
664
|
success: false,
|
|
609
|
-
error:
|
|
665
|
+
error: XCODE_MISSING_ERROR,
|
|
610
666
|
};
|
|
611
667
|
}
|
|
612
668
|
await execAsync(`xcrun simctl boot ${udid}`, {
|
|
@@ -1414,7 +1470,7 @@ export async function getDevicePixelRatio(udid) {
|
|
|
1414
1470
|
return cached;
|
|
1415
1471
|
const resolvedUdid = udid || (await getActiveOrBootedSimulatorUdid());
|
|
1416
1472
|
if (!resolvedUdid) {
|
|
1417
|
-
throw new Error(
|
|
1473
|
+
throw new Error(await buildNoSimulatorError());
|
|
1418
1474
|
}
|
|
1419
1475
|
// Take screenshot to get pixel dimensions
|
|
1420
1476
|
const timestamp = new Date().toISOString().replace(/[:.]/g, "-");
|