@mobileai/react-native 0.9.0 → 0.9.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.
Files changed (173) hide show
  1. package/README.md +121 -0
  2. package/lib/module/components/AIAgent.js +248 -53
  3. package/lib/module/components/AIAgent.js.map +1 -1
  4. package/lib/module/components/AIZone.js +140 -0
  5. package/lib/module/components/AIZone.js.map +1 -0
  6. package/lib/module/components/AgentErrorBoundary.js +9 -0
  7. package/lib/module/components/AgentErrorBoundary.js.map +1 -1
  8. package/lib/module/components/HighlightOverlay.js +138 -0
  9. package/lib/module/components/HighlightOverlay.js.map +1 -0
  10. package/lib/module/components/ProactiveHint.js +138 -0
  11. package/lib/module/components/ProactiveHint.js.map +1 -0
  12. package/lib/module/components/cards/InfoCard.js +65 -0
  13. package/lib/module/components/cards/InfoCard.js.map +1 -0
  14. package/lib/module/components/cards/ReviewSummary.js +74 -0
  15. package/lib/module/components/cards/ReviewSummary.js.map +1 -0
  16. package/lib/module/core/AgentRuntime.js +16 -3
  17. package/lib/module/core/AgentRuntime.js.map +1 -1
  18. package/lib/module/core/FiberTreeWalker.js +62 -85
  19. package/lib/module/core/FiberTreeWalker.js.map +1 -1
  20. package/lib/module/core/IdleDetector.js +51 -0
  21. package/lib/module/core/IdleDetector.js.map +1 -0
  22. package/lib/module/core/ZoneRegistry.js +47 -0
  23. package/lib/module/core/ZoneRegistry.js.map +1 -0
  24. package/lib/module/core/systemPrompt.js +2 -0
  25. package/lib/module/core/systemPrompt.js.map +1 -1
  26. package/lib/module/index.js +21 -0
  27. package/lib/module/index.js.map +1 -1
  28. package/lib/module/services/AudioOutputService.js +10 -0
  29. package/lib/module/services/AudioOutputService.js.map +1 -1
  30. package/lib/module/services/flags/FlagService.js +117 -0
  31. package/lib/module/services/flags/FlagService.js.map +1 -0
  32. package/lib/module/services/telemetry/MobileAI.js +66 -0
  33. package/lib/module/services/telemetry/MobileAI.js.map +1 -0
  34. package/lib/module/services/telemetry/PiiScrubber.js +17 -0
  35. package/lib/module/services/telemetry/PiiScrubber.js.map +1 -0
  36. package/lib/module/services/telemetry/TelemetryService.js +260 -0
  37. package/lib/module/services/telemetry/TelemetryService.js.map +1 -0
  38. package/lib/module/services/telemetry/TouchAutoCapture.js +159 -0
  39. package/lib/module/services/telemetry/TouchAutoCapture.js.map +1 -0
  40. package/lib/module/services/telemetry/device.js +19 -0
  41. package/lib/module/services/telemetry/device.js.map +1 -0
  42. package/lib/module/services/telemetry/index.js +9 -0
  43. package/lib/module/services/telemetry/index.js.map +1 -0
  44. package/lib/module/services/telemetry/types.js +2 -0
  45. package/lib/module/services/telemetry/types.js.map +1 -0
  46. package/lib/module/support/CSATSurvey.js +273 -0
  47. package/lib/module/support/CSATSurvey.js.map +1 -0
  48. package/lib/module/support/EscalationSocket.js +92 -0
  49. package/lib/module/support/EscalationSocket.js.map +1 -0
  50. package/lib/module/support/SupportGreeting.js +142 -0
  51. package/lib/module/support/SupportGreeting.js.map +1 -0
  52. package/lib/module/support/escalateTool.js +120 -0
  53. package/lib/module/support/escalateTool.js.map +1 -0
  54. package/lib/module/support/index.js +18 -0
  55. package/lib/module/support/index.js.map +1 -0
  56. package/lib/module/support/supportPrompt.js +47 -0
  57. package/lib/module/support/supportPrompt.js.map +1 -0
  58. package/lib/module/support/types.js +2 -0
  59. package/lib/module/support/types.js.map +1 -0
  60. package/lib/module/tools/guideTool.js +61 -0
  61. package/lib/module/tools/guideTool.js.map +1 -0
  62. package/lib/module/tools/index.js +3 -0
  63. package/lib/module/tools/index.js.map +1 -1
  64. package/lib/module/tools/restoreTool.js +31 -0
  65. package/lib/module/tools/restoreTool.js.map +1 -0
  66. package/lib/module/tools/simplifyTool.js +31 -0
  67. package/lib/module/tools/simplifyTool.js.map +1 -0
  68. package/lib/module/types/jsx.d.js +4 -0
  69. package/lib/module/types/jsx.d.js.map +1 -0
  70. package/lib/typescript/src/components/AIAgent.d.ts +21 -2
  71. package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
  72. package/lib/typescript/src/components/AIZone.d.ts +16 -0
  73. package/lib/typescript/src/components/AIZone.d.ts.map +1 -0
  74. package/lib/typescript/src/components/AgentErrorBoundary.d.ts +1 -0
  75. package/lib/typescript/src/components/AgentErrorBoundary.d.ts.map +1 -1
  76. package/lib/typescript/src/components/HighlightOverlay.d.ts +10 -0
  77. package/lib/typescript/src/components/HighlightOverlay.d.ts.map +1 -0
  78. package/lib/typescript/src/components/ProactiveHint.d.ts +10 -0
  79. package/lib/typescript/src/components/ProactiveHint.d.ts.map +1 -0
  80. package/lib/typescript/src/components/cards/InfoCard.d.ts +19 -0
  81. package/lib/typescript/src/components/cards/InfoCard.d.ts.map +1 -0
  82. package/lib/typescript/src/components/cards/ReviewSummary.d.ts +19 -0
  83. package/lib/typescript/src/components/cards/ReviewSummary.d.ts.map +1 -0
  84. package/lib/typescript/src/core/AgentRuntime.d.ts +1 -0
  85. package/lib/typescript/src/core/AgentRuntime.d.ts.map +1 -1
  86. package/lib/typescript/src/core/FiberTreeWalker.d.ts.map +1 -1
  87. package/lib/typescript/src/core/IdleDetector.d.ts +27 -0
  88. package/lib/typescript/src/core/IdleDetector.d.ts.map +1 -0
  89. package/lib/typescript/src/core/ZoneRegistry.d.ts +13 -0
  90. package/lib/typescript/src/core/ZoneRegistry.d.ts.map +1 -0
  91. package/lib/typescript/src/core/systemPrompt.d.ts.map +1 -1
  92. package/lib/typescript/src/core/types.d.ts +54 -0
  93. package/lib/typescript/src/core/types.d.ts.map +1 -1
  94. package/lib/typescript/src/index.d.ts +5 -0
  95. package/lib/typescript/src/index.d.ts.map +1 -1
  96. package/lib/typescript/src/services/AudioOutputService.d.ts.map +1 -1
  97. package/lib/typescript/src/services/flags/FlagService.d.ts +25 -0
  98. package/lib/typescript/src/services/flags/FlagService.d.ts.map +1 -0
  99. package/lib/typescript/src/services/telemetry/MobileAI.d.ts +38 -0
  100. package/lib/typescript/src/services/telemetry/MobileAI.d.ts.map +1 -0
  101. package/lib/typescript/src/services/telemetry/PiiScrubber.d.ts +6 -0
  102. package/lib/typescript/src/services/telemetry/PiiScrubber.d.ts.map +1 -0
  103. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts +49 -0
  104. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +1 -0
  105. package/lib/typescript/src/services/telemetry/TouchAutoCapture.d.ts +28 -0
  106. package/lib/typescript/src/services/telemetry/TouchAutoCapture.d.ts.map +1 -0
  107. package/lib/typescript/src/services/telemetry/device.d.ts +7 -0
  108. package/lib/typescript/src/services/telemetry/device.d.ts.map +1 -0
  109. package/lib/typescript/src/services/telemetry/index.d.ts +7 -0
  110. package/lib/typescript/src/services/telemetry/index.d.ts.map +1 -0
  111. package/lib/typescript/src/services/telemetry/types.d.ts +50 -0
  112. package/lib/typescript/src/services/telemetry/types.d.ts.map +1 -0
  113. package/lib/typescript/src/support/CSATSurvey.d.ts +20 -0
  114. package/lib/typescript/src/support/CSATSurvey.d.ts.map +1 -0
  115. package/lib/typescript/src/support/EscalationSocket.d.ts +38 -0
  116. package/lib/typescript/src/support/EscalationSocket.d.ts.map +1 -0
  117. package/lib/typescript/src/support/SupportGreeting.d.ts +19 -0
  118. package/lib/typescript/src/support/SupportGreeting.d.ts.map +1 -0
  119. package/lib/typescript/src/support/escalateTool.d.ts +25 -0
  120. package/lib/typescript/src/support/escalateTool.d.ts.map +1 -0
  121. package/lib/typescript/src/support/index.d.ts +11 -0
  122. package/lib/typescript/src/support/index.d.ts.map +1 -0
  123. package/lib/typescript/src/support/supportPrompt.d.ts +12 -0
  124. package/lib/typescript/src/support/supportPrompt.d.ts.map +1 -0
  125. package/lib/typescript/src/support/types.d.ts +114 -0
  126. package/lib/typescript/src/support/types.d.ts.map +1 -0
  127. package/lib/typescript/src/tools/guideTool.d.ts +4 -0
  128. package/lib/typescript/src/tools/guideTool.d.ts.map +1 -0
  129. package/lib/typescript/src/tools/index.d.ts +3 -0
  130. package/lib/typescript/src/tools/index.d.ts.map +1 -1
  131. package/lib/typescript/src/tools/restoreTool.d.ts +3 -0
  132. package/lib/typescript/src/tools/restoreTool.d.ts.map +1 -0
  133. package/lib/typescript/src/tools/simplifyTool.d.ts +3 -0
  134. package/lib/typescript/src/tools/simplifyTool.d.ts.map +1 -0
  135. package/lib/typescript/src/tools/types.d.ts +2 -0
  136. package/lib/typescript/src/tools/types.d.ts.map +1 -1
  137. package/package.json +5 -1
  138. package/src/components/AIAgent.tsx +253 -15
  139. package/src/components/AIZone.tsx +147 -0
  140. package/src/components/AgentErrorBoundary.tsx +10 -0
  141. package/src/components/HighlightOverlay.tsx +136 -0
  142. package/src/components/ProactiveHint.tsx +145 -0
  143. package/src/components/cards/InfoCard.tsx +58 -0
  144. package/src/components/cards/ReviewSummary.tsx +76 -0
  145. package/src/core/AgentRuntime.ts +18 -0
  146. package/src/core/FiberTreeWalker.ts +71 -93
  147. package/src/core/IdleDetector.ts +72 -0
  148. package/src/core/ZoneRegistry.ts +44 -0
  149. package/src/core/systemPrompt.ts +2 -0
  150. package/src/core/types.ts +60 -0
  151. package/src/index.ts +31 -0
  152. package/src/services/AudioOutputService.ts +13 -0
  153. package/src/services/flags/FlagService.ts +137 -0
  154. package/src/services/telemetry/MobileAI.ts +66 -0
  155. package/src/services/telemetry/PiiScrubber.ts +17 -0
  156. package/src/services/telemetry/TelemetryService.ts +291 -0
  157. package/src/services/telemetry/TouchAutoCapture.ts +165 -0
  158. package/src/services/telemetry/device.ts +16 -0
  159. package/src/services/telemetry/index.ts +13 -0
  160. package/src/services/telemetry/types.ts +75 -0
  161. package/src/support/CSATSurvey.tsx +304 -0
  162. package/src/support/EscalationSocket.ts +113 -0
  163. package/src/support/SupportGreeting.tsx +161 -0
  164. package/src/support/escalateTool.ts +134 -0
  165. package/src/support/index.ts +27 -0
  166. package/src/support/supportPrompt.ts +55 -0
  167. package/src/support/types.ts +141 -0
  168. package/src/tools/guideTool.ts +67 -0
  169. package/src/tools/index.ts +3 -0
  170. package/src/tools/restoreTool.ts +33 -0
  171. package/src/tools/simplifyTool.ts +33 -0
  172. package/src/tools/types.ts +2 -0
  173. package/src/types/jsx.d.ts +20 -0
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+
3
+ export class IdleDetector {
4
+ pulseTimer = null;
5
+ badgeTimer = null;
6
+ dismissed = false;
7
+ config = null;
8
+ start(config) {
9
+ this.config = config;
10
+ this.dismissed = false;
11
+ this.resetTimers();
12
+ }
13
+ reset() {
14
+ if (!this.config || this.dismissed) return;
15
+ this.config.onReset();
16
+ this.resetTimers();
17
+ }
18
+ dismiss() {
19
+ this.dismissed = true;
20
+ this.clearTimers();
21
+ if (this.config) {
22
+ this.config.onReset();
23
+ }
24
+ }
25
+ destroy() {
26
+ this.clearTimers();
27
+ this.config = null;
28
+ }
29
+ resetTimers() {
30
+ this.clearTimers();
31
+ if (!this.config || this.dismissed) return;
32
+ this.pulseTimer = setTimeout(() => {
33
+ this.config?.onPulse();
34
+ }, this.config.pulseAfterMs);
35
+ this.badgeTimer = setTimeout(() => {
36
+ const suggestion = this.config?.generateSuggestion?.() ?? "Need help with this screen?";
37
+ this.config?.onBadge(suggestion);
38
+ }, this.config.badgeAfterMs);
39
+ }
40
+ clearTimers() {
41
+ if (this.pulseTimer) {
42
+ clearTimeout(this.pulseTimer);
43
+ this.pulseTimer = null;
44
+ }
45
+ if (this.badgeTimer) {
46
+ clearTimeout(this.badgeTimer);
47
+ this.badgeTimer = null;
48
+ }
49
+ }
50
+ }
51
+ //# sourceMappingURL=IdleDetector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["IdleDetector","pulseTimer","badgeTimer","dismissed","config","start","resetTimers","reset","onReset","dismiss","clearTimers","destroy","setTimeout","onPulse","pulseAfterMs","suggestion","generateSuggestion","onBadge","badgeAfterMs","clearTimeout"],"sourceRoot":"../../../src","sources":["core/IdleDetector.ts"],"mappings":";;AAeA,OAAO,MAAMA,YAAY,CAAC;EAChBC,UAAU,GAAyC,IAAI;EACvDC,UAAU,GAAyC,IAAI;EACvDC,SAAS,GAAG,KAAK;EACjBC,MAAM,GAA8B,IAAI;EAEhDC,KAAKA,CAACD,MAA0B,EAAQ;IACtC,IAAI,CAACA,MAAM,GAAGA,MAAM;IACpB,IAAI,CAACD,SAAS,GAAG,KAAK;IACtB,IAAI,CAACG,WAAW,CAAC,CAAC;EACpB;EAEAC,KAAKA,CAAA,EAAS;IACZ,IAAI,CAAC,IAAI,CAACH,MAAM,IAAI,IAAI,CAACD,SAAS,EAAE;IACpC,IAAI,CAACC,MAAM,CAACI,OAAO,CAAC,CAAC;IACrB,IAAI,CAACF,WAAW,CAAC,CAAC;EACpB;EAEAG,OAAOA,CAAA,EAAS;IACd,IAAI,CAACN,SAAS,GAAG,IAAI;IACrB,IAAI,CAACO,WAAW,CAAC,CAAC;IAClB,IAAI,IAAI,CAACN,MAAM,EAAE;MACf,IAAI,CAACA,MAAM,CAACI,OAAO,CAAC,CAAC;IACvB;EACF;EAEAG,OAAOA,CAAA,EAAS;IACd,IAAI,CAACD,WAAW,CAAC,CAAC;IAClB,IAAI,CAACN,MAAM,GAAG,IAAI;EACpB;EAEQE,WAAWA,CAAA,EAAS;IAC1B,IAAI,CAACI,WAAW,CAAC,CAAC;IAElB,IAAI,CAAC,IAAI,CAACN,MAAM,IAAI,IAAI,CAACD,SAAS,EAAE;IAEpC,IAAI,CAACF,UAAU,GAAGW,UAAU,CAAC,MAAM;MACjC,IAAI,CAACR,MAAM,EAAES,OAAO,CAAC,CAAC;IACxB,CAAC,EAAE,IAAI,CAACT,MAAM,CAACU,YAAY,CAAC;IAE5B,IAAI,CAACZ,UAAU,GAAGU,UAAU,CAAC,MAAM;MACjC,MAAMG,UAAU,GAAG,IAAI,CAACX,MAAM,EAAEY,kBAAkB,GAAG,CAAC,IAAI,6BAA6B;MACvF,IAAI,CAACZ,MAAM,EAAEa,OAAO,CAACF,UAAU,CAAC;IAClC,CAAC,EAAE,IAAI,CAACX,MAAM,CAACc,YAAY,CAAC;EAC9B;EAEQR,WAAWA,CAAA,EAAS;IAC1B,IAAI,IAAI,CAACT,UAAU,EAAE;MACnBkB,YAAY,CAAC,IAAI,CAAClB,UAAU,CAAC;MAC7B,IAAI,CAACA,UAAU,GAAG,IAAI;IACxB;IACA,IAAI,IAAI,CAACC,UAAU,EAAE;MACnBiB,YAAY,CAAC,IAAI,CAACjB,UAAU,CAAC;MAC7B,IAAI,CAACA,UAAU,GAAG,IAAI;IACxB;EACF;AACF","ignoreList":[]}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+
3
+ import { createContext } from 'react';
4
+ export class ZoneRegistry {
5
+ zones = new Map();
6
+ register(config, ref) {
7
+ if (this.zones.has(config.id)) {
8
+ console.warn(`[MobileAI] Zone ID "${config.id}" is already registered on this screen. Overwriting.`);
9
+ }
10
+ this.zones.set(config.id, {
11
+ ...config,
12
+ ref
13
+ });
14
+ }
15
+ unregister(id) {
16
+ this.zones.delete(id);
17
+ }
18
+ get(id) {
19
+ return this.zones.get(id);
20
+ }
21
+ getAll() {
22
+ return Array.from(this.zones.values());
23
+ }
24
+ isActionAllowed(zoneId, action) {
25
+ const zone = this.get(zoneId);
26
+ if (!zone) return false;
27
+ switch (action) {
28
+ case 'highlight':
29
+ return !!zone.allowHighlight;
30
+ case 'hint':
31
+ return !!zone.allowInjectHint;
32
+ case 'simplify':
33
+ return !!zone.allowSimplify;
34
+ case 'card':
35
+ return !!zone.allowInjectCard;
36
+ default:
37
+ return false;
38
+ }
39
+ }
40
+ }
41
+
42
+ // Global registry instance shared across the Agent session
43
+ export const globalZoneRegistry = new ZoneRegistry();
44
+
45
+ // Export context so AIZone components can register themselves
46
+ export const ZoneRegistryContext = /*#__PURE__*/createContext(globalZoneRegistry);
47
+ //# sourceMappingURL=ZoneRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["createContext","ZoneRegistry","zones","Map","register","config","ref","has","id","console","warn","set","unregister","delete","get","getAll","Array","from","values","isActionAllowed","zoneId","action","zone","allowHighlight","allowInjectHint","allowSimplify","allowInjectCard","globalZoneRegistry","ZoneRegistryContext"],"sourceRoot":"../../../src","sources":["core/ZoneRegistry.ts"],"mappings":";;AAAA,SAAgBA,aAAa,QAAQ,OAAO;AAG5C,OAAO,MAAMC,YAAY,CAAC;EAChBC,KAAK,GAAG,IAAIC,GAAG,CAAyB,CAAC;EAEjDC,QAAQA,CAACC,MAAoB,EAAEC,GAAyB,EAAQ;IAC9D,IAAI,IAAI,CAACJ,KAAK,CAACK,GAAG,CAACF,MAAM,CAACG,EAAE,CAAC,EAAE;MAC7BC,OAAO,CAACC,IAAI,CAAC,uBAAuBL,MAAM,CAACG,EAAE,sDAAsD,CAAC;IACtG;IACA,IAAI,CAACN,KAAK,CAACS,GAAG,CAACN,MAAM,CAACG,EAAE,EAAE;MAAE,GAAGH,MAAM;MAAEC;IAAI,CAAC,CAAC;EAC/C;EAEAM,UAAUA,CAACJ,EAAU,EAAQ;IAC3B,IAAI,CAACN,KAAK,CAACW,MAAM,CAACL,EAAE,CAAC;EACvB;EAEAM,GAAGA,CAACN,EAAU,EAA8B;IAC1C,OAAO,IAAI,CAACN,KAAK,CAACY,GAAG,CAACN,EAAE,CAAC;EAC3B;EAEAO,MAAMA,CAAA,EAAqB;IACzB,OAAOC,KAAK,CAACC,IAAI,CAAC,IAAI,CAACf,KAAK,CAACgB,MAAM,CAAC,CAAC,CAAC;EACxC;EAEAC,eAAeA,CAACC,MAAc,EAAEC,MAAkD,EAAW;IAC3F,MAAMC,IAAI,GAAG,IAAI,CAACR,GAAG,CAACM,MAAM,CAAC;IAC7B,IAAI,CAACE,IAAI,EAAE,OAAO,KAAK;IAEvB,QAAQD,MAAM;MACZ,KAAK,WAAW;QAAE,OAAO,CAAC,CAACC,IAAI,CAACC,cAAc;MAC9C,KAAK,MAAM;QAAE,OAAO,CAAC,CAACD,IAAI,CAACE,eAAe;MAC1C,KAAK,UAAU;QAAE,OAAO,CAAC,CAACF,IAAI,CAACG,aAAa;MAC5C,KAAK,MAAM;QAAE,OAAO,CAAC,CAACH,IAAI,CAACI,eAAe;MAC1C;QAAS,OAAO,KAAK;IACvB;EACF;AACF;;AAEA;AACA,OAAO,MAAMC,kBAAkB,GAAG,IAAI1B,YAAY,CAAC,CAAC;;AAEpD;AACA,OAAO,MAAM2B,mBAAmB,gBAAG5B,aAAa,CAAe2B,kBAAkB,CAAC","ignoreList":[]}
@@ -103,6 +103,7 @@ If a UI element is hidden (aiIgnore) but a matching custom action exists, use th
103
103
  - Trying too hard can be harmful. If stuck, call done() with partial results rather than repeating failed actions.
