react-native-ai-debugger 1.0.6 → 1.0.8

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 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
- - **iOS accessibility inspection** - get UI element tree and element info at coordinates via IDB
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,47 +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 | 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 |
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) |
149
151
 
150
152
  ### iOS (Simulator)
151
153
 
152
- | Tool | Description |
153
- | --------------------- | ------------------------------------------- |
154
- | `list_ios_simulators` | List available iOS simulators |
155
- | `ios_screenshot` | Take a screenshot from an iOS simulator |
156
- | `ios_install_app` | Install an app bundle (.app) on a simulator |
157
- | `ios_launch_app` | Launch an app by bundle ID |
158
- | `ios_open_url` | Open a URL (deep links or web URLs) |
159
- | `ios_terminate_app` | Terminate a running app |
160
- | `ios_boot_simulator` | Boot a simulator by UDID |
161
-
162
- ### iOS UI Interaction (requires IDB)
163
-
164
- These tools require [Facebook IDB](https://fbidb.io/) to be installed: `brew install idb-companion`
165
-
166
- | Tool | Description |
167
- | ------------------- | ----------------------------------------------------- |
168
- | `ios_tap` | Tap at specific coordinates on screen |
169
- | `ios_tap_element` | Tap an element by its accessibility label |
170
- | `ios_swipe` | Swipe from one point to another |
171
- | `ios_input_text` | Type text into the active input field |
172
- | `ios_button` | Press hardware buttons (HOME, LOCK, SIRI, etc.) |
173
- | `ios_key_event` | Send a key event by keycode |
174
- | `ios_key_sequence` | Send multiple key events in sequence |
175
- | `ios_describe_all` | Get accessibility tree for entire screen |
176
- | `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) |
177
165
 
178
166
  ## Usage
179
167
 
@@ -476,78 +464,91 @@ Open a deep link:
476
464
  ios_open_url with url="myapp://settings"
477
465
  ```
478
466
 
479
- ### iOS UI Automation (requires IDB)
467
+ ## Efficient UI Automation (No Screenshots)
480
468
 
481
- Install IDB first: `brew install idb-companion`
469
+ For action triggering without layout debugging, use element-based tools instead of screenshots. This is **2-3x faster** and uses fewer tokens.
482
470
 
483
- **Important: Coordinate System**
484
- - iOS IDB uses **points** (logical coordinates), not pixels
485
- - For 2x Retina displays: 1 point = 2 pixels
486
- - Example: 1640x2360 pixel screenshot = 820x1180 points
487
- - Use `ios_describe_all` to get exact element coordinates in points
471
+ ### Android - Find and Tap by Text
488
472
 
489
- Tap on screen (coordinates in points):
490
-
491
- ```
492
- ios_tap with x=200 y=400
493
473
  ```
474
+ # Wait for screen to load
475
+ android_wait_for_element with text="Login"
494
476
 
495
- Long press (hold for 2 seconds):
477
+ # Find element (returns tap coordinates)
478
+ android_find_element with textContains="submit"
496
479
 
480
+ # Tap the element (use coordinates from find_element)
481
+ android_tap with x=540 y=960
497
482
  ```
498
- ios_tap with x=200 y=400 duration=2
499
- ```
500
-
501
- Swipe gesture:
502
483
 
503
- ```
504
- ios_swipe with startX=200 startY=600 endX=200 endY=200
505
- ```
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")
506
490
 
507
- Type text (tap input field first):
491
+ ### iOS - Find and Tap by Label (requires IDB)
508
492
 
493
+ ```bash
494
+ # Install IDB first
495
+ brew install idb-companion
509
496
  ```
510
- ios_tap with x=200 y=300
511
- ios_input_text with text="hello@example.com"
512
- ```
513
-
514
- Press hardware buttons:
515
497
 
516
498
  ```
517
- ios_button with button="HOME"
518
- ios_button with button="LOCK"
519
- ios_button with button="SIRI"
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"
520
504
  ```
521
505
 
522
- Get accessibility info for the screen:
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")
523
512
 
524
- ```
525
- ios_describe_all
526
- ```
513
+ ### Wait for Screen Transitions
527
514
 
528
- Get accessibility info at a specific point:
515
+ Both platforms support waiting with timeout:
529
516
 
530
517
  ```
531
- ios_describe_point with x=200 y=400
518
+ android_wait_for_element with text="Dashboard" timeoutMs=15000 pollIntervalMs=500
519
+ ios_wait_for_element with label="Home" timeoutMs=10000
532
520
  ```
533
521
 
534
- Tap an element by accessibility label:
522
+ ### Recommended Workflow (Priority Order)
535
523
 
536
- ```
537
- ios_tap_element with label="Settings"
538
- ```
524
+ **Always try accessibility tools first, fall back to screenshots only when needed:**
539
525
 
540
- Tap using partial label match:
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`
541
530
 
542
531
  ```
543
- ios_tap_element with labelContains="Sign"
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)
544
536
  ```
545
537
 
546
- When multiple elements match, use index (0-based):
538
+ **Why this order?**
539
+ - `find_element`: ~100-200 tokens, <100ms
540
+ - `screenshot`: ~400-500 tokens, 200-500ms
547
541
 
548
- ```
549
- ios_tap_element with labelContains="Button" index=1
550
- ```
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` |
551
552
 
552
553
  ## Supported React Native Versions
553
554
 
@@ -96,6 +96,81 @@ export declare function androidInputText(text: string, deviceId?: string): Promi
96
96
  * Send a key event to an Android device
97
97
  */
98
98
  export declare function androidKeyEvent(keyCode: number | keyof typeof ANDROID_KEY_EVENTS, deviceId?: string): Promise<AdbResult>;
99
+ /**
100
+ * UI Element from accessibility tree
101
+ */
102
+ export interface AndroidUIElement {
103
+ text: string;
104
+ contentDesc: string;
105
+ resourceId: string;
106
+ className: string;
107
+ bounds: {
108
+ left: number;
109
+ top: number;
110
+ right: number;
111
+ bottom: number;
112
+ width: number;
113
+ height: number;
114
+ };
115
+ center: {
116
+ x: number;
117
+ y: number;
118
+ };
119
+ clickable: boolean;
120
+ enabled: boolean;
121
+ focused: boolean;
122
+ scrollable: boolean;
123
+ selected: boolean;
124
+ }
125
+ /**
126
+ * Result of element find operations
127
+ */
128
+ export interface FindElementResult {
129
+ success: boolean;
130
+ found: boolean;
131
+ element?: AndroidUIElement;
132
+ allMatches?: AndroidUIElement[];
133
+ matchCount?: number;
134
+ error?: string;
135
+ }
136
+ /**
137
+ * Result of wait for element operations
138
+ */
139
+ export interface WaitForElementResult extends FindElementResult {
140
+ elapsedMs?: number;
141
+ timedOut?: boolean;
142
+ }
143
+ /**
144
+ * Options for finding elements
145
+ */
146
+ export interface FindElementOptions {
147
+ text?: string;
148
+ textContains?: string;
149
+ contentDesc?: string;
150
+ contentDescContains?: string;
151
+ resourceId?: string;
152
+ index?: number;
153
+ }
154
+ /**
155
+ * Get UI accessibility tree from Android device using uiautomator
156
+ */
157
+ export declare function androidGetUITree(deviceId?: string): Promise<{
158
+ success: boolean;
159
+ elements?: AndroidUIElement[];
160
+ rawXml?: string;
161
+ error?: string;
162
+ }>;
163
+ /**
164
+ * Find element(s) in the UI tree matching the given criteria
165
+ */
166
+ export declare function androidFindElement(options: FindElementOptions, deviceId?: string): Promise<FindElementResult>;
167
+ /**
168
+ * Wait for element to appear on screen with polling
169
+ */
170
+ export declare function androidWaitForElement(options: FindElementOptions & {
171
+ timeoutMs?: number;
172
+ pollIntervalMs?: number;
173
+ }, deviceId?: string): Promise<WaitForElementResult>;
99
174
  /**
100
175
  * Get device screen size
101
176
  */
@@ -105,4 +180,67 @@ export declare function androidGetScreenSize(deviceId?: string): Promise<{
105
180
  height?: number;
106
181
  error?: string;
107
182
  }>;
183
+ /**
184
+ * Android UI element from uiautomator dump
185
+ */
186
+ export interface AndroidAccessibilityElement {
187
+ class: string;
188
+ text?: string;
189
+ contentDesc?: string;
190
+ resourceId?: string;
191
+ bounds: {
192
+ left: number;
193
+ top: number;
194
+ right: number;
195
+ bottom: number;
196
+ };
197
+ frame: {
198
+ x: number;
199
+ y: number;
200
+ width: number;
201
+ height: number;
202
+ };
203
+ tap: {
204
+ x: number;
205
+ y: number;
206
+ };
207
+ children: AndroidAccessibilityElement[];
208
+ checkable?: boolean;
209
+ checked?: boolean;
210
+ clickable?: boolean;
211
+ enabled?: boolean;
212
+ focusable?: boolean;
213
+ focused?: boolean;
214
+ scrollable?: boolean;
215
+ selected?: boolean;
216
+ }
217
+ /**
218
+ * Result type for accessibility operations
219
+ */
220
+ export interface AndroidDescribeResult {
221
+ success: boolean;
222
+ elements?: AndroidAccessibilityElement[];
223
+ formatted?: string;
224
+ error?: string;
225
+ }
226
+ /**
227
+ * Get the UI hierarchy from the connected Android device using uiautomator dump
228
+ */
229
+ export declare function androidDescribeAll(deviceId?: string): Promise<AndroidDescribeResult>;
230
+ /**
231
+ * Get accessibility info for the UI element at specific coordinates
232
+ */
233
+ export declare function androidDescribePoint(x: number, y: number, deviceId?: string): Promise<AndroidDescribeResult>;
234
+ /**
235
+ * Tap an element by its text, content-description, or resource-id
236
+ */
237
+ export declare function androidTapElement(options: {
238
+ text?: string;
239
+ textContains?: string;
240
+ contentDesc?: string;
241
+ contentDescContains?: string;
242
+ resourceId?: string;
243
+ index?: number;
244
+ deviceId?: string;
245
+ }): Promise<AdbResult>;
108
246
  //# sourceMappingURL=android.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../src/core/android.ts"],"names":[],"mappings":"AAaA,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;CAC3B;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAOvD;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,SAAS,CAAC,CA6D7D;AAED;;GAEG;AACH,wBAAsB,uBAAuB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAiBtE;AASD;;GAEG;AACH,wBAAsB,iBAAiB,CACnC,UAAU,CAAC,EAAE,MAAM,EACnB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC,CAqFpB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACnC,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,GAC5D,OAAO,CAAC,SAAS,CAAC,CA0DpB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,WAAW,EAAE,MAAM,EACnB,YAAY,CAAC,EAAE,MAAM,EACrB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC,CAmDpB;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACrC,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,SAAS,CAAC,CAoDpB;AAMD;;GAEG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;CAuBrB,CAAC;AAEX;;GAEG;AACH,wBAAsB,UAAU,CAC5B,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC,CAkCpB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAClC,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,UAAU,GAAE,MAAa,EACzB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC,CAuCpB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAY,EACxB,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC,CAwCpB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAClC,IAAI,EAAE,MAAM,EACZ,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC,CA+GpB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACjC,OAAO,EAAE,MAAM,GAAG,MAAM,OAAO,kBAAkB,EACjD,QAAQ,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,CAAC,CAoDpB;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IACnE,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CA4CD"}
1
+ {"version":3,"file":"android.d.ts","sourceRoot":"","sources":["../../src/core/android.ts"],"names":[],"mappings":"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"}