@mobileai/react-native 0.9.16 → 0.9.18

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 (214) hide show
  1. package/README.md +2 -2
  2. package/package.json +5 -8
  3. package/lib/module/__cli_tmp__.js.map +0 -1
  4. package/lib/module/components/AIAgent.js.map +0 -1
  5. package/lib/module/components/AIZone.js.map +0 -1
  6. package/lib/module/components/AgentChatBar.js.map +0 -1
  7. package/lib/module/components/AgentErrorBoundary.js.map +0 -1
  8. package/lib/module/components/AgentOverlay.js.map +0 -1
  9. package/lib/module/components/DiscoveryTooltip.js.map +0 -1
  10. package/lib/module/components/HighlightOverlay.js.map +0 -1
  11. package/lib/module/components/Icons.js.map +0 -1
  12. package/lib/module/components/ProactiveHint.js.map +0 -1
  13. package/lib/module/components/cards/InfoCard.js.map +0 -1
  14. package/lib/module/components/cards/ReviewSummary.js.map +0 -1
  15. package/lib/module/config/endpoints.js.map +0 -1
  16. package/lib/module/core/ActionRegistry.js.map +0 -1
  17. package/lib/module/core/AgentRuntime.js.map +0 -1
  18. package/lib/module/core/FiberTreeWalker.js.map +0 -1
  19. package/lib/module/core/IdleDetector.js.map +0 -1
  20. package/lib/module/core/MCPBridge.js.map +0 -1
  21. package/lib/module/core/ScreenDehydrator.js.map +0 -1
  22. package/lib/module/core/ZoneRegistry.js.map +0 -1
  23. package/lib/module/core/systemPrompt.js.map +0 -1
  24. package/lib/module/core/types.js.map +0 -1
  25. package/lib/module/hooks/useAction.js.map +0 -1
  26. package/lib/module/index.js.map +0 -1
  27. package/lib/module/plugin/withAppIntents.js.map +0 -1
  28. package/lib/module/providers/GeminiProvider.js.map +0 -1
  29. package/lib/module/providers/OpenAIProvider.js.map +0 -1
  30. package/lib/module/providers/ProviderFactory.js.map +0 -1
  31. package/lib/module/services/AudioInputService.js.map +0 -1
  32. package/lib/module/services/AudioOutputService.js.map +0 -1
  33. package/lib/module/services/KnowledgeBaseService.js.map +0 -1
  34. package/lib/module/services/VoiceService.js.map +0 -1
  35. package/lib/module/services/flags/FlagService.js.map +0 -1
  36. package/lib/module/services/telemetry/MobileAI.js.map +0 -1
  37. package/lib/module/services/telemetry/PiiScrubber.js.map +0 -1
  38. package/lib/module/services/telemetry/TelemetryService.js.map +0 -1
  39. package/lib/module/services/telemetry/TouchAutoCapture.js.map +0 -1
  40. package/lib/module/services/telemetry/device.js.map +0 -1
  41. package/lib/module/services/telemetry/deviceMetadata.js.map +0 -1
  42. package/lib/module/services/telemetry/index.js.map +0 -1
  43. package/lib/module/services/telemetry/types.js.map +0 -1
  44. package/lib/module/support/CSATSurvey.js.map +0 -1
  45. package/lib/module/support/EscalationEventSource.js.map +0 -1
  46. package/lib/module/support/EscalationSocket.js.map +0 -1
  47. package/lib/module/support/SupportChatModal.js.map +0 -1
  48. package/lib/module/support/SupportGreeting.js.map +0 -1
  49. package/lib/module/support/TicketStore.js.map +0 -1
  50. package/lib/module/support/escalateTool.js.map +0 -1
  51. package/lib/module/support/index.js.map +0 -1
  52. package/lib/module/support/supportPrompt.js.map +0 -1
  53. package/lib/module/support/types.js.map +0 -1
  54. package/lib/module/tools/datePickerTool.js.map +0 -1
  55. package/lib/module/tools/guideTool.js.map +0 -1
  56. package/lib/module/tools/index.js.map +0 -1
  57. package/lib/module/tools/keyboardTool.js.map +0 -1
  58. package/lib/module/tools/longPressTool.js.map +0 -1
  59. package/lib/module/tools/pickerTool.js.map +0 -1
  60. package/lib/module/tools/restoreTool.js.map +0 -1
  61. package/lib/module/tools/scrollTool.js.map +0 -1
  62. package/lib/module/tools/simplifyTool.js.map +0 -1
  63. package/lib/module/tools/sliderTool.js.map +0 -1
  64. package/lib/module/tools/tapTool.js.map +0 -1
  65. package/lib/module/tools/typeTool.js.map +0 -1
  66. package/lib/module/tools/types.js.map +0 -1
  67. package/lib/module/types/jsx.d.js.map +0 -1
  68. package/lib/module/utils/audioUtils.js.map +0 -1
  69. package/lib/module/utils/logger.js.map +0 -1
  70. package/lib/typescript/babel.config.d.ts.map +0 -1
  71. package/lib/typescript/bin/generate-map.d.cts.map +0 -1
  72. package/lib/typescript/eslint.config.d.mts.map +0 -1
  73. package/lib/typescript/generate-map.d.ts.map +0 -1
  74. package/lib/typescript/src/__cli_tmp__.d.ts.map +0 -1
  75. package/lib/typescript/src/components/AIAgent.d.ts.map +0 -1
  76. package/lib/typescript/src/components/AIZone.d.ts.map +0 -1
  77. package/lib/typescript/src/components/AgentChatBar.d.ts.map +0 -1
  78. package/lib/typescript/src/components/AgentErrorBoundary.d.ts.map +0 -1
  79. package/lib/typescript/src/components/AgentOverlay.d.ts.map +0 -1
  80. package/lib/typescript/src/components/DiscoveryTooltip.d.ts.map +0 -1
  81. package/lib/typescript/src/components/HighlightOverlay.d.ts.map +0 -1
  82. package/lib/typescript/src/components/Icons.d.ts.map +0 -1
  83. package/lib/typescript/src/components/ProactiveHint.d.ts.map +0 -1
  84. package/lib/typescript/src/components/cards/InfoCard.d.ts.map +0 -1
  85. package/lib/typescript/src/components/cards/ReviewSummary.d.ts.map +0 -1
  86. package/lib/typescript/src/config/endpoints.d.ts.map +0 -1
  87. package/lib/typescript/src/core/ActionRegistry.d.ts.map +0 -1
  88. package/lib/typescript/src/core/AgentRuntime.d.ts.map +0 -1
  89. package/lib/typescript/src/core/FiberTreeWalker.d.ts.map +0 -1
  90. package/lib/typescript/src/core/IdleDetector.d.ts.map +0 -1
  91. package/lib/typescript/src/core/MCPBridge.d.ts.map +0 -1
  92. package/lib/typescript/src/core/ScreenDehydrator.d.ts.map +0 -1
  93. package/lib/typescript/src/core/ZoneRegistry.d.ts.map +0 -1
  94. package/lib/typescript/src/core/systemPrompt.d.ts.map +0 -1
  95. package/lib/typescript/src/core/types.d.ts.map +0 -1
  96. package/lib/typescript/src/hooks/useAction.d.ts.map +0 -1
  97. package/lib/typescript/src/index.d.ts.map +0 -1
  98. package/lib/typescript/src/plugin/withAppIntents.d.ts.map +0 -1
  99. package/lib/typescript/src/providers/GeminiProvider.d.ts.map +0 -1
  100. package/lib/typescript/src/providers/OpenAIProvider.d.ts.map +0 -1
  101. package/lib/typescript/src/providers/ProviderFactory.d.ts.map +0 -1
  102. package/lib/typescript/src/services/AudioInputService.d.ts.map +0 -1
  103. package/lib/typescript/src/services/AudioOutputService.d.ts.map +0 -1
  104. package/lib/typescript/src/services/KnowledgeBaseService.d.ts.map +0 -1
  105. package/lib/typescript/src/services/VoiceService.d.ts.map +0 -1
  106. package/lib/typescript/src/services/flags/FlagService.d.ts.map +0 -1
  107. package/lib/typescript/src/services/telemetry/MobileAI.d.ts.map +0 -1
  108. package/lib/typescript/src/services/telemetry/PiiScrubber.d.ts.map +0 -1
  109. package/lib/typescript/src/services/telemetry/TelemetryService.d.ts.map +0 -1
  110. package/lib/typescript/src/services/telemetry/TouchAutoCapture.d.ts.map +0 -1
  111. package/lib/typescript/src/services/telemetry/device.d.ts.map +0 -1
  112. package/lib/typescript/src/services/telemetry/deviceMetadata.d.ts.map +0 -1
  113. package/lib/typescript/src/services/telemetry/index.d.ts.map +0 -1
  114. package/lib/typescript/src/services/telemetry/types.d.ts.map +0 -1
  115. package/lib/typescript/src/support/CSATSurvey.d.ts.map +0 -1
  116. package/lib/typescript/src/support/EscalationEventSource.d.ts.map +0 -1
  117. package/lib/typescript/src/support/EscalationSocket.d.ts.map +0 -1
  118. package/lib/typescript/src/support/SupportChatModal.d.ts.map +0 -1
  119. package/lib/typescript/src/support/SupportGreeting.d.ts.map +0 -1
  120. package/lib/typescript/src/support/TicketStore.d.ts.map +0 -1
  121. package/lib/typescript/src/support/escalateTool.d.ts.map +0 -1
  122. package/lib/typescript/src/support/index.d.ts.map +0 -1
  123. package/lib/typescript/src/support/supportPrompt.d.ts.map +0 -1
  124. package/lib/typescript/src/support/types.d.ts.map +0 -1
  125. package/lib/typescript/src/tools/datePickerTool.d.ts.map +0 -1
  126. package/lib/typescript/src/tools/guideTool.d.ts.map +0 -1
  127. package/lib/typescript/src/tools/index.d.ts.map +0 -1
  128. package/lib/typescript/src/tools/keyboardTool.d.ts.map +0 -1
  129. package/lib/typescript/src/tools/longPressTool.d.ts.map +0 -1
  130. package/lib/typescript/src/tools/pickerTool.d.ts.map +0 -1
  131. package/lib/typescript/src/tools/restoreTool.d.ts.map +0 -1
  132. package/lib/typescript/src/tools/scrollTool.d.ts.map +0 -1
  133. package/lib/typescript/src/tools/simplifyTool.d.ts.map +0 -1
  134. package/lib/typescript/src/tools/sliderTool.d.ts.map +0 -1
  135. package/lib/typescript/src/tools/tapTool.d.ts.map +0 -1
  136. package/lib/typescript/src/tools/typeTool.d.ts.map +0 -1
  137. package/lib/typescript/src/tools/types.d.ts.map +0 -1
  138. package/lib/typescript/src/utils/audioUtils.d.ts.map +0 -1
  139. package/lib/typescript/src/utils/logger.d.ts.map +0 -1
  140. package/src/__cli_tmp__.tsx +0 -9
  141. package/src/cli/analyzers/chain-analyzer.ts +0 -183
  142. package/src/cli/extractors/ai-extractor.ts +0 -6
  143. package/src/cli/extractors/ast-extractor.ts +0 -551
  144. package/src/cli/generate-intents.ts +0 -140
  145. package/src/cli/generate-map.ts +0 -121
  146. package/src/cli/generate-swift.ts +0 -116
  147. package/src/cli/scanners/expo-scanner.ts +0 -203
  148. package/src/cli/scanners/rn-scanner.ts +0 -445
  149. package/src/components/AIAgent.tsx +0 -1716
  150. package/src/components/AIZone.tsx +0 -147
  151. package/src/components/AgentChatBar.tsx +0 -1143
  152. package/src/components/AgentErrorBoundary.tsx +0 -78
  153. package/src/components/AgentOverlay.tsx +0 -73
  154. package/src/components/DiscoveryTooltip.tsx +0 -148
  155. package/src/components/HighlightOverlay.tsx +0 -136
  156. package/src/components/Icons.tsx +0 -253
  157. package/src/components/ProactiveHint.tsx +0 -145
  158. package/src/components/cards/InfoCard.tsx +0 -58
  159. package/src/components/cards/ReviewSummary.tsx +0 -76
  160. package/src/config/endpoints.ts +0 -22
  161. package/src/core/ActionRegistry.ts +0 -105
  162. package/src/core/AgentRuntime.ts +0 -1471
  163. package/src/core/FiberTreeWalker.ts +0 -930
  164. package/src/core/IdleDetector.ts +0 -72
  165. package/src/core/MCPBridge.ts +0 -163
  166. package/src/core/ScreenDehydrator.ts +0 -53
  167. package/src/core/ZoneRegistry.ts +0 -44
  168. package/src/core/systemPrompt.ts +0 -431
  169. package/src/core/types.ts +0 -521
  170. package/src/hooks/useAction.ts +0 -182
  171. package/src/index.ts +0 -83
  172. package/src/plugin/withAppIntents.ts +0 -98
  173. package/src/providers/GeminiProvider.ts +0 -357
  174. package/src/providers/OpenAIProvider.ts +0 -379
  175. package/src/providers/ProviderFactory.ts +0 -36
  176. package/src/services/AudioInputService.ts +0 -226
  177. package/src/services/AudioOutputService.ts +0 -236
  178. package/src/services/KnowledgeBaseService.ts +0 -156
  179. package/src/services/VoiceService.ts +0 -451
  180. package/src/services/flags/FlagService.ts +0 -137
  181. package/src/services/telemetry/MobileAI.ts +0 -66
  182. package/src/services/telemetry/PiiScrubber.ts +0 -17
  183. package/src/services/telemetry/TelemetryService.ts +0 -323
  184. package/src/services/telemetry/TouchAutoCapture.ts +0 -165
  185. package/src/services/telemetry/device.ts +0 -93
  186. package/src/services/telemetry/deviceMetadata.ts +0 -13
  187. package/src/services/telemetry/index.ts +0 -13
  188. package/src/services/telemetry/types.ts +0 -75
  189. package/src/support/CSATSurvey.tsx +0 -304
  190. package/src/support/EscalationEventSource.ts +0 -190
  191. package/src/support/EscalationSocket.ts +0 -152
  192. package/src/support/SupportChatModal.tsx +0 -563
  193. package/src/support/SupportGreeting.tsx +0 -161
  194. package/src/support/TicketStore.ts +0 -100
  195. package/src/support/escalateTool.ts +0 -174
  196. package/src/support/index.ts +0 -29
  197. package/src/support/supportPrompt.ts +0 -55
  198. package/src/support/types.ts +0 -155
  199. package/src/tools/datePickerTool.ts +0 -60
  200. package/src/tools/guideTool.ts +0 -76
  201. package/src/tools/index.ts +0 -20
  202. package/src/tools/keyboardTool.ts +0 -30
  203. package/src/tools/longPressTool.ts +0 -61
  204. package/src/tools/pickerTool.ts +0 -115
  205. package/src/tools/restoreTool.ts +0 -33
  206. package/src/tools/scrollTool.ts +0 -156
  207. package/src/tools/simplifyTool.ts +0 -33
  208. package/src/tools/sliderTool.ts +0 -65
  209. package/src/tools/tapTool.ts +0 -93
  210. package/src/tools/typeTool.ts +0 -113
  211. package/src/tools/types.ts +0 -58
  212. package/src/types/jsx.d.ts +0 -20
  213. package/src/utils/audioUtils.ts +0 -54
  214. package/src/utils/logger.ts +0 -38