104
104
  - If you do not know how to proceed with the current screen, use ask_user to request specific instructions from the user.
105
105
  - NAVIGATION: Always use tap actions to move between screens — tap tab bar buttons, back buttons, and navigation links. This ensures all required route params (like item IDs) are passed automatically by the app. The navigate() tool is ONLY for top-level screens that require no params (e.g. Login, Settings, Cart). NEVER call navigate() on screens that require a selection or ID (e.g. DishDetail, SelectCategory, ProfileDetail) — this will crash the app. For those screens, always tap the relevant item in the parent screen.
106
+ - UI SIMPLIFICATION: If you see elements labeled \`aiPriority="low"\` inside a specific \`zoneId=...\`, and the screen looks cluttered or overwhelming to the user's immediate goal, use the \`simplify_zone(zoneId)\` tool to hide those elements. Use \`restore_zone(zoneId)\` to bring them back if needed later!
106
107
  </rules>
107
108
 
108
109
  <task_completion_rules>
@@ -267,6 +268,7 @@ If a UI element is hidden but a matching custom action exists, use the action.
267
268
  - Do NOT ask for confirmation of actions the user explicitly requested. If they said "place my order", just do it.
268
269
  - If the user's intent is ambiguous — it could mean multiple things or lead to different screens — ask the user to clarify before navigating to the wrong place.
269
270
  - NAVIGATION: Always use tap actions to move between screens — tap tab bar buttons, back buttons, and navigation links. This ensures all required route params are passed automatically by the app. The navigate() tool is ONLY for top-level screens that require no params (e.g. Login, Settings, Cart). NEVER call navigate() on screens that require a selection or ID (e.g. DishDetail, SelectCategory, ProfileDetail) — this will crash the app. For those screens, always tap the relevant item in the parent screen.
271
+ - UI SIMPLIFICATION: If you see elements labeled \`aiPriority="low"\` inside a specific \`zoneId=...\`, and the screen looks cluttered relative to the user's immediate goal, use the \`simplify_zone(zoneId)\` tool to hide those low-priority elements. Use \`restore_zone(zoneId)\` to bring them back if needed. The user does NOT need to explicitly ask for this — use your judgment based on their request.
270
272
  </rules>
271
273
 
272
274
  <capability>
@@ -1 +1 @@
1
- {"version":3,"names":["buildSystemPrompt","language","hasKnowledge","isArabic","buildVoiceSystemPrompt","userInstructions","prompt","trim","buildKnowledgeOnlyPrompt"],"sourceRoot":"../../../src","sources":["core/systemPrompt.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,SAASA,iBAAiBA,CAACC,QAAgB,EAAEC,YAAY,GAAG,KAAK,EAAU;EAChF,MAAMC,QAAQ,GAAGF,QAAQ,KAAK,IAAI;EAElC,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAEE,QAAQ,GAAG,oDAAoD,GAAG,sDAAsD;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0GD,YAAY,GAAG;AACzH,sQAAsQ,GAAG,EAAE;AAC3Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+DA,YAAY,GAAG,uDAAuD,GAAG,EAAE,8CAA8CA,YAAY,GAAG,kBAAkB,GAAG,EAAE;AAC9N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoFA,YAAY,GAAG;AACnG,qJAAqJ,GAAG,EAAE;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,sBAAsBA,CACpCH,QAAgB,EAChBI,gBAAyB,EACzBH,YAAY,GAAG,KAAK,EACZ;EACR,MAAMC,QAAQ,GAAGF,QAAQ,KAAK,IAAI;EAElC,IAAIK,MAAM,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+DJ,YAAY,GAAG;AAC9E,2OAA2O,GAAG,EAAE;AAChP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsDA,YAAY,GAAG,uDAAuD,GAAG,EAAE,8CAA8CA,YAAY,GAAG,kBAAkB,GAAG,EAAE;AACrN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiFA,YAAY,GAAG;AAChG,qJAAqJ,GAAG,EAAE;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAEC,QAAQ,GAAG,oDAAoD,GAAG,sDAAsD;AAC1H;AACA,qBAAqB;;EAEnB;EACA,IAAIE,gBAAgB,EAAEE,IAAI,CAAC,CAAC,EAAE;IAC5BD,MAAM,IAAI,2BAA2BD,gBAAgB,CAACE,IAAI,CAAC,CAAC,uBAAuB;EACrF;EAEA,OAAOD,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,wBAAwBA,CACtCP,QAAgB,EAChBC,YAAqB,EACrBG,gBAAyB,EACjB;EACR,MAAMF,QAAQ,GAAGF,QAAQ,KAAK,IAAI;EAElC,IAAIK,MAAM,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2GJ,YAAY,GAAG;AAC1H,2OAA2O,GAAG,EAAE;AAChP;AACA;AACA;AACA,kEAAkEA,YAAY,GAAG;AACjF,0IAA0I,GAAG,EAAE;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA,EAAEC,QAAQ,GAAG,oDAAoD,GAAG,sDAAsD;AAC1H;AACA,qBAAqB;EAEnB,IAAIE,gBAAgB,EAAEE,IAAI,CAAC,CAAC,EAAE;IAC5BD,MAAM,IAAI,2BAA2BD,gBAAgB,CAACE,IAAI,CAAC,CAAC,uBAAuB;EACrF;EAEA,OAAOD,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"names":["buildSystemPrompt","language","hasKnowledge","isArabic","buildVoiceSystemPrompt","userInstructions","prompt","trim","buildKnowledgeOnlyPrompt"],"sourceRoot":"../../../src","sources":["core/systemPrompt.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,SAASA,iBAAiBA,CAACC,QAAgB,EAAEC,YAAY,GAAG,KAAK,EAAU;EAChF,MAAMC,QAAQ,GAAGF,QAAQ,KAAK,IAAI;EAElC,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAEE,QAAQ,GAAG,oDAAoD,GAAG,sDAAsD;AAC1H;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,0GAA0GD,YAAY,GAAG;AACzH,sQAAsQ,GAAG,EAAE;AAC3Q;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+DA,YAAY,GAAG,uDAAuD,GAAG,EAAE,8CAA8CA,YAAY,GAAG,kBAAkB,GAAG,EAAE;AAC9N;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oFAAoFA,YAAY,GAAG;AACnG,qJAAqJ,GAAG,EAAE;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,UAAU;AACV;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,sBAAsBA,CACpCH,QAAgB,EAChBI,gBAAyB,EACzBH,YAAY,GAAG,KAAK,EACZ;EACR,MAAMC,QAAQ,GAAGF,QAAQ,KAAK,IAAI;EAElC,IAAIK,MAAM,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,+DAA+DJ,YAAY,GAAG;AAC9E,2OAA2O,GAAG,EAAE;AAChP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsDA,YAAY,GAAG,uDAAuD,GAAG,EAAE,8CAA8CA,YAAY,GAAG,kBAAkB,GAAG,EAAE;AACrN;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iFAAiFA,YAAY,GAAG;AAChG,qJAAqJ,GAAG,EAAE;AAC1J;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAEC,QAAQ,GAAG,oDAAoD,GAAG,sDAAsD;AAC1H;AACA,qBAAqB;;EAEnB;EACA,IAAIE,gBAAgB,EAAEE,IAAI,CAAC,CAAC,EAAE;IAC5BD,MAAM,IAAI,2BAA2BD,gBAAgB,CAACE,IAAI,CAAC,CAAC,uBAAuB;EACrF;EAEA,OAAOD,MAAM;AACf;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASE,wBAAwBA,CACtCP,QAAgB,EAChBC,YAAqB,EACrBG,gBAAyB,EACjB;EACR,MAAMF,QAAQ,GAAGF,QAAQ,KAAK,IAAI;EAElC,IAAIK,MAAM,GAAG;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,2GAA2GJ,YAAY,GAAG;AAC1H,2OAA2O,GAAG,EAAE;AAChP;AACA;AACA;AACA,kEAAkEA,YAAY,GAAG;AACjF,0IAA0I,GAAG,EAAE;AAC/I;AACA;AACA;AACA;AACA;AACA;AACA,EAAEC,QAAQ,GAAG,oDAAoD,GAAG,sDAAsD;AAC1H;AACA,qBAAqB;EAEnB,IAAIE,gBAAgB,EAAEE,IAAI,CAAC,CAAC,EAAE;IAC5BD,MAAM,IAAI,2BAA2BD,gBAAgB,CAACE,IAAI,CAAC,CAAC,uBAAuB;EACrF;EAEA,OAAOD,MAAM;AACf","ignoreList":[]}
@@ -9,6 +9,11 @@
9
9
 
10
10
  // ─── Components ──────────────────────────────────────────────
11
11
  export { AIAgent } from "./components/AIAgent.js";
12
+ export { AIZone } from "./components/AIZone.js";
13
+ // Built-in card templates for AIZone injection
14
+ // Note: displayName is set explicitly on each — required for minification-safe template lookup.
15
+ export { InfoCard } from "./components/cards/InfoCard.js";
16
+ export { ReviewSummary } from "./components/cards/ReviewSummary.js";
12
17
 
13
18
  // ─── Providers ───────────────────────────────────────────────
14
19
  export { GeminiProvider } from "./providers/GeminiProvider.js";
@@ -24,8 +29,24 @@ export { AudioInputService } from "./services/AudioInputService.js";
24
29
  export { AudioOutputService } from "./services/AudioOutputService.js";
25
30
  export { KnowledgeBaseService } from "./services/KnowledgeBaseService.js";
26
31
 
32
+ // ─── Analytics ───────────────────────────────────────────────
33
+ // Requires api.mobileai.dev — hidden until backend is live
34
+ // export { MobileAI } from './services/telemetry';
35
+
27
36
  // ─── Utilities ───────────────────────────────────────────────
28
37
  export { logger } from "./utils/logger.js";
29
38
 
30
39
  // ─── Types ───────────────────────────────────────────────────
40
+
41
+ // Requires api.mobileai.dev — hidden until backend is live
42
+ // export type {
43
+ // TelemetryConfig,
44
+ // TelemetryEvent,
45
+ // } from './services/telemetry';
46
+
47
+ // ─── Support Mode ────────────────────────────────────────────
48
+ // SupportGreeting, CSATSurvey, buildSupportPrompt work standalone (no backend)
49
+ // createEscalateTool works with provider='custom' (no backend)
50
+ // EscalationSocket and provider='mobileai' require api.mobileai.dev — hidden
51
+ export { SupportGreeting, CSATSurvey, buildSupportPrompt, createEscalateTool } from "./support/index.js";
31
52
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["AIAgent","GeminiProvider","OpenAIProvider","createProvider","useAction","useAI","VoiceService","AudioInputService","AudioOutputService","KnowledgeBaseService","logger"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAASA,OAAO,QAAQ,yBAAsB;;AAE9C;AACA,SAASC,cAAc,QAAQ,+BAA4B;AAC3D,SAASC,cAAc,QAAQ,+BAA4B;AAC3D,SAASC,cAAc,QAAQ,gCAA6B;;AAE5D;AACA,SAASC,SAAS,EAAEC,KAAK,QAAQ,sBAAmB;;AAEpD;AACA,SAASC,YAAY,QAAQ,4BAAyB;AACtD,SAASC,iBAAiB,QAAQ,iCAA8B;AAChE,SAASC,kBAAkB,QAAQ,kCAA+B;AAClE,SAASC,oBAAoB,QAAQ,oCAAiC;;AAEtE;AACA,SAASC,MAAM,QAAQ,mBAAgB;;AAEvC","ignoreList":[]}
1
+ {"version":3,"names":["AIAgent","AIZone","InfoCard","ReviewSummary","GeminiProvider","OpenAIProvider","createProvider","useAction","useAI","VoiceService","AudioInputService","AudioOutputService","KnowledgeBaseService","logger","SupportGreeting","CSATSurvey","buildSupportPrompt","createEscalateTool"],"sourceRoot":"../../src","sources":["index.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA,SAASA,OAAO,QAAQ,yBAAsB;AAC9C,SAASC,MAAM,QAAQ,wBAAqB;AAC5C;AACA;AACA,SAASC,QAAQ,QAAQ,gCAA6B;AACtD,SAASC,aAAa,QAAQ,qCAAkC;;AAEhE;AACA,SAASC,cAAc,QAAQ,+BAA4B;AAC3D,SAASC,cAAc,QAAQ,+BAA4B;AAC3D,SAASC,cAAc,QAAQ,gCAA6B;;AAE5D;AACA,SAASC,SAAS,EAAEC,KAAK,QAAQ,sBAAmB;;AAEpD;AACA,SAASC,YAAY,QAAQ,4BAAyB;AACtD,SAASC,iBAAiB,QAAQ,iCAA8B;AAChE,SAASC,kBAAkB,QAAQ,kCAA+B;AAClE,SAASC,oBAAoB,QAAQ,oCAAiC;;AAEtE;AACA;AACA;;AAEA;AACA,SAASC,MAAM,QAAQ,mBAAgB;;AAEvC;;AA0BA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,SAASC,eAAe,EAAEC,UAAU,EAAEC,kBAAkB,EAAEC,kBAAkB,QAAQ,oBAAW","ignoreList":[]}
@@ -12,6 +12,7 @@
12
12
 
13
13
  import { logger } from "../utils/logger.js";
14
14
  import { base64ToFloat32 } from "../utils/audioUtils.js";
15
+ import { NativeModules } from 'react-native';
15
16
 
16
17
  // ─── Types ─────────────────────────────────────────────────────
17
18
 
@@ -36,6 +37,15 @@ export class AudioOutputService {
36
37
  try {
37
38
  let audioApi;
38
39
  try {
40
+ // Guard: NativeModules.AudioApiModule is only present in dev/prod builds.
41
+ // In Expo Go it is undefined, and require() throws a native bridge error
42
+ // that cannot be caught by a standard try/catch.
43
+ if (!NativeModules.AudioApiModule) {
44
+ const msg = '[mobileai] react-native-audio-api native module not found. ' + 'Voice audio output requires a development build (not Expo Go). ' + 'Run: npx expo run:ios';
45
+ logger.warn('AudioOutput', msg);
46
+ this.config.onError?.(msg);
47
+ return false;
48
+ }
39
49
  const audioApiModule = ['react-native', 'audio-api'].join('-');
40
50
  audioApi = require(audioApiModule);
41
51
  } catch {
@@ -1 +1 @@
1
- {"version":3,"names":["logger","base64ToFloat32","GEMINI_OUTPUT_SAMPLE_RATE","AudioOutputService","audioContext","queueSourceNode","gainNode","muted","isStarted","chunkCount","constructor","config","initialize","audioApi","audioApiModule","join","require","msg","error","onError","sampleRate","AudioManager","setAudioSessionOptions","iosCategory","iosMode","iosOptions","info","sessionErr","warn","message","AudioContext","createGain","gain","value","connect","destination","createBufferQueueSource","state","resume","enqueue","base64Audio","length","float32Data","peakAmp","i","abs","Math","toFixed","audioBuffer","createBuffer","copyToChannel","enqueueBuffer","start","onPlaybackStart","stack","substring","mute","unmute","isMuted","stop","clearBuffers","onPlaybackEnd","cleanup","close"],"sourceRoot":"../../../src","sources":["services/AudioOutputService.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["logger","base64ToFloat32","NativeModules","GEMINI_OUTPUT_SAMPLE_RATE","AudioOutputService","audioContext","queueSourceNode","gainNode","muted","isStarted","chunkCount","constructor","config","initialize","audioApi","AudioApiModule","msg","warn","onError","audioApiModule","join","require","error","sampleRate","AudioManager","setAudioSessionOptions","iosCategory","iosMode","iosOptions","info","sessionErr","message","AudioContext","createGain","gain","value","connect","destination","createBufferQueueSource","state","resume","enqueue","base64Audio","length","float32Data","peakAmp","i","abs","Math","toFixed","audioBuffer","createBuffer","copyToChannel","enqueueBuffer","start","onPlaybackStart","stack","substring","mute","unmute","isMuted","stop","clearBuffers","onPlaybackEnd","cleanup","close"],"sourceRoot":"../../../src","sources":["services/AudioOutputService.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+
3
+ import { logger } from "../../utils/logger.js";
4
+ import { getDeviceId } from "../telemetry/device.js";
5
+ const LOG_TAG = 'FlagService';
6
+
7
+ /**
8
+ * MurmurHash3 (32-bit) implementation
9
+ */
10
+ function murmurhash3_32_gc(key, seed = 0) {
11
+ let remainder, bytes, h1, h1b, c1, c2, k1, i;
12
+ remainder = key.length & 3; // key.length % 4
13
+ bytes = key.length - remainder;
14
+ h1 = seed;
15
+ c1 = 0xcc9e2d51;
16
+ c2 = 0x1b873593;
17
+ i = 0;
18
+ while (i < bytes) {
19
+ k1 = key.charCodeAt(i) & 0xff | (key.charCodeAt(++i) & 0xff) << 8 | (key.charCodeAt(++i) & 0xff) << 16 | (key.charCodeAt(++i) & 0xff) << 24;
20
+ ++i;
21
+ k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;
22
+ k1 = k1 << 15 | k1 >>> 17;
23
+ k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;
24
+ h1 ^= k1;
25
+ h1 = h1 << 13 | h1 >>> 19;
26
+ h1b = (h1 & 0xffff) * 5 + (((h1 >>> 16) * 5 & 0xffff) << 16) & 0xffffffff;
27
+ h1 = (h1b & 0xffff) + 0x6b64 + (((h1b >>> 16) + 0xe654 & 0xffff) << 16);
28
+ }
29
+ if (remainder >= 1) {
30
+ k1 = 0;
31
+ if (remainder >= 3) k1 ^= (key.charCodeAt(i + 2) & 0xff) << 16;
32
+ if (remainder >= 2) k1 ^= (key.charCodeAt(i + 1) & 0xff) << 8;
33
+ k1 ^= key.charCodeAt(i) & 0xff;
34
+ k1 = (k1 & 0xffff) * c1 + (((k1 >>> 16) * c1 & 0xffff) << 16) & 0xffffffff;
35
+ k1 = k1 << 15 | k1 >>> 17;
36
+ k1 = (k1 & 0xffff) * c2 + (((k1 >>> 16) * c2 & 0xffff) << 16) & 0xffffffff;
37
+ h1 ^= k1;
38
+ }
39
+ h1 ^= key.length;
40
+ h1 ^= h1 >>> 16;
41
+ h1 = (h1 & 0xffff) * 0x85ebca6b + (((h1 >>> 16) * 0x85ebca6b & 0xffff) << 16) & 0xffffffff;
42
+ h1 ^= h1 >>> 13;
43
+ h1 = (h1 & 0xffff) * 0xc2b2ae35 + (((h1 >>> 16) * 0xc2b2ae35 & 0xffff) << 16) & 0xffffffff;
44
+ h1 ^= h1 >>> 16;
45
+ return h1 >>> 0;
46
+ }
47
+ export class FlagService {
48
+ assignments = {};
49
+ fetched = false;
50
+ constructor(hostUrl) {
51
+ this.hostUrl = hostUrl;
52
+ }
53
+
54
+ /**
55
+ * Fetch feature flags from the dashboard backend
56
+ */
57
+ async fetch(analyticsKey, userId) {
58
+ try {
59
+ // Avoid fetching if already loaded, unless explicitly forced?
60
+ // For now, allow refetching just in case.
61
+ const res = await fetch(`${this.hostUrl}/api/v1/flags/sync?key=${analyticsKey}`);
62
+ if (!res.ok) {
63
+ throw new Error(`Failed to fetch flags: ${res.status}`);
64
+ }
65
+ const data = await res.json();
66
+ const flags = data.flags || [];
67
+ this.assignAll(flags, userId);
68
+ this.fetched = true;
69
+ logger.info(LOG_TAG, `Fetched ${flags.length} flags`);
70
+ } catch (err) {
71
+ logger.warn(LOG_TAG, `Could not sync feature flags: ${err.message}`);
72
+ }
73
+ }
74
+
75
+ /**
76
+ * Deterministically assign a variant using murmurhash.
77
+ */
78
+ assignVariant(userIdentifier, flagKey, variants, rollout) {
79
+ const hash = murmurhash3_32_gc(`${userIdentifier}_${flagKey}`) % 100;
80
+ let cumulative = 0;
81
+ for (let i = 0; i < rollout.length; i++) {
82
+ cumulative += rollout[i];
83
+ if (hash < cumulative) {
84
+ return variants[i];
85
+ }
86
+ }
87
+
88
+ // Fallback if rollout doesn't equal exactly 100 or edge case
89
+ return variants[0];
90
+ }
91
+ assignAll(flags, userId) {
92
+ const identifier = userId || getDeviceId();
93
+ const newAssignments = {};
94
+ for (const flag of flags) {
95
+ if (flag.variants.length > 0 && flag.rollout.length === flag.variants.length) {
96
+ newAssignments[flag.key] = this.assignVariant(identifier, flag.key, flag.variants, flag.rollout);
97
+ }
98
+ }
99
+ this.assignments = newAssignments;
100
+ }
101
+
102
+ /** Get a specific flag value */
103
+ getFlag(key, defaultValue) {
104
+ if (!this.fetched) {
105
+ logger.debug(LOG_TAG, `getFlag("${key}") called before flags were fetched. Returning default.`);
106
+ }
107
+ return this.assignments[key] ?? defaultValue ?? '';
108
+ }
109
+
110
+ /** Get all active assignments for telemetry */
111
+ getAllFlags() {
112
+ return {
113
+ ...this.assignments
114
+ };
115
+ }
116
+ }
117
+ //# sourceMappingURL=FlagService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["logger","getDeviceId","LOG_TAG","murmurhash3_32_gc","key","seed","remainder","bytes","h1","h1b","c1","c2","k1","i","length","charCodeAt","FlagService","assignments","fetched","constructor","hostUrl","fetch","analyticsKey","userId","res","ok","Error","status","data","json","flags","assignAll","info","err","warn","message","assignVariant","userIdentifier","flagKey","variants","rollout","hash","cumulative","identifier","newAssignments","flag","getFlag","defaultValue","debug","getAllFlags"],"sourceRoot":"../../../../src","sources":["services/flags/FlagService.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * MobileAI — Public static API for consumer event tracking.
5
+ *
6
+ * Usage:
7
+ * import { MobileAI } from '@mobileai/react-native';
8
+ * MobileAI.track('purchase_complete', { total: 29.99 });
9
+ *
10
+ * The TelemetryService instance is injected by the <AIAgent> component.
11
+ * If no analyticsKey is configured, all calls are no-ops.
12
+ */
13
+
14
+ import { logger } from "../../utils/logger.js";
15
+ const LOG_TAG = 'MobileAI';
16
+ let service = null;
17
+ export const MobileAI = {
18
+ /**
19
+ * Track a custom business event.
20
+ * @param eventName - Name of the event (e.g., 'purchase_complete')
21
+ * @param data - Event-specific key-value data
22
+ */
23
+ track(eventName, data = {}) {
24
+ if (!service) {
25
+ logger.debug(LOG_TAG, `track('${eventName}') ignored — no analyticsKey configured`);
26
+ return;
27
+ }
28
+ service.track(eventName, data);
29
+ },
30
+ /**
31
+ * Identify the current user (optional, for user-level analytics).
32
+ * @param userId - Unique user identifier (hashed by consumer)
33
+ * @param traits - Optional user traits (plan, role, etc.)
34
+ */
35
+ identify(userId, traits = {}) {
36
+ if (!service) {
37
+ logger.debug(LOG_TAG, 'identify() ignored — no analyticsKey configured');
38
+ return;
39
+ }
40
+ service.track('identify', {
41
+ user_id: userId,
42
+ ...traits
43
+ });
44
+ },
45
+ /**
46
+ * Get an assigned feature flag variation for the current device.
47
+ * Deterministic via murmurhash. Call after MobileAI has initialized.
48
+ * @param key Flag key
49
+ * @param defaultValue Fallback if not assigned
50
+ */
51
+ getFlag(key, defaultValue) {
52
+ if (!service) {
53
+ return defaultValue ?? '';
54
+ }
55
+ return service.flags.getFlag(key, defaultValue);
56
+ }
57
+ };
58
+
59
+ /**
60
+ * Internal: Bind the TelemetryService instance (called by AIAgent on mount).
61
+ * Not exported to consumers.
62
+ */
63
+ export function bindTelemetryService(instance) {
64
+ service = instance;
65
+ }
66
+ //# sourceMappingURL=MobileAI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["logger","LOG_TAG","service","MobileAI","track","eventName","data","debug","identify","userId","traits","user_id","getFlag","key","defaultValue","flags","bindTelemetryService","instance"],"sourceRoot":"../../../../src","sources":["services/telemetry/MobileAI.ts"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGA,SAASA,MAAM,QAAQ,uBAAoB;AAE3C,MAAMC,OAAO,GAAG,UAAU;AAE1B,IAAIC,OAAgC,GAAG,IAAI;AAE3C,OAAO,MAAMC,QAAQ,GAAG;EACtB;AACF;AACA;AACA;AACA;EACEC,KAAKA,CAACC,SAAiB,EAAEC,IAA6B,GAAG,CAAC,CAAC,EAAQ;IACjE,IAAI,CAACJ,OAAO,EAAE;MACZF,MAAM,CAACO,KAAK,CAACN,OAAO,EAAE,UAAUI,SAAS,yCAAyC,CAAC;MACnF;IACF;IACAH,OAAO,CAACE,KAAK,CAACC,SAAS,EAAEC,IAAI,CAAC;EAChC,CAAC;EAED;AACF;AACA;AACA;AACA;EACEE,QAAQA,CAACC,MAAc,EAAEC,MAA+B,GAAG,CAAC,CAAC,EAAQ;IACnE,IAAI,CAACR,OAAO,EAAE;MACZF,MAAM,CAACO,KAAK,CAACN,OAAO,EAAE,iDAAiD,CAAC;MACxE;IACF;IACAC,OAAO,CAACE,KAAK,CAAC,UAAU,EAAE;MAAEO,OAAO,EAAEF,MAAM;MAAE,GAAGC;IAAO,CAAC,CAAC;EAC3D,CAAC;EAED;AACF;AACA;AACA;AACA;AACA;EACEE,OAAOA,CAACC,GAAW,EAAEC,YAAqB,EAAU;IAClD,IAAI,CAACZ,OAAO,EAAE;MACZ,OAAOY,YAAY,IAAI,EAAE;IAC3B;IACA,OAAOZ,OAAO,CAACa,KAAK,CAACH,OAAO,CAACC,GAAG,EAAEC,YAAY,CAAC;EACjD;AACF,CAAC;;AAED;AACA;AACA;AACA;AACA,OAAO,SAASE,oBAAoBA,CAACC,QAAiC,EAAQ;EAC5Ef,OAAO,GAAGe,QAAQ;AACpB","ignoreList":[]}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ const EMAIL_RE = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g;
4
+ const PHONE_RE = /(\+?\d[\d\s\-().]{7,}\d)/g;
5
+ const CARD_RE = /\b\d{4}[\s\-]?\d{4}[\s\-]?\d{4}[\s\-]?\d{4}\b/g;
6
+
7
+ /**
8
+ * Scrubs common PII patterns from strings.
9
+ * Used by TelemetryService to sanitize auto-captured touch labels.
10
+ */
11
+ export function scrubPII(value) {
12
+ if (typeof value !== 'string') return value;
13
+ return value.replace(EMAIL_RE, '[email]').replace(CARD_RE, '[card]')
14
+ // Phone numbers are tricky, we rely on the 7+ digit regex
15
+ .replace(PHONE_RE, '[phone]');
16
+ }
17
+ //# sourceMappingURL=PiiScrubber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EMAIL_RE","PHONE_RE","CARD_RE","scrubPII","value","replace"],"sourceRoot":"../../../../src","sources":["services/telemetry/PiiScrubber.ts"],"mappings":";;AAAA,MAAMA,QAAQ,GAAG,iDAAiD;AAClE,MAAMC,QAAQ,GAAG,2BAA2B;AAC5C,MAAMC,OAAO,GAAG,gDAAgD;;AAEhE;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CAACC,KAAa,EAAU;EAC9C,IAAI,OAAOA,KAAK,KAAK,QAAQ,EAAE,OAAOA,KAAK;EAE3C,OAAOA,KAAK,CACTC,OAAO,CAACL,QAAQ,EAAE,SAAS,CAAC,CAC5BK,OAAO,CAACH,OAAO,EAAE,QAAQ;EAC1B;EAAA,CACCG,OAAO,CAACJ,QAAQ,EAAE,SAAS,CAAC;AACjC","ignoreList":[]}