@mobileai/react-native 0.9.17 → 0.9.19

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.
Files changed (292) hide show
  1. package/LICENSE +28 -20
  2. package/MobileAIFloatingOverlay.podspec +25 -0
  3. package/android/build.gradle +61 -0
  4. package/android/src/main/AndroidManifest.xml +3 -0
  5. package/android/src/main/java/com/mobileai/overlay/FloatingOverlayView.kt +151 -0
  6. package/android/src/main/java/com/mobileai/overlay/MobileAIOverlayPackage.kt +23 -0
  7. package/android/src/newarch/com/mobileai/overlay/FloatingOverlayViewManager.kt +45 -0
  8. package/android/src/oldarch/com/mobileai/overlay/FloatingOverlayViewManager.kt +29 -0
  9. package/ios/MobileAIFloatingOverlayComponentView.mm +73 -0
  10. package/lib/module/components/AIAgent.js +902 -136
  11. package/lib/module/components/AIConsentDialog.js +439 -0
  12. package/lib/module/components/AgentChatBar.js +828 -134
  13. package/lib/module/components/AgentOverlay.js +2 -1
  14. package/lib/module/components/DiscoveryTooltip.js +21 -9
  15. package/lib/module/components/FloatingOverlayWrapper.js +108 -0
  16. package/lib/module/components/Icons.js +123 -0
  17. package/lib/module/config/endpoints.js +12 -2
  18. package/lib/module/core/AgentRuntime.js +373 -27
  19. package/lib/module/core/FiberAdapter.js +56 -0
  20. package/lib/module/core/FiberTreeWalker.js +186 -80
  21. package/lib/module/core/IdleDetector.js +19 -0
  22. package/lib/module/core/NativeAlertInterceptor.js +191 -0
  23. package/lib/module/core/systemPrompt.js +203 -45
  24. package/lib/module/index.js +3 -0
  25. package/lib/module/providers/GeminiProvider.js +72 -56
  26. package/lib/module/providers/ProviderFactory.js +6 -2
  27. package/lib/module/services/AudioInputService.js +3 -12
  28. package/lib/module/services/AudioOutputService.js +1 -13
  29. package/lib/module/services/ConversationService.js +166 -0
  30. package/lib/module/services/MobileAIKnowledgeRetriever.js +41 -0
  31. package/lib/module/services/VoiceService.js +29 -8
  32. package/lib/module/services/telemetry/MobileAI.js +44 -0
  33. package/lib/module/services/telemetry/TelemetryService.js +13 -1
  34. package/lib/module/services/telemetry/TouchAutoCapture.js +44 -18
  35. package/lib/module/specs/FloatingOverlayNativeComponent.ts +19 -0
  36. package/lib/module/support/CSATSurvey.js +95 -12
  37. package/lib/module/support/EscalationSocket.js +70 -1
  38. package/lib/module/support/ReportedIssueEventSource.js +148 -0
  39. package/lib/module/support/escalateTool.js +4 -2
  40. package/lib/module/support/index.js +1 -0
  41. package/lib/module/support/reportIssueTool.js +127 -0
  42. package/lib/module/support/supportPrompt.js +77 -9
  43. package/lib/module/tools/guideTool.js +2 -1
  44. package/lib/module/tools/longPressTool.js +4 -3
  45. package/lib/module/tools/pickerTool.js +6 -4
  46. package/lib/module/tools/tapTool.js +12 -3
  47. package/lib/module/tools/typeTool.js +19 -10
  48. package/lib/module/utils/logger.js +175 -6
  49. package/lib/typescript/react-native.config.d.ts +11 -0
  50. package/lib/typescript/src/components/AIAgent.d.ts +28 -2
  51. package/lib/typescript/src/components/AIConsentDialog.d.ts +153 -0
  52. package/lib/typescript/src/components/AgentChatBar.d.ts +15 -2
  53. package/lib/typescript/src/components/DiscoveryTooltip.d.ts +3 -1
  54. package/lib/typescript/src/components/FloatingOverlayWrapper.d.ts +51 -0
  55. package/lib/typescript/src/components/Icons.d.ts +8 -0
  56. package/lib/typescript/src/config/endpoints.d.ts +5 -3
  57. package/lib/typescript/src/core/AgentRuntime.d.ts +4 -0
  58. package/lib/typescript/src/core/FiberAdapter.d.ts +25 -0
  59. package/lib/typescript/src/core/FiberTreeWalker.d.ts +2 -0
  60. package/lib/typescript/src/core/IdleDetector.d.ts +11 -0
  61. package/lib/typescript/src/core/NativeAlertInterceptor.d.ts +55 -0
  62. package/lib/typescript/src/core/types.d.ts +106 -1
  63. package/lib/typescript/src/index.d.ts +9 -4
  64. package/lib/typescript/src/providers/GeminiProvider.d.ts +6 -5
  65. package/lib/typescript/src/services/ConversationService.d.ts +55 -0
  66. package/lib/typescript/src/services/MobileAIKnowledgeRetriever.d.ts +9 -0
  67. package/lib/typescript/src/services/telemetry/MobileAI.d.ts +7 -0
  68. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts +1 -1
  69. package/lib/typescript/src/services/telemetry/TouchAutoCapture.d.ts +9 -6
  70. package/lib/typescript/src/services/telemetry/types.d.ts +3 -1
  71. package/lib/typescript/src/specs/FloatingOverlayNativeComponent.d.ts +17 -0
  72. package/lib/typescript/src/support/EscalationSocket.d.ts +17 -0
  73. package/lib/typescript/src/support/ReportedIssueEventSource.d.ts +24 -0
  74. package/lib/typescript/src/support/escalateTool.d.ts +5 -0
  75. package/lib/typescript/src/support/index.d.ts +2 -1
  76. package/lib/typescript/src/support/reportIssueTool.d.ts +20 -0
  77. package/lib/typescript/src/support/types.d.ts +56 -1
  78. package/lib/typescript/src/utils/logger.d.ts +15 -0
  79. package/package.json +20 -9
  80. package/react-native.config.js +12 -0
  81. package/lib/module/__cli_tmp__.js.map +0 -1
  82. package/lib/module/components/AIAgent.js.map +0 -1
  83. package/lib/module/components/AIZone.js.map +0 -1
  84. package/lib/module/components/AgentChatBar.js.map +0 -1
  85. package/lib/module/components/AgentErrorBoundary.js.map +0 -1
  86. package/lib/module/components/AgentOverlay.js.map +0 -1
  87. package/lib/module/components/DiscoveryTooltip.js.map +0 -1
  88. package/lib/module/components/HighlightOverlay.js.map +0 -1
  89. package/lib/module/components/Icons.js.map +0 -1
  90. package/lib/module/components/ProactiveHint.js.map +0 -1
  91. package/lib/module/components/cards/InfoCard.js.map +0 -1
  92. package/lib/module/components/cards/ReviewSummary.js.map +0 -1
  93. package/lib/module/config/endpoints.js.map +0 -1
  94. package/lib/module/core/ActionRegistry.js.map +0 -1
  95. package/lib/module/core/AgentRuntime.js.map +0 -1
  96. package/lib/module/core/FiberTreeWalker.js.map +0 -1
  97. package/lib/module/core/IdleDetector.js.map +0 -1
  98. package/lib/module/core/MCPBridge.js.map +0 -1
  99. package/lib/module/core/ScreenDehydrator.js.map +0 -1
  100. package/lib/module/core/ZoneRegistry.js.map +0 -1
  101. package/lib/module/core/systemPrompt.js.map +0 -1
  102. package/lib/module/core/types.js.map +0 -1
  103. package/lib/module/hooks/useAction.js.map +0 -1
  104. package/lib/module/index.js.map +0 -1
  105. package/lib/module/plugin/withAppIntents.js.map +0 -1
  106. package/lib/module/providers/GeminiProvider.js.map +0 -1
  107. package/lib/module/providers/OpenAIProvider.js.map +0 -1
  108. package/lib/module/providers/ProviderFactory.js.map +0 -1
  109. package/lib/module/services/AudioInputService.js.map +0 -1
  110. package/lib/module/services/AudioOutputService.js.map +0 -1
  111. package/lib/module/services/KnowledgeBaseService.js.map +0 -1
  112. package/lib/module/services/VoiceService.js.map +0 -1
  113. package/lib/module/services/flags/FlagService.js.map +0 -1
  114. package/lib/module/services/telemetry/MobileAI.js.map +0 -1
  115. package/lib/module/services/telemetry/PiiScrubber.js.map +0 -1
  116. package/lib/module/services/telemetry/TelemetryService.js.map +0 -1
  117. package/lib/module/services/telemetry/TouchAutoCapture.js.map +0 -1
  118. package/lib/module/services/telemetry/device.js.map +0 -1
  119. package/lib/module/services/telemetry/deviceMetadata.js.map +0 -1
  120. package/lib/module/services/telemetry/index.js.map +0 -1
  121. package/lib/module/services/telemetry/types.js.map +0 -1
  122. package/lib/module/support/CSATSurvey.js.map +0 -1
  123. package/lib/module/support/EscalationEventSource.js.map +0 -1
  124. package/lib/module/support/EscalationSocket.js.map +0 -1
  125. package/lib/module/support/SupportChatModal.js.map +0 -1
  126. package/lib/module/support/SupportGreeting.js.map +0 -1
  127. package/lib/module/support/TicketStore.js.map +0 -1
  128. package/lib/module/support/escalateTool.js.map +0 -1
  129. package/lib/module/support/index.js.map +0 -1
  130. package/lib/module/support/supportPrompt.js.map +0 -1
  131. package/lib/module/support/types.js.map +0 -1
  132. package/lib/module/tools/datePickerTool.js.map +0 -1
  133. package/lib/module/tools/guideTool.js.map +0 -1
  134. package/lib/module/tools/index.js.map +0 -1
  135. package/lib/module/tools/keyboardTool.js.map +0 -1
  136. package/lib/module/tools/longPressTool.js.map +0 -1
  137. package/lib/module/tools/pickerTool.js.map +0 -1
  138. package/lib/module/tools/restoreTool.js.map +0 -1
  139. package/lib/module/tools/scrollTool.js.map +0 -1
  140. package/lib/module/tools/simplifyTool.js.map +0 -1
  141. package/lib/module/tools/sliderTool.js.map +0 -1
  142. package/lib/module/tools/tapTool.js.map +0 -1
  143. package/lib/module/tools/typeTool.js.map +0 -1
  144. package/lib/module/tools/types.js.map +0 -1
  145. package/lib/module/types/jsx.d.js.map +0 -1
  146. package/lib/module/utils/audioUtils.js.map +0 -1
  147. package/lib/module/utils/logger.js.map +0 -1
  148. package/lib/typescript/babel.config.d.ts.map +0 -1
  149. package/lib/typescript/bin/generate-map.d.cts.map +0 -1
  150. package/lib/typescript/eslint.config.d.mts.map +0 -1
  151. package/lib/typescript/generate-map.d.ts.map +0 -1
  152. package/lib/typescript/src/__cli_tmp__.d.ts.map +0 -1
  153. package/lib/typescript/src/components/AIAgent.d.ts.map +0 -1
  154. package/lib/typescript/src/components/AIZone.d.ts.map +0 -1
  155. package/lib/typescript/src/components/AgentChatBar.d.ts.map +0 -1
  156. package/lib/typescript/src/components/AgentErrorBoundary.d.ts.map +0 -1
  157. package/lib/typescript/src/components/AgentOverlay.d.ts.map +0 -1
  158. package/lib/typescript/src/components/DiscoveryTooltip.d.ts.map +0 -1
  159. package/lib/typescript/src/components/HighlightOverlay.d.ts.map +0 -1
  160. package/lib/typescript/src/components/Icons.d.ts.map +0 -1
  161. package/lib/typescript/src/components/ProactiveHint.d.ts.map +0 -1
  162. package/lib/typescript/src/components/cards/InfoCard.d.ts.map +0 -1
  163. package/lib/typescript/src/components/cards/ReviewSummary.d.ts.map +0 -1
  164. package/lib/typescript/src/config/endpoints.d.ts.map +0 -1
  165. package/lib/typescript/src/core/ActionRegistry.d.ts.map +0 -1
  166. package/lib/typescript/src/core/AgentRuntime.d.ts.map +0 -1
  167. package/lib/typescript/src/core/FiberTreeWalker.d.ts.map +0 -1
  168. package/lib/typescript/src/core/IdleDetector.d.ts.map +0 -1
  169. package/lib/typescript/src/core/MCPBridge.d.ts.map +0 -1
  170. package/lib/typescript/src/core/ScreenDehydrator.d.ts.map +0 -1
  171. package/lib/typescript/src/core/ZoneRegistry.d.ts.map +0 -1
  172. package/lib/typescript/src/core/systemPrompt.d.ts.map +0 -1
  173. package/lib/typescript/src/core/types.d.ts.map +0 -1
  174. package/lib/typescript/src/hooks/useAction.d.ts.map +0 -1
  175. package/lib/typescript/src/index.d.ts.map +0 -1
  176. package/lib/typescript/src/plugin/withAppIntents.d.ts.map +0 -1
  177. package/lib/typescript/src/providers/GeminiProvider.d.ts.map +0 -1
  178. package/lib/typescript/src/providers/OpenAIProvider.d.ts.map +0 -1
  179. package/lib/typescript/src/providers/ProviderFactory.d.ts.map +0 -1
  180. package/lib/typescript/src/services/AudioInputService.d.ts.map +0 -1
  181. package/lib/typescript/src/services/AudioOutputService.d.ts.map +0 -1
  182. package/lib/typescript/src/services/KnowledgeBaseService.d.ts.map +0 -1
  183. package/lib/typescript/src/services/VoiceService.d.ts.map +0 -1
  184. package/lib/typescript/src/services/flags/FlagService.d.ts.map +0 -1
  185. package/lib/typescript/src/services/telemetry/MobileAI.d.ts.map +0 -1
  186. package/lib/typescript/src/services/telemetry/PiiScrubber.d.ts.map +0 -1
  187. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +0 -1
  188. package/lib/typescript/src/services/telemetry/TouchAutoCapture.d.ts.map +0 -1
  189. package/lib/typescript/src/services/telemetry/device.d.ts.map +0 -1
  190. package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts.map +0 -1
  191. package/lib/typescript/src/services/telemetry/index.d.ts.map +0 -1
  192. package/lib/typescript/src/services/telemetry/types.d.ts.map +0 -1
  193. package/lib/typescript/src/support/CSATSurvey.d.ts.map +0 -1
  194. package/lib/typescript/src/support/EscalationEventSource.d.ts.map +0 -1
  195. package/lib/typescript/src/support/EscalationSocket.d.ts.map +0 -1
  196. package/lib/typescript/src/support/SupportChatModal.d.ts.map +0 -1
  197. package/lib/typescript/src/support/SupportGreeting.d.ts.map +0 -1
  198. package/lib/typescript/src/support/TicketStore.d.ts.map +0 -1
  199. package/lib/typescript/src/support/escalateTool.d.ts.map +0 -1
  200. package/lib/typescript/src/support/index.d.ts.map +0 -1
  201. package/lib/typescript/src/support/supportPrompt.d.ts.map +0 -1
  202. package/lib/typescript/src/support/types.d.ts.map +0 -1
  203. package/lib/typescript/src/tools/datePickerTool.d.ts.map +0 -1
  204. package/lib/typescript/src/tools/guideTool.d.ts.map +0 -1
  205. package/lib/typescript/src/tools/index.d.ts.map +0 -1
  206. package/lib/typescript/src/tools/keyboardTool.d.ts.map +0 -1
  207. package/lib/typescript/src/tools/longPressTool.d.ts.map +0 -1
  208. package/lib/typescript/src/tools/pickerTool.d.ts.map +0 -1
  209. package/lib/typescript/src/tools/restoreTool.d.ts.map +0 -1
  210. package/lib/typescript/src/tools/scrollTool.d.ts.map +0 -1
  211. package/lib/typescript/src/tools/simplifyTool.d.ts.map +0 -1
  212. package/lib/typescript/src/tools/sliderTool.d.ts.map +0 -1
  213. package/lib/typescript/src/tools/tapTool.d.ts.map +0 -1
  214. package/lib/typescript/src/tools/typeTool.d.ts.map +0 -1
  215. package/lib/typescript/src/tools/types.d.ts.map +0 -1
  216. package/lib/typescript/src/utils/audioUtils.d.ts.map +0 -1
  217. package/lib/typescript/src/utils/logger.d.ts.map +0 -1
  218. package/src/__cli_tmp__.tsx +0 -9
  219. package/src/cli/analyzers/chain-analyzer.ts +0 -183
  220. package/src/cli/extractors/ai-extractor.ts +0 -6
  221. package/src/cli/extractors/ast-extractor.ts +0 -551
  222. package/src/cli/generate-intents.ts +0 -140
  223. package/src/cli/generate-map.ts +0 -121
  224. package/src/cli/generate-swift.ts +0 -116
  225. package/src/cli/scanners/expo-scanner.ts +0 -203
  226. package/src/cli/scanners/rn-scanner.ts +0 -445
  227. package/src/components/AIAgent.tsx +0 -1716
  228. package/src/components/AIZone.tsx +0 -147
  229. package/src/components/AgentChatBar.tsx +0 -1143
  230. package/src/components/AgentErrorBoundary.tsx +0 -78
  231. package/src/components/AgentOverlay.tsx +0 -73
  232. package/src/components/DiscoveryTooltip.tsx +0 -148
  233. package/src/components/HighlightOverlay.tsx +0 -136
  234. package/src/components/Icons.tsx +0 -253
  235. package/src/components/ProactiveHint.tsx +0 -145
  236. package/src/components/cards/InfoCard.tsx +0 -58
  237. package/src/components/cards/ReviewSummary.tsx +0 -76
  238. package/src/config/endpoints.ts +0 -22
  239. package/src/core/ActionRegistry.ts +0 -105
  240. package/src/core/AgentRuntime.ts +0 -1471
  241. package/src/core/FiberTreeWalker.ts +0 -930
  242. package/src/core/IdleDetector.ts +0 -72
  243. package/src/core/MCPBridge.ts +0 -163
  244. package/src/core/ScreenDehydrator.ts +0 -53
  245. package/src/core/ZoneRegistry.ts +0 -44
  246. package/src/core/systemPrompt.ts +0 -431
  247. package/src/core/types.ts +0 -521
  248. package/src/hooks/useAction.ts +0 -182
  249. package/src/index.ts +0 -83
  250. package/src/plugin/withAppIntents.ts +0 -98
  251. package/src/providers/GeminiProvider.ts +0 -357
  252. package/src/providers/OpenAIProvider.ts +0 -379
  253. package/src/providers/ProviderFactory.ts +0 -36
  254. package/src/services/AudioInputService.ts +0 -226
  255. package/src/services/AudioOutputService.ts +0 -236
  256. package/src/services/KnowledgeBaseService.ts +0 -156
  257. package/src/services/VoiceService.ts +0 -451
  258. package/src/services/flags/FlagService.ts +0 -137
  259. package/src/services/telemetry/MobileAI.ts +0 -66
  260. package/src/services/telemetry/PiiScrubber.ts +0 -17
  261. package/src/services/telemetry/TelemetryService.ts +0 -323
  262. package/src/services/telemetry/TouchAutoCapture.ts +0 -165
  263. package/src/services/telemetry/device.ts +0 -93
  264. package/src/services/telemetry/deviceMetadata.ts +0 -13
  265. package/src/services/telemetry/index.ts +0 -13
  266. package/src/services/telemetry/types.ts +0 -75
  267. package/src/support/CSATSurvey.tsx +0 -304
  268. package/src/support/EscalationEventSource.ts +0 -190
  269. package/src/support/EscalationSocket.ts +0 -152
  270. package/src/support/SupportChatModal.tsx +0 -563
  271. package/src/support/SupportGreeting.tsx +0 -161
  272. package/src/support/TicketStore.ts +0 -100
  273. package/src/support/escalateTool.ts +0 -174
  274. package/src/support/index.ts +0 -29
  275. package/src/support/supportPrompt.ts +0 -55
  276. package/src/support/types.ts +0 -155
  277. package/src/tools/datePickerTool.ts +0 -60
  278. package/src/tools/guideTool.ts +0 -76
  279. package/src/tools/index.ts +0 -20
  280. package/src/tools/keyboardTool.ts +0 -30
  281. package/src/tools/longPressTool.ts +0 -61
  282. package/src/tools/pickerTool.ts +0 -115
  283. package/src/tools/restoreTool.ts +0 -33
  284. package/src/tools/scrollTool.ts +0 -156
  285. package/src/tools/simplifyTool.ts +0 -33
  286. package/src/tools/sliderTool.ts +0 -65
  287. package/src/tools/tapTool.ts +0 -93
  288. package/src/tools/typeTool.ts +0 -113
  289. package/src/tools/types.ts +0 -58
  290. package/src/types/jsx.d.ts +0 -20
  291. package/src/utils/audioUtils.ts +0 -54
  292. package/src/utils/logger.ts +0 -38