@@ -1,72 +0,0 @@
1
- export interface IdleDetectorConfig {
2
- /** Time in ms before the agent pulses subtly (e.g. 120_000 for 2m) */
3
- pulseAfterMs: number;
4
- /** Time in ms before the agent shows a badge (e.g. 240_000 for 4m) */
5
- badgeAfterMs: number;
6
- /** Callback fired when the user is idle enough for a subtle pulse */
7
- onPulse: () => void;
8
- /** Callback fired when the user is idle enough for a proactive badge. Receives the context suggestion. */
9
- onBadge: (suggestion: string) => void;
10
- /** Callback fired when the user interacts, cancelling idle states */
11
- onReset: () => void;
12
- /** Dynamic context suggestion generator based on current screen */
13
- generateSuggestion?: () => string;
14
- }
15
-
16
- export class IdleDetector {
17
- private pulseTimer: ReturnType<typeof setTimeout> | null = null;
18
- private badgeTimer: ReturnType<typeof setTimeout> | null = null;
19
- private dismissed = false;
20
- private config: IdleDetectorConfig | null = null;
21
-
22
- start(config: IdleDetectorConfig): void {
23
- this.config = config;
24
- this.dismissed = false;
25
- this.resetTimers();
26
- }
27
-
28
- reset(): void {
29
- if (!this.config || this.dismissed) return;
30
- this.config.onReset();
31
- this.resetTimers();
32
- }
33
-
34
- dismiss(): void {
35
- this.dismissed = true;
36
- this.clearTimers();
37
- if (this.config) {
38
- this.config.onReset();
39
- }
40
- }
41
-
42
- destroy(): void {
43
- this.clearTimers();
44
- this.config = null;
45
- }
46
-
47
- private resetTimers(): void {
48
- this.clearTimers();
49
-
50
- if (!this.config || this.dismissed) return;
51
-
52
- this.pulseTimer = setTimeout(() => {
53
- this.config?.onPulse();
54
- }, this.config.pulseAfterMs);
55
-
56
- this.badgeTimer = setTimeout(() => {
57
- const suggestion = this.config?.generateSuggestion?.() ?? "Need help with this screen?";
58
- this.config?.onBadge(suggestion);
59
- }, this.config.badgeAfterMs);
60
- }
61
-
62
- private clearTimers(): void {
63
- if (this.pulseTimer) {
64
- clearTimeout(this.pulseTimer);
65
- this.pulseTimer = null;
66
- }
67
- if (this.badgeTimer) {
68
- clearTimeout(this.badgeTimer);
69
- this.badgeTimer = null;
70
- }
71
- }
72
- }
@@ -1,163 +0,0 @@
1
- /**
2
- * MCPBridge — Connects the React Native app to the local MCP Server bridge.
3
- *
4
- * Flow:
5
- * - Connects via WebSocket to the Node.js MCP server
6
- * - Listens for 'request' messages containing an MCP command
7
- * - Forwards the command to AgentRuntime.execute()
8
- * - Sends the ExecutionResult back via WebSocket as a 'response'
9
- */
10
-
11
- import { logger } from '../utils/logger';
12
- import type { AgentRuntime } from './AgentRuntime';
13
-
14
- export class MCPBridge {
15
- private url: string;
16
- private ws: WebSocket | null = null;
17
- private runtime: AgentRuntime;
18
- private reconnectTimer: ReturnType<typeof setTimeout> | null = null;
19
- private isDestroyed = false;
20
-
21
- constructor(url: string, runtime: AgentRuntime) {
22
- this.url = url;
23
- this.runtime = runtime;
24
- this.connect();
25
- }
26
-
27
- private connect() {
28
- if (this.isDestroyed) return;
29
-
30
- logger.info('MCPBridge', `Connecting to MCP bridge at ${this.url}...`);
31
- this.ws = new WebSocket(this.url);
32
-
33
- this.ws.onopen = () => {
34
- logger.info('MCPBridge', '✅ Connected to MCP bridge.');
35
- if (this.reconnectTimer) {
36
- clearTimeout(this.reconnectTimer);
37
- this.reconnectTimer = null;
38
- }
39
- };
40
-
41
- this.ws.onmessage = async (event) => {
42
- try {
43
- const data = JSON.parse(event.data);
44
- const serverMode = this.runtime.getConfig().mcpServerMode ?? 'auto';
45
- const serverEnabled = serverMode === 'enabled' || (serverMode !== 'disabled' && __DEV__);
46
-
47
- switch (data.type) {
48
- case 'request': {
49
- if (!data.command || !data.requestId) return;
50
- logger.info('MCPBridge', `Received task from MCP: "${data.command}"`);
51
-
52
- if (this.runtime.getIsRunning()) {
53
- this.sendResponse(data.requestId, {
54
- success: false,
55
- message: 'Agent is already running a task. Please wait.',
56
- steps: [],
57
- });
58
- return;
59
- }
60
-
61
- // Execute the task using the SDK's existing runtime loop
62
- const result = await this.runtime.execute(data.command);
63
-
64
- // Send result back to MCP server
65
- this.sendResponse(data.requestId, result);
66
- break;
67
- }
68
-
69
- case 'tools/list': {
70
- if (!serverEnabled) {
71
- this.sendResponse(data.requestId, { error: 'MCP server mode is disabled.' });
72
- break;
73
- }
74
-
75
- const tools = this.runtime.getTools().map(t => ({
76
- name: t.name,
77
- description: t.description,
78
- inputSchema: {
79
- type: 'object',
80
- properties: t.parameters || {},
81
- required: Object.entries(t.parameters || {})
82
- .filter(([_, p]: [string, any]) => p.required !== false)
83
- .map(([k]) => k),
84
- }
85
- }));
86
-
87
- this.sendResponse(data.requestId, { tools });
88
- break;
89
- }
90
-
91
- case 'tools/call': {
92
- if (!serverEnabled) {
93
- this.sendResponse(data.requestId, { error: 'MCP server mode is disabled.' });
94
- break;
95
- }
96
- try {
97
- const result = await this.runtime.executeTool(data.name, data.arguments || {});
98
- this.sendResponse(data.requestId, { result });
99
- } catch (err: any) {
100
- this.sendResponse(data.requestId, { error: err.message });
101
- }
102
- break;
103
- }
104
-
105
- case 'screen/state': {
106
- if (!serverEnabled) {
107
- this.sendResponse(data.requestId, { error: 'MCP server mode is disabled.' });
108
- break;
109
- }
110
- const screen = this.runtime.getScreenContext();
111
- this.sendResponse(data.requestId, { screen });
112
- break;
113
- }
114
- }
115
- } catch (err) {
116
- logger.error('MCPBridge', 'Error handling message:', err);
117
- }
118
- };
119
-
120
- this.ws.onclose = () => {
121
- if (!this.isDestroyed) {
122
- logger.warn('MCPBridge', 'Disconnected from MCP bridge. Reconnecting in 5s...');
123
- this.ws = null;
124
- this.scheduleReconnect();
125
- }
126
- };
127
-
128
- this.ws.onerror = (e) => {
129
- logger.warn('MCPBridge', 'WebSocket error:', e);
130
- // onclose will handle reconnect
131
- };
132
- }
133
-
134
- private sendResponse(requestId: string, payload: any) {
135
- if (this.ws && this.ws.readyState === WebSocket.OPEN) {
136
- this.ws.send(JSON.stringify({
137
- type: 'response',
138
- requestId,
139
- payload,
140
- }));
141
- }
142
- }
143
-
144
- private scheduleReconnect() {
145
- if (!this.reconnectTimer) {
146
- this.reconnectTimer = setTimeout(() => {
147
- this.connect();
148
- }, 5000);
149
- }
150
- }
151
-
152
- public destroy() {
153
- this.isDestroyed = true;
154
- if (this.reconnectTimer) {
155
- clearTimeout(this.reconnectTimer);
156
- this.reconnectTimer = null;
157
- }
158
- if (this.ws) {
159
- this.ws.close();
160
- this.ws = null;
161
- }
162
- }
163
- }
@@ -1,53 +0,0 @@
1
- /**
2
- * ScreenDehydrator — Converts discovered interactive elements into
3
- * a text representation for the LLM.
4
- *
5
- * Output example:
6
- * ```
7
- * Screen: Home | Available screens: Home, Menu, Cart
8
- * Interactive elements:
9
- * [0]<pressable>🍕 Pizzas</>
10
- * [1]<pressable>🍔 Burgers</>
11
- * [2]<pressable>🥤 Drinks</>
12
- * [3]<pressable>🛒 View Cart</>
13
- * ```
14
- */
15
-
16
- import type { InteractiveElement, DehydratedScreen } from './types';
17
-
18
- /**
19
- * Dehydrate the current screen state into a text format for the LLM.
20
- */
21
- export function dehydrateScreen(
22
- screenName: string,
23
- availableScreens: string[],
24
- elementsText: string,
25
- elements: InteractiveElement[],
26
- ): DehydratedScreen {
27
- const lines: string[] = [];
28
-
29
- // Header
30
- lines.push(`Screen: ${screenName} | Available screens: ${availableScreens.join(', ')}`);
31
- lines.push('');
32
-
33
- if (!elementsText || elementsText.trim().length === 0) {
34
- if (elements.length === 0) {
35
- lines.push('No interactive elements or visible text detected on this screen.');
36
- } else {
37
- lines.push('Interactive elements:');
38
- lines.push(elementsText);
39
- }
40
- } else {
41
- lines.push('Screen Layout & Elements:');
42
- lines.push(elementsText);
43
- }
44
-
45
- const finalElementsText = lines.join('\n');
46
-
47
- return {
48
- screenName,
49
- availableScreens,
50
- elementsText: finalElementsText,
51
- elements,
52
- };
53
- }
@@ -1,44 +0,0 @@
1
- import React, { createContext } from 'react';
2
- import type { AIZoneConfig, RegisteredZone } from './types';
3
-
4
- export class ZoneRegistry {
5
- private zones = new Map<string, RegisteredZone>();
6
-
7
- register(config: AIZoneConfig, ref: React.RefObject<any>): void {
8
- if (this.zones.has(config.id)) {
9
- console.warn(`[MobileAI] Zone ID "${config.id}" is already registered on this screen. Overwriting.`);
10
- }
11
- this.zones.set(config.id, { ...config, ref });
12
- }
13
-
14
- unregister(id: string): void {
15
- this.zones.delete(id);
16
- }
17
-
18
- get(id: string): RegisteredZone | undefined {
19
- return this.zones.get(id);
20
- }
21
-
22
- getAll(): RegisteredZone[] {
23
- return Array.from(this.zones.values());
24
- }
25
-
26
- isActionAllowed(zoneId: string, action: 'highlight' | 'hint' | 'simplify' | 'card'): boolean {
27
- const zone = this.get(zoneId);
28
- if (!zone) return false;
29
-
30
- switch (action) {
31
- case 'highlight': return !!zone.allowHighlight;
32
- case 'hint': return !!zone.allowInjectHint;
33
- case 'simplify': return !!zone.allowSimplify;
34
- case 'card': return !!zone.allowInjectCard;
35
- default: return false;
36
- }
37
- }
38
- }
39
-
40
- // Global registry instance shared across the Agent session
41
- export const globalZoneRegistry = new ZoneRegistry();
42
-
43
- // Export context so AIZone components can register themselves
44
- export const ZoneRegistryContext = createContext<ZoneRegistry>(globalZoneRegistry);