@mobileai/react-native 0.3.0 → 0.4.1

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
@@ -16,7 +16,10 @@ Wrap your navigation with `<AIAgent>`. The AI automatically understands your ent
16
16
 
17
17
  ## ✨ Features
18
18
 
19
- - 🤖 **Zero-config UI understanding** — No need to annotate your views. The AI reads your UI automatically.
19
+ - 🤖 **Zero-config UI understanding** — No annotations, no accessibility labels. The AI reads your entire React Fiber tree automatically.
20
+ - 🎯 **Universal component support** — Works with every React Native component (Pressable, Switch, TextInput, custom components) without modification.
21
+ - 🖼️ **Media inference** — Detects images and videos on screen, captures their URIs, and infers context from parent component names — enabling Gemini's vision capabilities.
22
+ - 📐 **Compact DOM output** — Collapses structural view nesting into flat, token-efficient output. Your 50-level deep navigation bar becomes a single line.
20
23
  - 🧭 **Auto-navigation** — Navigates between screens to complete multi-step tasks.
21
24
  - 🔒 **Production-grade security** — Element gating, content masking, lifecycle hooks, human-in-the-loop confirmation.
22
25
  - 🧩 **Custom actions** — Expose any business logic (checkout, API calls) as AI-callable tools with `useAction`.
