react-native-ai-debugger 1.0.7 → 1.0.9
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 +84 -152
- package/build/core/android.d.ts +94 -0
- package/build/core/android.d.ts.map +1 -1
- package/build/core/android.js +337 -1
- package/build/core/android.js.map +1 -1
- package/build/core/executor.d.ts.map +1 -1
- package/build/core/executor.js +75 -30
- package/build/core/executor.js.map +1 -1
- package/build/core/httpServer.d.ts.map +1 -1
- package/build/core/httpServer.js +695 -5
- package/build/core/httpServer.js.map +1 -1
- package/build/core/index.d.ts +4 -4
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +7 -3
- package/build/core/index.js.map +1 -1
- package/build/core/ios.d.ts +70 -0
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +217 -2
- package/build/core/ios.js.map +1 -1
- package/build/index.js +364 -12
- package/build/index.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ An MCP (Model Context Protocol) server for AI-powered React Native debugging. En
|
|
|
17
17
|
- **Android device control** - screenshots, tap, swipe, text input, key events via ADB
|
|
18
18
|
- **iOS simulator control** - screenshots, app management, URL handling via simctl
|
|
19
19
|
- **iOS UI automation** - tap, swipe, text input, button presses via IDB (optional)
|
|
20
|
-
- **
|
|
20
|
+
- **Element-based UI automation** - find and wait for elements by text/label without screenshots (faster, cheaper)
|
|
21
21
|
|
|
22
22
|
## Requirements
|
|
23
23
|
|
|
@@ -133,55 +133,35 @@ Requires VS Code 1.102+ with Copilot ([docs](https://code.visualstudio.com/docs/
|
|
|
133
133
|
|
|
134
134
|
### Android (ADB)
|
|
135
135
|
|
|
136
|
-
| Tool
|
|
137
|
-
|
|
|
138
|
-
| `list_android_devices`
|
|
139
|
-
| `android_screenshot`
|
|
140
|
-
| `android_install_app`
|
|
141
|
-
| `android_launch_app`
|
|
142
|
-
| `android_list_packages`
|
|
143
|
-
| `android_tap`
|
|
144
|
-
| `android_long_press`
|
|
145
|
-
| `android_swipe`
|
|
146
|
-
| `android_input_text`
|
|
147
|
-
| `android_key_event`
|
|
148
|
-
| `android_get_screen_size`
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
| Tool | Description |
|
|
153
|
-
| ----------------------- | ----------------------------------------------------- |
|
|
154
|
-
| `android_describe_all` | Get full UI hierarchy tree using uiautomator |
|
|
155
|
-
| `android_describe_point`| Get UI element info at specific coordinates |
|
|
156
|
-
| `android_tap_element` | Tap element by text, content-desc, or resource-id |
|
|
136
|
+
| Tool | Description |
|
|
137
|
+
| --------------------------- | ------------------------------------------------------------- |
|
|
138
|
+
| `list_android_devices` | List connected Android devices and emulators via ADB |
|
|
139
|
+
| `android_screenshot` | Take a screenshot from an Android device/emulator |
|
|
140
|
+
| `android_install_app` | Install an APK on an Android device/emulator |
|
|
141
|
+
| `android_launch_app` | Launch an app by package name |
|
|
142
|
+
| `android_list_packages` | List installed packages (with optional filter) |
|
|
143
|
+
| `android_tap` | Tap at specific coordinates on screen |
|
|
144
|
+
| `android_long_press` | Long press at specific coordinates |
|
|
145
|
+
| `android_swipe` | Swipe from one point to another |
|
|
146
|
+
| `android_input_text` | Type text at current focus point |
|
|
147
|
+
| `android_key_event` | Send key events (HOME, BACK, ENTER, etc.) |
|
|
148
|
+
| `android_get_screen_size` | Get device screen resolution |
|
|
149
|
+
| `android_find_element` | Find element by text/contentDesc/resourceId (no screenshot) |
|
|
150
|
+
| `android_wait_for_element` | Wait for element to appear (useful for screen transitions) |
|
|
157
151
|
|
|
158
152
|
### iOS (Simulator)
|
|
159
153
|
|
|
160
|
-
| Tool
|
|
161
|
-
|
|
|
162
|
-
| `list_ios_simulators`
|
|
163
|
-
| `ios_screenshot`
|
|
164
|
-
| `ios_install_app`
|
|
165
|
-
| `ios_launch_app`
|
|
166
|
-
| `ios_open_url`
|
|
167
|
-
| `ios_terminate_app`
|
|
168
|
-
| `ios_boot_simulator`
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
These tools require [Facebook IDB](https://fbidb.io/) to be installed: `brew install idb-companion`
|
|
173
|
-
|
|
174
|
-
| Tool | Description |
|
|
175
|
-
| ------------------- | ----------------------------------------------------- |
|
|
176
|
-
| `ios_tap` | Tap at specific coordinates on screen |
|
|
177
|
-
| `ios_tap_element` | Tap an element by its accessibility label |
|
|
178
|
-
| `ios_swipe` | Swipe from one point to another |
|
|
179
|
-
| `ios_input_text` | Type text into the active input field |
|
|
180
|
-
| `ios_button` | Press hardware buttons (HOME, LOCK, SIRI, etc.) |
|
|
181
|
-
| `ios_key_event` | Send a key event by keycode |
|
|
182
|
-
| `ios_key_sequence` | Send multiple key events in sequence |
|
|
183
|
-
| `ios_describe_all` | Get accessibility tree for entire screen |
|
|
184
|
-
| `ios_describe_point`| Get accessibility info for element at specific point |
|
|
154
|
+
| Tool | Description |
|
|
155
|
+
| ----------------------- | --------------------------------------------------------------- |
|
|
156
|
+
| `list_ios_simulators` | List available iOS simulators |
|
|
157
|
+
| `ios_screenshot` | Take a screenshot from an iOS simulator |
|
|
158
|
+
| `ios_install_app` | Install an app bundle (.app) on a simulator |
|
|
159
|
+
| `ios_launch_app` | Launch an app by bundle ID |
|
|
160
|
+
| `ios_open_url` | Open a URL (deep links or web URLs) |
|
|
161
|
+
| `ios_terminate_app` | Terminate a running app |
|
|
162
|
+
| `ios_boot_simulator` | Boot a simulator by UDID |
|
|
163
|
+
| `ios_find_element` | Find element by label/value (requires IDB, no screenshot) |
|
|
164
|
+
| `ios_wait_for_element` | Wait for element to appear (requires IDB) |
|
|
185
165
|
|
|
186
166
|
## Usage
|
|
187
167
|
|
|
@@ -411,20 +391,6 @@ Set `awaitPromise=false` for synchronous execution only.
|
|
|
411
391
|
|
|
412
392
|
## Device Interaction
|
|
413
393
|
|
|
414
|
-
> **💡 Best Practice: Use Element-Based Tapping**
|
|
415
|
-
>
|
|
416
|
-
> Prefer `android_tap_element` and `ios_tap_element` over coordinate-based tapping (`android_tap`, `ios_tap`).
|
|
417
|
-
>
|
|
418
|
-
> **Why?**
|
|
419
|
-
> - More reliable - elements are found by text/label, not fragile coordinates
|
|
420
|
-
> - Self-documenting - `tap_element(text="Settings")` is clearer than `tap(x=540, y=1200)`
|
|
421
|
-
> - Resolution-independent - works across different screen sizes
|
|
422
|
-
>
|
|
423
|
-
> **Workflow:**
|
|
424
|
-
> 1. Use `android_describe_all` or `ios_describe_all` to see available elements
|
|
425
|
-
> 2. Use `android_tap_element` or `ios_tap_element` to interact by text/label
|
|
426
|
-
> 3. Fall back to coordinate-based tapping only when elements lack accessible text
|
|
427
|
-
|
|
428
394
|
### Android (requires ADB)
|
|
429
395
|
|
|
430
396
|
List connected devices:
|
|
@@ -466,53 +432,6 @@ android_key_event with key="HOME"
|
|
|
466
432
|
android_key_event with key="ENTER"
|
|
467
433
|
```
|
|
468
434
|
|
|
469
|
-
### Android UI Automation (Accessibility)
|
|
470
|
-
|
|
471
|
-
Get the full UI hierarchy:
|
|
472
|
-
|
|
473
|
-
```
|
|
474
|
-
android_describe_all
|
|
475
|
-
```
|
|
476
|
-
|
|
477
|
-
Example output:
|
|
478
|
-
```
|
|
479
|
-
[FrameLayout] frame=(0, 0, 1080x2340) tap=(540, 1170)
|
|
480
|
-
[LinearLayout] frame=(0, 63, 1080x147) tap=(540, 136)
|
|
481
|
-
[TextView] "Settings" frame=(48, 77, 200x63) tap=(148, 108)
|
|
482
|
-
[RecyclerView] frame=(0, 210, 1080x2130) tap=(540, 1275)
|
|
483
|
-
[Button] "Save" frame=(800, 2200, 200x80) tap=(900, 2240)
|
|
484
|
-
```
|
|
485
|
-
|
|
486
|
-
Get element info at coordinates:
|
|
487
|
-
|
|
488
|
-
```
|
|
489
|
-
android_describe_point with x=540 y=1170
|
|
490
|
-
```
|
|
491
|
-
|
|
492
|
-
Tap an element by text:
|
|
493
|
-
|
|
494
|
-
```
|
|
495
|
-
android_tap_element with text="Settings"
|
|
496
|
-
```
|
|
497
|
-
|
|
498
|
-
Tap using partial text match:
|
|
499
|
-
|
|
500
|
-
```
|
|
501
|
-
android_tap_element with textContains="Save"
|
|
502
|
-
```
|
|
503
|
-
|
|
504
|
-
Tap by resource ID:
|
|
505
|
-
|
|
506
|
-
```
|
|
507
|
-
android_tap_element with resourceId="save_button"
|
|
508
|
-
```
|
|
509
|
-
|
|
510
|
-
Tap by content description:
|
|
511
|
-
|
|
512
|
-
```
|
|
513
|
-
android_tap_element with contentDesc="Navigate up"
|
|
514
|
-
```
|
|
515
|
-
|
|
516
435
|
### iOS Simulator (requires Xcode)
|
|
517
436
|
|
|
518
437
|
List available simulators:
|
|
@@ -545,78 +464,91 @@ Open a deep link:
|
|
|
545
464
|
ios_open_url with url="myapp://settings"
|
|
546
465
|
```
|
|
547
466
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
Install IDB first: `brew install idb-companion`
|
|
467
|
+
## Efficient UI Automation (No Screenshots)
|
|
551
468
|
|
|
552
|
-
**
|
|
553
|
-
- iOS IDB uses **points** (logical coordinates), not pixels
|
|
554
|
-
- For 2x Retina displays: 1 point = 2 pixels
|
|
555
|
-
- Example: 1640x2360 pixel screenshot = 820x1180 points
|
|
556
|
-
- Use `ios_describe_all` to get exact element coordinates in points
|
|
469
|
+
For action triggering without layout debugging, use element-based tools instead of screenshots. This is **2-3x faster** and uses fewer tokens.
|
|
557
470
|
|
|
558
|
-
|
|
471
|
+
### Android - Find and Tap by Text
|
|
559
472
|
|
|
560
473
|
```
|
|
561
|
-
|
|
562
|
-
|
|
474
|
+
# Wait for screen to load
|
|
475
|
+
android_wait_for_element with text="Login"
|
|
563
476
|
|
|
564
|
-
|
|
477
|
+
# Find element (returns tap coordinates)
|
|
478
|
+
android_find_element with textContains="submit"
|
|
565
479
|
|
|
566
|
-
|
|
567
|
-
|
|
480
|
+
# Tap the element (use coordinates from find_element)
|
|
481
|
+
android_tap with x=540 y=960
|
|
568
482
|
```
|
|
569
483
|
|
|
570
|
-
|
|
484
|
+
Search options:
|
|
485
|
+
- `text` - exact text match
|
|
486
|
+
- `textContains` - partial text (case-insensitive)
|
|
487
|
+
- `contentDesc` - accessibility content description
|
|
488
|
+
- `contentDescContains` - partial content description
|
|
489
|
+
- `resourceId` - resource ID (e.g., "button" or "com.app:id/button")
|
|
571
490
|
|
|
572
|
-
|
|
573
|
-
ios_swipe with startX=200 startY=600 endX=200 endY=200
|
|
574
|
-
```
|
|
491
|
+
### iOS - Find and Tap by Label (requires IDB)
|
|
575
492
|
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
ios_tap with x=200 y=300
|
|
580
|
-
ios_input_text with text="hello@example.com"
|
|
493
|
+
```bash
|
|
494
|
+
# Install IDB first
|
|
495
|
+
brew install idb-companion
|
|
581
496
|
```
|
|
582
497
|
|
|
583
|
-
Press hardware buttons:
|
|
584
|
-
|
|
585
498
|
```
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
499
|
+
# Wait for element
|
|
500
|
+
ios_wait_for_element with label="Sign In"
|
|
501
|
+
|
|
502
|
+
# Find element by partial label
|
|
503
|
+
ios_find_element with labelContains="welcome"
|
|
589
504
|
```
|
|
590
505
|
|
|
591
|
-
|
|
506
|
+
Search options:
|
|
507
|
+
- `label` - exact accessibility label
|
|
508
|
+
- `labelContains` - partial label (case-insensitive)
|
|
509
|
+
- `value` - accessibility value
|
|
510
|
+
- `valueContains` - partial value
|
|
511
|
+
- `type` - element type (e.g., "Button", "TextField")
|
|
592
512
|
|
|
593
|
-
|
|
594
|
-
ios_describe_all
|
|
595
|
-
```
|
|
513
|
+
### Wait for Screen Transitions
|
|
596
514
|
|
|
597
|
-
|
|
515
|
+
Both platforms support waiting with timeout:
|
|
598
516
|
|
|
599
517
|
```
|
|
600
|
-
|
|
518
|
+
android_wait_for_element with text="Dashboard" timeoutMs=15000 pollIntervalMs=500
|
|
519
|
+
ios_wait_for_element with label="Home" timeoutMs=10000
|
|
601
520
|
```
|
|
602
521
|
|
|
603
|
-
|
|
522
|
+
### Recommended Workflow (Priority Order)
|
|
604
523
|
|
|
605
|
-
|
|
606
|
-
ios_tap_element with label="Settings"
|
|
607
|
-
```
|
|
524
|
+
**Always try accessibility tools first, fall back to screenshots only when needed:**
|
|
608
525
|
|
|
609
|
-
|
|
526
|
+
1. **Wait for screen** → Use `wait_for_element` with expected text/label
|
|
527
|
+
2. **Find target** → Use `find_element` to get tap coordinates
|
|
528
|
+
3. **Tap** → Use `tap` with coordinates from step 2
|
|
529
|
+
4. **Fallback** → If element not in accessibility tree, use `screenshot`
|
|
610
530
|
|
|
611
531
|
```
|
|
612
|
-
|
|
532
|
+
# Example: Tap "Submit" button after screen loads
|
|
533
|
+
android_wait_for_element with text="Submit" # Step 1: Wait
|
|
534
|
+
android_find_element with text="Submit" # Step 2: Find (returns center coordinates)
|
|
535
|
+
android_tap with x=540 y=1200 # Step 3: Tap (use returned coordinates)
|
|
613
536
|
```
|
|
614
537
|
|
|
615
|
-
|
|
538
|
+
**Why this order?**
|
|
539
|
+
- `find_element`: ~100-200 tokens, <100ms
|
|
540
|
+
- `screenshot`: ~400-500 tokens, 200-500ms
|
|
616
541
|
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
542
|
+
### When to Use Screenshots vs Element Tools
|
|
543
|
+
|
|
544
|
+
| Use Case | Recommended Tool |
|
|
545
|
+
|----------|------------------|
|
|
546
|
+
| Trigger button taps | `find_element` + `tap` |
|
|
547
|
+
| Wait for screen load | `wait_for_element` |
|
|
548
|
+
| Navigate through flow | `wait_for_element` + `tap` |
|
|
549
|
+
| Debug layout issues | `screenshot` |
|
|
550
|
+
| Verify visual appearance | `screenshot` |
|
|
551
|
+
| Find elements without labels | `screenshot` |
|
|
620
552
|
|
|
621
553
|
## Supported React Native Versions
|
|
622
554
|
|
package/build/core/android.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface AdbResult {
|
|
|
14
14
|
scaleFactor?: number;
|
|
15
15
|
originalWidth?: number;
|
|
16
16
|
originalHeight?: number;
|
|
17
|
+
devices?: AndroidDevice[];
|
|
17
18
|
}
|
|
18
19
|
/**
|
|
19
20
|
* Check if ADB is available in PATH
|
|
@@ -96,6 +97,81 @@ export declare function androidInputText(text: string, deviceId?: string): Promi
|
|
|
96
97
|
* Send a key event to an Android device
|
|
97
98
|
*/
|
|
98
99
|
export declare function androidKeyEvent(keyCode: number | keyof typeof ANDROID_KEY_EVENTS, deviceId?: string): Promise<AdbResult>;
|
|
100
|
+
/**
|
|
101
|
+
* UI Element from accessibility tree
|
|
102
|
+
*/
|
|
103
|
+
export interface AndroidUIElement {
|
|
104
|
+
text: string;
|
|
105
|
+
contentDesc: string;
|
|
106
|
+
resourceId: string;
|
|
107
|
+
className: string;
|
|
108
|
+
bounds: {
|
|
109
|
+
left: number;
|
|
110
|
+
top: number;
|
|
111
|
+
right: number;
|
|
112
|
+
bottom: number;
|
|
113
|
+
width: number;
|
|
114
|
+
height: number;
|
|
115
|
+
};
|
|
116
|
+
center: {
|
|
117
|
+
x: number;
|
|
118
|
+
y: number;
|
|
119
|
+
};
|
|
120
|
+
clickable: boolean;
|
|
121
|
+
enabled: boolean;
|
|
122
|
+
focused: boolean;
|
|
123
|
+
scrollable: boolean;
|
|
124
|
+
selected: boolean;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Result of element find operations
|
|
128
|
+
*/
|
|
129
|
+
export interface FindElementResult {
|
|
130
|
+
success: boolean;
|
|
131
|
+
found: boolean;
|
|
132
|
+
element?: AndroidUIElement;
|
|
133
|
+
allMatches?: AndroidUIElement[];
|
|
134
|
+
matchCount?: number;
|
|
135
|
+
error?: string;
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Result of wait for element operations
|
|
139
|
+
*/
|
|
140
|
+
export interface WaitForElementResult extends FindElementResult {
|
|
141
|
+
elapsedMs?: number;
|
|
142
|
+
timedOut?: boolean;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Options for finding elements
|
|
146
|
+
*/
|
|
147
|
+
export interface FindElementOptions {
|
|
148
|
+
text?: string;
|
|
149
|
+
textContains?: string;
|
|
150
|
+
contentDesc?: string;
|
|
151
|
+
contentDescContains?: string;
|
|
152
|
+
resourceId?: string;
|
|
153
|
+
index?: number;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Get UI accessibility tree from Android device using uiautomator
|
|
157
|
+
*/
|
|
158
|
+
export declare function androidGetUITree(deviceId?: string): Promise<{
|
|
159
|
+
success: boolean;
|
|
160
|
+
elements?: AndroidUIElement[];
|
|
161
|
+
rawXml?: string;
|
|
162
|
+
error?: string;
|
|
163
|
+
}>;
|
|
164
|
+
/**
|
|
165
|
+
* Find element(s) in the UI tree matching the given criteria
|
|
166
|
+
*/
|
|
167
|
+
export declare function androidFindElement(options: FindElementOptions, deviceId?: string): Promise<FindElementResult>;
|
|
168
|
+
/**
|
|
169
|
+
* Wait for element to appear on screen with polling
|
|
170
|
+
*/
|
|
171
|
+
export declare function androidWaitForElement(options: FindElementOptions & {
|
|
172
|
+
timeoutMs?: number;
|
|
173
|
+
pollIntervalMs?: number;
|
|
174
|
+
}, deviceId?: string): Promise<WaitForElementResult>;
|
|
99
175
|
/**
|
|
100
176
|
* Get device screen size
|
|
101
177
|
*/
|
|
@@ -105,6 +181,24 @@ export declare function androidGetScreenSize(deviceId?: string): Promise<{
|
|
|
105
181
|
height?: number;
|
|
106
182
|
error?: string;
|
|
107
183
|
}>;
|
|
184
|
+
/**
|
|
185
|
+
* Get device display density (dpi)
|
|
186
|
+
*/
|
|
187
|
+
export declare function androidGetDensity(deviceId?: string): Promise<{
|
|
188
|
+
success: boolean;
|
|
189
|
+
density?: number;
|
|
190
|
+
error?: string;
|
|
191
|
+
}>;
|
|
192
|
+
/**
|
|
193
|
+
* Get status bar height in pixels
|
|
194
|
+
* Android status bar is typically 24dp, but can vary by device/OS version
|
|
195
|
+
*/
|
|
196
|
+
export declare function androidGetStatusBarHeight(deviceId?: string): Promise<{
|
|
197
|
+
success: boolean;
|
|
198
|
+
heightPixels?: number;
|
|
199
|
+
heightDp?: number;
|
|
200
|
+
error?: string;
|
|
201
|
+
}>;
|
|
108
202
|
/**
|
|
109
203
|
* Android UI element from uiautomator dump
|
|
110
204
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../src/core/android.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,aAAa;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,cAAc,GAAG,gBAAgB,GAAG,MAAM,CAAC;IAC1E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAGD,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../src/core/android.ts"],"names":[],"mappings":"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"}
|