@@ -49,7 +49,8 @@ const styles = StyleSheet.create({
49
49
  left: 0,
50
50
  right: 0,
51
51
  alignItems: 'center',
52
- zIndex: 9999
52
+ zIndex: 100001,
53
+ elevation: 1000
53
54
  },
54
55
  pill: {
55
56
  flexDirection: 'row',
@@ -12,14 +12,16 @@ import { useEffect, useRef } from 'react';
12
12
  import { View, Text, Pressable, StyleSheet, Animated } from 'react-native';
13
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
14
14
  const LABELS = {
15
- en: ' I can help you navigate the app and do things for you!',
16
- ar: ' أقدر أساعدك تتنقل في التطبيق وأعمل حاجات بدالك!'
15
+ en: 'Ask me to find items, answer questions, or complete tasks for you.',
16
+ ar: 'اطلب مني ألاقي العناصر، أجاوب على الأسئلة، أو أكمل المهام عنك.'
17
17
  };
18
18
  const AUTO_DISMISS_MS = 6000;
19
19
  export function DiscoveryTooltip({
20
20
  language,
21
21
  primaryColor,
22
- onDismiss
22
+ onDismiss,
23
+ side = 'left',
24
+ message
23
25
  }) {
24
26
  const scaleAnim = useRef(new Animated.Value(0)).current;
25
27
  const opacityAnim = useRef(new Animated.Value(0)).current;
@@ -57,7 +59,7 @@ export function DiscoveryTooltip({
57
59
  const isArabic = language === 'ar';
58
60
  const bgColor = primaryColor || '#1a1a2e';
59
61
  return /*#__PURE__*/_jsxs(Animated.View, {
60
- style: [styles.container, {
62
+ style: [styles.container, side === 'right' ? styles.containerRight : styles.containerLeft, {
61
63
  backgroundColor: bgColor,
62
64
  transform: [{
63
65
  scale: scaleAnim
@@ -69,10 +71,10 @@ export function DiscoveryTooltip({
69
71
  style: styles.contentArea,
70
72
  children: /*#__PURE__*/_jsx(Text, {
71
73
  style: [styles.text, isArabic && styles.textRTL],
72
- children: LABELS[language]
74
+ children: message || LABELS[language]
73
75
  })
74
76
  }), /*#__PURE__*/_jsx(View, {
75
- style: [styles.pointer, {
77
+ style: [styles.pointer, side === 'right' ? styles.pointerRight : styles.pointerLeft, {
76
78
  borderTopColor: bgColor
77
79
  }]
78
80
  })]
@@ -82,8 +84,7 @@ const styles = StyleSheet.create({
82
84
  container: {
83
85
  position: 'absolute',
84
86
  bottom: 70,
85
- right: -4,
86
- minWidth: 200,
87
+ width: 220,
87
88
  maxWidth: 260,
88
89
  borderRadius: 16,
89
90
  paddingHorizontal: 14,
@@ -97,6 +98,12 @@ const styles = StyleSheet.create({
97
98
  shadowRadius: 8,
98
99
  elevation: 6
99
100
  },
101
+ containerLeft: {
102
+ right: -4
103
+ },
104
+ containerRight: {
105
+ left: -4
106
+ },
100
107
  contentArea: {
101
108
  flexDirection: 'row',
102
109
  alignItems: 'center'
@@ -114,7 +121,6 @@ const styles = StyleSheet.create({
114
121
  pointer: {
115
122
  position: 'absolute',
116
123
  bottom: -8,
117
- right: 22,
118
124
  width: 0,
119
125
  height: 0,
120
126
  borderLeftWidth: 8,
@@ -123,6 +129,12 @@ const styles = StyleSheet.create({
123
129
  borderLeftColor: 'transparent',
124
130
  borderRightColor: 'transparent',
125
131
  borderTopColor: '#1a1a2e'
132
+ },
133
+ pointerLeft: {
134
+ right: 22
135
+ },
136
+ pointerRight: {
137
+ left: 22
126
138
  }
127
139
  });
128
140
  //# sourceMappingURL=DiscoveryTooltip.js.map
@@ -0,0 +1,108 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * FloatingOverlayWrapper — Cross-platform elevated overlay.
5
+ *
6
+ * Platform strategy (in priority order):
7
+ *
8
+ * iOS:
9
+ * 1. `FullWindowOverlay` from react-native-screens (optional peer dep).
10
+ * Creates a separate UIWindow at UIWindow.Level.alert+1.
11
+ * Renders ABOVE all native Modals, system alerts, and navigation chrome.
12
+ * 2. Falls back to plain View if react-native-screens is not installed.
13
+ *
14
+ * Android (both Old and New Architecture):
15
+ * 1. Native `MobileAIFloatingOverlay` ViewManager (bundled in this library).
16
+ * Creates a Dialog window with TYPE_APPLICATION_PANEL (z=1000),
17
+ * above normal app Dialog windows (TYPE_APPLICATION, z=2).
18
+ * No SYSTEM_ALERT_WINDOW permission needed — scoped to app's own window.
19
+ * 2. Falls back to plain View if the app hasn't been rebuilt after install
20
+ * (graceful degradation with DEV warning).
21
+ *
22
+ * Usage:
23
+ * <FloatingOverlayWrapper fallbackStyle={styles.floatingLayer}>
24
+ * <View pointerEvents="box-none" style={StyleSheet.absoluteFill}>
25
+ * {chatBar}
26
+ * {consentDialog} ← must be INSIDE the wrapper, AFTER the chat bar in JSX
27
+ * </View>
28
+ * </FloatingOverlayWrapper>
29
+ *
30
+ * Note: FullWindowOverlay on iOS does NOT officially accept style props in its TS definition,
31
+ * but passing StyleSheet.absoluteFill is often necessary to prevent dimensions collapsing conditionally.
32
+ */
33
+
34
+ // imports consolidated above
35
+
36
+ // ─── iOS: FullWindowOverlay (react-native-screens optional peer dep) ──────────
37
+
38
+ let FullWindowOverlay = null;
39
+ if (Platform.OS === 'ios') {
40
+ try {
41
+ // Literal string required by Metro bundler — try/catch handles MODULE_NOT_FOUND
42
+ const screens = require('react-native-screens');
43
+ FullWindowOverlay = screens.FullWindowOverlay ?? null;
44
+ } catch {
45
+ // react-native-screens not installed — falls back to View
46
+ }
47
+ }
48
+
49
+ // ─── Android: MobileAIFloatingOverlay (native module bundled in this library) ──
50
+
51
+ let NativeFloatingOverlay = null;
52
+ if (Platform.OS === 'android') {
53
+ try {
54
+ const {
55
+ requireNativeComponent
56
+ } = require('react-native');
57
+ // Throws if ViewManager is not registered (app hasn't been rebuilt after install)
58
+ NativeFloatingOverlay = requireNativeComponent('MobileAIFloatingOverlay');
59
+ } catch {
60
+ if (__DEV__) {
61
+ console.warn('[MobileAI] MobileAIFloatingOverlay native module not found on Android.\n' + 'The chat bar may appear behind native Modals.\n' + 'Fix: rebuild the app with `npx react-native run-android` or `npx expo run:android`.');
62
+ }
63
+ }
64
+ }
65
+
66
+ // ─── Export: whether a true elevated overlay is active ───────────────────────
67
+
68
+ /**
69
+ * True when a native elevated overlay is available on the current platform.
70
+ * Used by AIConsentDialog to decide whether to render as View vs Modal.
71
+ *
72
+ * iOS + react-native-screens installed → true
73
+ * Android + native rebuild done → true
74
+ * Everything else (fallback) → false
75
+ */
76
+ export const isNativeOverlayActive = Platform.OS === 'ios' && !!FullWindowOverlay || Platform.OS === 'android' && !!NativeFloatingOverlay;
77
+
78
+ // ─── Component ────────────────────────────────────────────────────────────────
79
+
80
+ import { Platform, View, StyleSheet } from 'react-native';
81
+ import { jsx as _jsx } from "react/jsx-runtime";
82
+ export function FloatingOverlayWrapper({
83
+ children,
84
+ fallbackStyle
85
+ }) {
86
+ // iOS: FullWindowOverlay — separate UIWindow above everything
87
+ if (Platform.OS === 'ios' && FullWindowOverlay) {
88
+ // @ts-ignore - Some versions of react-native-screens don't type 'style'
89
+ return /*#__PURE__*/_jsx(FullWindowOverlay, {
90
+ style: StyleSheet.absoluteFill,
91
+ children: children
92
+ });
93
+ }
94
+
95
+ // Android: native elevated Dialog window (TYPE_APPLICATION_PANEL)
96
+ if (Platform.OS === 'android' && NativeFloatingOverlay) {
97
+ return /*#__PURE__*/_jsx(NativeFloatingOverlay, {
98
+ children: children
99
+ });
100
+ }
101
+
102
+ // Fallback: regular View — same behavior as before this overlay feature
103
+ return /*#__PURE__*/_jsx(View, {
104
+ style: fallbackStyle,
105
+ children: children
106
+ });
107
+ }
108
+ //# sourceMappingURL=FloatingOverlayWrapper.js.map
@@ -334,4 +334,127 @@ export function AIBadge({
334
334
  })]
335
335
  });
336
336
  }
337
+ // ─── History Icon (clock face: circle + hour + minute hands) ──
338
+
339
+ export function HistoryIcon({
340
+ size = 18,
341
+ color = '#fff'
342
+ }) {
343
+ const half = size / 2;
344
+ const stroke = Math.max(1.5, size * 0.09);
345
+ const ringSize = size * 0.9;
346
+ const minuteLen = half * 0.72; // from center to 12 o'clock
347
+ const hourLen = half * 0.52; // from center to 3 o'clock
348
+
349
+ return /*#__PURE__*/_jsxs(View, {
350
+ style: {
351
+ width: size,
352
+ height: size
353
+ },
354
+ children: [/*#__PURE__*/_jsx(View, {
355
+ style: {
356
+ position: 'absolute',
357
+ width: ringSize,
358
+ height: ringSize,
359
+ borderRadius: ringSize / 2,
360
+ borderWidth: stroke,
361
+ borderColor: color,
362
+ top: (size - ringSize) / 2,
363
+ left: (size - ringSize) / 2
364
+ }
365
+ }), /*#__PURE__*/_jsx(View, {
366
+ style: {
367
+ position: 'absolute',
368
+ width: stroke,
369
+ height: minuteLen,
370
+ backgroundColor: color,
371
+ borderRadius: stroke,
372
+ top: half - minuteLen,
373
+ left: half - stroke / 2
374
+ }
375
+ }), /*#__PURE__*/_jsx(View, {
376
+ style: {
377
+ position: 'absolute',
378
+ width: hourLen,
379
+ height: stroke,
380
+ backgroundColor: color,
381
+ borderRadius: stroke,
382
+ top: half - stroke / 2,
383
+ left: half
384
+ }
385
+ }), /*#__PURE__*/_jsx(View, {
386
+ style: {
387
+ position: 'absolute',
388
+ width: stroke * 2,
389
+ height: stroke * 2,
390
+ borderRadius: stroke,
391
+ backgroundColor: color,
392
+ top: half - stroke,
393
+ left: half - stroke
394
+ }
395
+ })]
396
+ });
397
+ }
398
+
399
+ // ─── New Chat Icon (chat bubble + plus) ───────────────────────
400
+
401
+ export function NewChatIcon({
402
+ size = 18,
403
+ color = '#fff'
404
+ }) {
405
+ const stroke = size * 0.1;
406
+ const armLen = size * 0.35;
407
+ return /*#__PURE__*/_jsxs(View, {
408
+ style: {
409
+ width: size,
410
+ height: size,
411
+ alignItems: 'center',
412
+ justifyContent: 'center'
413
+ },
414
+ children: [/*#__PURE__*/_jsx(View, {
415
+ style: {
416
+ position: 'absolute',
417
+ top: 0,
418
+ left: 0,
419
+ width: size * 0.72,
420
+ height: size * 0.62,
421
+ borderRadius: size * 0.15,
422
+ borderWidth: stroke,
423
+ borderColor: color
424
+ }
425
+ }), /*#__PURE__*/_jsx(View, {
426
+ style: {
427
+ position: 'absolute',
428
+ bottom: size * 0.22,
429
+ left: size * 0.1,
430
+ width: 0,
431
+ height: 0,
432
+ borderTopWidth: size * 0.14,
433
+ borderTopColor: color,
434
+ borderRightWidth: size * 0.1,
435
+ borderRightColor: 'transparent'
436
+ }
437
+ }), /*#__PURE__*/_jsx(View, {
438
+ style: {
439
+ position: 'absolute',
440
+ top: size * 0.09,
441
+ right: 0,
442
+ width: armLen,
443
+ height: stroke,
444
+ backgroundColor: color,
445
+ borderRadius: stroke
446
+ }
447
+ }), /*#__PURE__*/_jsx(View, {
448
+ style: {
449
+ position: 'absolute',
450
+ top: size * 0.09 - armLen / 2 + stroke / 2,
451
+ right: armLen / 2 - stroke / 2,
452
+ width: stroke,
453
+ height: armLen,
454
+ backgroundColor: color,
455
+ borderRadius: stroke
456
+ }
457
+ })]
458
+ });
459
+ }
337
460
  //# sourceMappingURL=Icons.js.map
@@ -10,13 +10,23 @@
10
10
  * to route telemetry through your own backend without touching this file.
11
11
  */
12
12
 
13
- const MOBILEAI_BASE = 'http://localhost:3001';
13
+ import { Platform } from 'react-native';
14
+ const isDev = typeof __DEV__ !== 'undefined' ? __DEV__ : process.env.NODE_ENV === 'development';
15
+ const getDevLocalhost = () => {
16
+ if (Platform.OS === 'android') {
17
+ return 'http://10.0.2.2:3001';
18
+ }
19
+ return 'http://localhost:3001';
20
+ };
21
+ const MOBILEAI_BASE = process.env.EXPO_PUBLIC_MOBILEAI_BASE_URL || process.env.NEXT_PUBLIC_MOBILEAI_BASE_URL || (isDev ? getDevLocalhost() : 'https://api.mobileai.dev');
14
22
  export const ENDPOINTS = {
15
23
  /** Telemetry event ingest — receives batched SDK events */
16
24
  telemetryIngest: `${MOBILEAI_BASE}/api/v1/events`,
17
25
  /** Feature flag sync — fetches remote flags for this analyticsKey */
18
26
  featureFlags: `${MOBILEAI_BASE}/api/v1/flags`,
19
27
  /** Live agent escalation (support handoff) */
20
- escalation: `${MOBILEAI_BASE}`
28
+ escalation: `${MOBILEAI_BASE}`,
29
+ /** AI conversation history — save and retrieve per-user AI chat sessions */
30
+ conversations: `${MOBILEAI_BASE}/api/v1/conversations`
21
31
  };
22
32
  //# sourceMappingURL=endpoints.js.map