@@ -55,6 +58,33 @@ export default function App() {
55
58
 
56
59
  A floating chat bar appears automatically. Ask the AI to navigate, tap buttons, fill forms — it reads your live UI and acts.
57
60
 
61
+ ## 🧠 How It Works
62
+
63
+ The SDK traverses your **React Fiber tree** at runtime and generates a compact, LLM-friendly representation of everything on screen:
64
+
65
+ ```
66
+ Account Settings
67
+ [image in="SettingsScreen" src="https://randomuser.me/api/portraits/men/32.jpg"]
68
+ Demo User
69
+ demo@test.com
70
+ Profile Information
71
+ Full Name
72
+ [0]<text-input>Enter your name />
73
+ Email Address
74
+ [1]<text-input>Enter your email />
75
+ Notifications
76
+ Email Alerts
77
+ [2]<switch value="true"> />
78
+ Push Notifications
79
+ [3]<switch value="false"> />
80
+ ```
81
+
82
+ **Key design decisions:**
83
+ - **Structural views are transparent** — React Navigation's 50+ nested `<View>` layers are collapsed. Only interactive elements and text content appear.
84
+ - **Media is context-aware** — Images emit `[image in="ComponentName" src="url"]`, giving the LLM both *where* the image is and the full URL for Gemini's vision model.
85
+ - **State is explicit** — Switch values, check states, and input values are emitted as attributes so the LLM knows the current state.
86
+ - **Polymorphic tap** — `tap(index)` works on any component: calls `onPress` for buttons, `onValueChange` for switches, and bubbles up the Fiber tree for custom wrapper components.
87
+
58
88
  ## 🔌 API Reference
59
89
 
60
90
  ### `<AIAgent>` Component
@@ -244,10 +274,10 @@ This starts two servers:
244
274
 
245
275
  | Tool | Description |
246
276
  |------|-------------|
247
- | `tap(index)` | Tap an interactive element. |
248
- | `type(index, text)` | Type text into an input. |
277
+ | `tap(index)` | Tap any interactive element. Polymorphic: triggers `onPress` for buttons, `onValueChange` for switches, bubbles up Fiber tree for wrapper components. |
278
+ | `type(index, text)` | Type text into a text-input. |
249
279
  | `navigate(screen)` | Navigate to a screen. |
250
- | `done(text)` | Complete the task. |
280
+ | `done(text)` | Complete the task with a response. |
251
281
  | `ask_user(question)` | Ask the user for clarification. |
252
282
 
253
283
  ## 📋 Requirements
@@ -21,7 +21,13 @@ const PRESSABLE_TYPES = new Set(['Pressable', 'TouchableOpacity', 'TouchableHigh
21
21
  const TEXT_INPUT_TYPES = new Set(['TextInput', 'RCTSinglelineTextInputView', 'RCTMultilineTextInputView']);
22
22
  const SWITCH_TYPES = new Set(['Switch', 'RCTSwitch']);
23
23
  const TEXT_TYPES = new Set(['Text', 'RCTText']);
24
- // ScrollView/FlatList/SectionList detection can be added later for scroll tool
24
+
25
+ // Media component types for Component-Context Media Inference
26
+ const IMAGE_TYPES = new Set(['Image', 'RCTImageView', 'ExpoImage', 'FastImage', 'CachedImage']);
27
+ const VIDEO_TYPES = new Set(['Video', 'ExpoVideo', 'RCTVideo', 'VideoPlayer', 'VideoView']);
28
+
29
+ // Known RN internal component names to skip when walking up for context
30
+ const RN_INTERNAL_NAMES = new Set(['View', 'RCTView', 'Pressable', 'TouchableOpacity', 'TouchableHighlight', 'ScrollView', 'RCTScrollView', 'FlatList', 'SectionList', 'SafeAreaView', 'RNCSafeAreaView', 'KeyboardAvoidingView', 'Modal', 'StatusBar', 'Text', 'RCTText', 'AnimatedComponent', 'AnimatedComponentWrapper', 'Animated']);
25
31
 
26
32
  // ─── State Extraction (mirrors page-agent DEFAULT_INCLUDE_ATTRIBUTES) ──
27
33
 
@@ -71,6 +77,25 @@ export function hasAnyEventHandler(props) {
71
77
  return false;
72
78
  }
73
79
 
80
+ /**
81
+ * Walk UP the Fiber tree to find the nearest custom (user-defined) component name.
82
+ * Skips known React Native internal component names.
83
+ * This provides semantic context for media elements (e.g., an Image inside "ProfileHeader").
84
+ */
85
+ function getNearestCustomComponentName(fiber, maxDepth = 8) {
86
+ let current = fiber?.return;
87
+ let depth = 0;
88
+ while (current && depth < maxDepth) {
89
+ const name = getComponentName(current);
90
+ if (name && !RN_INTERNAL_NAMES.has(name) && !PRESSABLE_TYPES.has(name)) {
91
+ return name;
92
+ }
93
+ current = current.return;
94
+ depth++;
95
+ }
96
+ return null;
97
+ }
98
+
74
99
  // ─── Fiber Node Helpers ────────────────────────────────────────
75
100
 
76
101
  /**
@@ -336,23 +361,44 @@ export function walkFiberTree(rootRef, config) {
336
361
  return elementOutput;
337
362
  }
338
363
 
339
- // Non-interactive structural nodes
364
+ // Non-interactive structural nodes — collapse view chains to reduce noise
365
+ // Only emit text content; structural <view> wrappers are transparent
340
366
  const typeStr = node.type && typeof node.type === 'string' ? node.type : node.elementType && typeof node.elementType === 'string' ? node.elementType : null;
341
367
  if (typeStr === 'RCTText' || typeStr === 'Text') {
342
368
  const textContent = extractRawText(props.children);
343
369
  if (textContent && textContent.trim() !== '') {
344
- return `${indent}<text>${textContent.trim()}</text>\n`;
370
+ return `${indent}${textContent.trim()}\n`;
345
371
  }
346
372
  }
347
- if (childrenText.trim() !== '') {
348
- return `${indent}<view>\n${childrenText}${indent}</view>\n`;
373
+
374
+ // ── Media Detection: Component-Context Media Inference ──
375
+ const componentName = getComponentName(node);
376
+ if (componentName && IMAGE_TYPES.has(componentName)) {
377
+ const context = getNearestCustomComponentName(node);
378
+ const alt = props.alt || props.accessibilityLabel || '';
379
+ // Emit the full URI so Gemini can use vision to analyze the image
380
+ const src = typeof props.source === 'object' && props.source?.uri ? props.source.uri : '';
381
+ const attrs = [context ? `in="${context}"` : '', alt ? `alt="${alt}"` : '', src ? `src="${src}"` : ''].filter(Boolean).join(' ');
382
+ return `${indent}[image${attrs ? ' ' + attrs : ''}]\n`;
383
+ }
384
+ if (componentName && VIDEO_TYPES.has(componentName)) {
385
+ const context = getNearestCustomComponentName(node);
386
+ const paused = props.paused !== undefined ? props.paused : props.shouldPlay !== undefined ? !props.shouldPlay : null;
387
+ // Capture video source URI and poster image
388
+ const src = typeof props.source === 'object' && props.source?.uri ? props.source.uri : '';
389
+ const poster = props.posterSource?.uri || props.poster || '';
390
+ const attrs = [context ? `in="${context}"` : '', paused !== null ? `state="${paused ? 'paused' : 'playing'}"` : '', src ? `src="${src}"` : '', poster ? `poster="${poster}"` : ''].filter(Boolean).join(' ');
391
+ return `${indent}[video${attrs ? ' ' + attrs : ''}]\n`;
349
392
  }
350
- return '';
393
+
394
+ // Structural views: pass children through without adding <view> wrapper
395
+ // This collapses the 50+ nesting levels into flat, readable output
396
+ return childrenText;
351
397
  }
352
398
  let elementsText = processNode(fiber, 0);
353
399
 
354
- // Clean up empty views and excessive newlines
355
- elementsText = elementsText.replace(/<view>\s*<\/view>\n?/g, '');
400
+ // Clean up excessive blank lines
401
+ elementsText = elementsText.replace(/\n{3,}/g, '\n\n');
356
402
  logger.info('FiberTreeWalker', `Found ${interactives.length} interactive elements`);
357
403
  return {
358
404
  elementsText: elementsText.trim(),
@@ -1 +1 @@
1
- {"version":3,"names":["logger","PRESSABLE_TYPES","Set","TEXT_INPUT_TYPES","SWITCH_TYPES","TEXT_TYPES","STATE_PROPS","extractStateAttributes","props","parts","accessibilityState","k","v","Object","entries","undefined","push","accessibilityRole","key","join","hasAnyEventHandler","keys","startsWith","getComponentName","fiber","type","displayName","name","render","getElementType","memoizedProps","has","role","onPress","onChangeText","onValueChange","isDisabled","disabled","editable","extractTextContent","maxDepth","child","childName","childProps","sibling","text","extractRawText","children","nestedText","trim","String","Array","isArray","map","filter","Boolean","getFiberRoot","hook","globalThis","__REACT_DEVTOOLS_GLOBAL_HOOK__","renderers","size","rendererId","roots","getFiberRoots","fiberRoot","values","next","value","current","debug","e","getFiberFromRef","ref","rootFiber","_reactInternals","_reactInternalInstance","fiberKey","find","warn","matchesRefList","node","refs","length","stateNode","walkFiberTree","rootRef","config","elementsText","interactives","currentIndex","hasWhitelist","interactiveWhitelist","processNode","depth","isInsideInteractive","aiIgnore","interactiveBlacklist","childText","currentChild","isWhitelisted","elementType","shouldInclude","childrenText","indent","repeat","resolvedType","label","accessibilityLabel","placeholder","index","fiberNode","stateAttrs","attrStr","textContent","elementOutput","typeStr","replace","info"],"sourceRoot":"../../../src","sources":["core/FiberTreeWalker.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["logger","PRESSABLE_TYPES","Set","TEXT_INPUT_TYPES","SWITCH_TYPES","TEXT_TYPES","IMAGE_TYPES","VIDEO_TYPES","RN_INTERNAL_NAMES","STATE_PROPS","extractStateAttributes","props","parts","accessibilityState","k","v","Object","entries","undefined","push","accessibilityRole","key","join","hasAnyEventHandler","keys","startsWith","getNearestCustomComponentName","fiber","maxDepth","current","return","depth","name","getComponentName","has","type","displayName","render","getElementType","memoizedProps","role","onPress","onChangeText","onValueChange","isDisabled","disabled","editable","extractTextContent","child","childName","childProps","sibling","text","extractRawText","children","nestedText","trim","String","Array","isArray","map","filter","Boolean","getFiberRoot","hook","globalThis","__REACT_DEVTOOLS_GLOBAL_HOOK__","renderers","size","rendererId","roots","getFiberRoots","fiberRoot","values","next","value","debug","e","getFiberFromRef","ref","rootFiber","_reactInternals","_reactInternalInstance","fiberKey","find","warn","matchesRefList","node","refs","length","stateNode","walkFiberTree","rootRef","config","elementsText","interactives","currentIndex","hasWhitelist","interactiveWhitelist","processNode","isInsideInteractive","aiIgnore","interactiveBlacklist","childText","currentChild","isWhitelisted","elementType","shouldInclude","childrenText","indent","repeat","resolvedType","label","accessibilityLabel","placeholder","index","fiberNode","stateAttrs","attrStr","textContent","elementOutput","typeStr","componentName","context","alt","src","source","uri","attrs","paused","shouldPlay","poster","posterSource","replace","info"],"sourceRoot":"../../../src","sources":["core/FiberTreeWalker.ts"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"FiberTreeWalker.d.ts","sourceRoot":"","sources":["../../../../src/core/FiberTreeWalker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,SAAS,CAAC;AAI/D,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;CAC/C;AAsDD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAQtD;AAsND,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,CA4F3E"}
1
+ {"version":3,"file":"FiberTreeWalker.d.ts","sourceRoot":"","sources":["../../../../src/core/FiberTreeWalker.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,kBAAkB,EAAe,MAAM,SAAS,CAAC;AAI/D,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,4FAA4F;IAC5F,oBAAoB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;CAC/C;AAsED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,GAAG,GAAG,OAAO,CAQtD;AAyOD,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,kBAAkB,EAAE,CAAC;CACpC;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,UAAU,CA6H3E"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mobileai/react-native",
3
- "version": "0.3.0",
3
+ "version": "0.4.1",
4
4
  "description": "Build autonomous AI agents for React Native and Expo apps. Provides AI-native UI traversal, tool calling, and structured reasoning.",
5
5
  "main": "./lib/module/index.js",
6
6
  "source": "./src/index.ts",
@@ -35,7 +35,23 @@ const PRESSABLE_TYPES = new Set([
35
35
  const TEXT_INPUT_TYPES = new Set(['TextInput', 'RCTSinglelineTextInputView', 'RCTMultilineTextInputView']);
36
36
  const SWITCH_TYPES = new Set(['Switch', 'RCTSwitch']);
37
37
  const TEXT_TYPES = new Set(['Text', 'RCTText']);
38
- // ScrollView/FlatList/SectionList detection can be added later for scroll tool
38
+
39
+ // Media component types for Component-Context Media Inference
40
+ const IMAGE_TYPES = new Set([
41
+ 'Image', 'RCTImageView', 'ExpoImage', 'FastImage', 'CachedImage',
42
+ ]);
43
+ const VIDEO_TYPES = new Set([
44
+ 'Video', 'ExpoVideo', 'RCTVideo', 'VideoPlayer', 'VideoView',
45
+ ]);
46
+
47
+ // Known RN internal component names to skip when walking up for context
48
+ const RN_INTERNAL_NAMES = new Set([
49
+ 'View', 'RCTView', 'Pressable', 'TouchableOpacity', 'TouchableHighlight',
50
+ 'ScrollView', 'RCTScrollView', 'FlatList', 'SectionList',
51
+ 'SafeAreaView', 'RNCSafeAreaView', 'KeyboardAvoidingView',
52
+ 'Modal', 'StatusBar', 'Text', 'RCTText', 'AnimatedComponent',
53
+ 'AnimatedComponentWrapper', 'Animated',
54
+ ]);
39
55
 
40
56
  // ─── State Extraction (mirrors page-agent DEFAULT_INCLUDE_ATTRIBUTES) ──
41
57
 
@@ -86,6 +102,25 @@ export function hasAnyEventHandler(props: any): boolean {
86
102
  return false;
87
103
  }
88
104
 
105
+ /**
106
+ * Walk UP the Fiber tree to find the nearest custom (user-defined) component name.
107
+ * Skips known React Native internal component names.
108
+ * This provides semantic context for media elements (e.g., an Image inside "ProfileHeader").
109
+ */
110
+ function getNearestCustomComponentName(fiber: any, maxDepth: number = 8): string | null {
111
+ let current = fiber?.return;
112
+ let depth = 0;
113
+ while (current && depth < maxDepth) {
114
+ const name = getComponentName(current);
115
+ if (name && !RN_INTERNAL_NAMES.has(name) && !PRESSABLE_TYPES.has(name)) {
116
+ return name;
117
+ }
118
+ current = current.return;
119
+ depth++;
120
+ }
121
+ return null;
122
+ }
123
+
89
124
  // ─── Fiber Node Helpers ────────────────────────────────────────
90
125
 
91
126
  /**
@@ -376,28 +411,61 @@ export function walkFiberTree(rootRef: any, config?: WalkConfig): WalkResult {
376
411
  return elementOutput;
377
412
  }
378
413
 
379
- // Non-interactive structural nodes
414
+ // Non-interactive structural nodes — collapse view chains to reduce noise
415
+ // Only emit text content; structural <view> wrappers are transparent
380
416
  const typeStr = node.type && typeof node.type === 'string' ? node.type :
381
417
  (node.elementType && typeof node.elementType === 'string' ? node.elementType : null);
382
418
 
383
419
  if (typeStr === 'RCTText' || typeStr === 'Text') {
384
420
  const textContent = extractRawText(props.children);
385
421
  if (textContent && textContent.trim() !== '') {
386
- return `${indent}<text>${textContent.trim()}</text>\n`;
422
+ return `${indent}${textContent.trim()}\n`;
387
423
  }
388
424
  }
389
425
 
390
- if (childrenText.trim() !== '') {
391
- return `${indent}<view>\n${childrenText}${indent}</view>\n`;
426
+ // ── Media Detection: Component-Context Media Inference ──
427
+ const componentName = getComponentName(node);
428
+ if (componentName && IMAGE_TYPES.has(componentName)) {
429
+ const context = getNearestCustomComponentName(node);
430
+ const alt = props.alt || props.accessibilityLabel || '';
431
+ // Emit the full URI so Gemini can use vision to analyze the image
432
+ const src = typeof props.source === 'object' && props.source?.uri
433
+ ? props.source.uri
434
+ : '';
435
+ const attrs = [
436
+ context ? `in="${context}"` : '',
437
+ alt ? `alt="${alt}"` : '',
438
+ src ? `src="${src}"` : '',
439
+ ].filter(Boolean).join(' ');
440
+ return `${indent}[image${attrs ? ' ' + attrs : ''}]\n`;
441
+ }
442
+
443
+ if (componentName && VIDEO_TYPES.has(componentName)) {
444
+ const context = getNearestCustomComponentName(node);
445
+ const paused = props.paused !== undefined ? props.paused : props.shouldPlay !== undefined ? !props.shouldPlay : null;
446
+ // Capture video source URI and poster image
447
+ const src = typeof props.source === 'object' && props.source?.uri
448
+ ? props.source.uri
449
+ : '';
450
+ const poster = props.posterSource?.uri || props.poster || '';
451
+ const attrs = [
452
+ context ? `in="${context}"` : '',
453
+ paused !== null ? `state="${paused ? 'paused' : 'playing'}"` : '',
454
+ src ? `src="${src}"` : '',
455
+ poster ? `poster="${poster}"` : '',
456
+ ].filter(Boolean).join(' ');
457
+ return `${indent}[video${attrs ? ' ' + attrs : ''}]\n`;
392
458
  }
393
459
 
394
- return '';
460
+ // Structural views: pass children through without adding <view> wrapper
461
+ // This collapses the 50+ nesting levels into flat, readable output
462
+ return childrenText;
395
463
  }
396
464
 
397
465
  let elementsText = processNode(fiber, 0);
398
466
 
399
- // Clean up empty views and excessive newlines
400
- elementsText = elementsText.replace(/<view>\s*<\/view>\n?/g, '');
467
+ // Clean up excessive blank lines
468
+ elementsText = elementsText.replace(/\n{3,}/g, '\n\n');
401
469
 
402
470
  logger.info('FiberTreeWalker', `Found ${interactives.length} interactive elements`);
403
471
  return { elementsText: elementsText.trim(), interactives };