@mobileai/react-native 0.4.2 → 0.4.4

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 (70) hide show
  1. package/README.md +23 -3
  2. package/lib/module/components/AIAgent.js +216 -5
  3. package/lib/module/components/AIAgent.js.map +1 -1
  4. package/lib/module/components/AgentChatBar.js +358 -36
  5. package/lib/module/components/AgentChatBar.js.map +1 -1
  6. package/lib/module/core/AgentRuntime.js +122 -6
  7. package/lib/module/core/AgentRuntime.js.map +1 -1
  8. package/lib/module/core/systemPrompt.js +57 -0
  9. package/lib/module/core/systemPrompt.js.map +1 -1
  10. package/lib/module/index.js +8 -0
  11. package/lib/module/index.js.map +1 -1
  12. package/lib/module/providers/GeminiProvider.js +108 -85
  13. package/lib/module/providers/GeminiProvider.js.map +1 -1
  14. package/lib/module/services/AudioInputService.js +128 -0
  15. package/lib/module/services/AudioInputService.js.map +1 -0
  16. package/lib/module/services/AudioOutputService.js +154 -0
  17. package/lib/module/services/AudioOutputService.js.map +1 -0
  18. package/lib/module/services/VoiceService.js +361 -0
  19. package/lib/module/services/VoiceService.js.map +1 -0
  20. package/lib/module/utils/audioUtils.js +49 -0
  21. package/lib/module/utils/audioUtils.js.map +1 -0
  22. package/lib/module/utils/logger.js +21 -4
  23. package/lib/module/utils/logger.js.map +1 -1
  24. package/lib/typescript/babel.config.d.ts +10 -0
  25. package/lib/typescript/babel.config.d.ts.map +1 -0
  26. package/lib/typescript/eslint.config.d.mts +3 -0
  27. package/lib/typescript/eslint.config.d.mts.map +1 -0
  28. package/lib/typescript/fetch-models.d.mts +2 -0
  29. package/lib/typescript/fetch-models.d.mts.map +1 -0
  30. package/lib/typescript/list-all-models.d.mts +2 -0
  31. package/lib/typescript/list-all-models.d.mts.map +1 -0
  32. package/lib/typescript/list-models.d.mts +2 -0
  33. package/lib/typescript/list-models.d.mts.map +1 -0
  34. package/lib/typescript/src/components/AIAgent.d.ts +8 -2
  35. package/lib/typescript/src/components/AIAgent.d.ts.map +1 -1
  36. package/lib/typescript/src/components/AgentChatBar.d.ts +19 -2
  37. package/lib/typescript/src/components/AgentChatBar.d.ts.map +1 -1
  38. package/lib/typescript/src/core/AgentRuntime.d.ts +17 -1
  39. package/lib/typescript/src/core/AgentRuntime.d.ts.map +1 -1
  40. package/lib/typescript/src/core/systemPrompt.d.ts +8 -0
  41. package/lib/typescript/src/core/systemPrompt.d.ts.map +1 -1
  42. package/lib/typescript/src/core/types.d.ts +24 -1
  43. package/lib/typescript/src/core/types.d.ts.map +1 -1
  44. package/lib/typescript/src/index.d.ts +6 -1
  45. package/lib/typescript/src/index.d.ts.map +1 -1
  46. package/lib/typescript/src/providers/GeminiProvider.d.ts +22 -18
  47. package/lib/typescript/src/providers/GeminiProvider.d.ts.map +1 -1
  48. package/lib/typescript/src/services/AudioInputService.d.ts +31 -0
  49. package/lib/typescript/src/services/AudioInputService.d.ts.map +1 -0
  50. package/lib/typescript/src/services/AudioOutputService.d.ts +34 -0
  51. package/lib/typescript/src/services/AudioOutputService.d.ts.map +1 -0
  52. package/lib/typescript/src/services/VoiceService.d.ts +73 -0
  53. package/lib/typescript/src/services/VoiceService.d.ts.map +1 -0
  54. package/lib/typescript/src/utils/audioUtils.d.ts +17 -0
  55. package/lib/typescript/src/utils/audioUtils.d.ts.map +1 -0
  56. package/lib/typescript/src/utils/logger.d.ts +4 -0
  57. package/lib/typescript/src/utils/logger.d.ts.map +1 -1
  58. package/package.json +24 -8
  59. package/src/components/AIAgent.tsx +222 -3
  60. package/src/components/AgentChatBar.tsx +487 -42
  61. package/src/core/AgentRuntime.ts +131 -2
  62. package/src/core/systemPrompt.ts +62 -0
  63. package/src/core/types.ts +30 -0
  64. package/src/index.ts +16 -0
  65. package/src/providers/GeminiProvider.ts +105 -89
  66. package/src/services/AudioInputService.ts +141 -0
  67. package/src/services/AudioOutputService.ts +167 -0
  68. package/src/services/VoiceService.ts +407 -0
  69. package/src/utils/audioUtils.ts +54 -0
  70. package/src/utils/logger.ts +24 -7
package/README.md CHANGED
@@ -23,6 +23,8 @@ Wrap your navigation with `<AIAgent>`. The AI automatically understands your ent
23
23
  - 🔒 **Production-grade security** — Element gating, content masking, lifecycle hooks, human-in-the-loop confirmation.
24
24
  - 🧩 **Custom actions** — Expose any business logic (checkout, API calls) as AI-callable tools with `useAction`.
25
25
  - 🌐 **MCP bridge** — Let external AI agents (OpenClaw, Claude Desktop) control your app remotely.
26
+ - 🎙️ **Live Agent (Voice Mode)** — Real-time conversational AI that sees your screen and takes action while you speak.
27
+ - 🎤 **Voice Dictation** — Built-in on-device speech-to-text for the text chat mode.
26
28
  - 🌍 **Bilingual** — English and Arabic support built-in.
27
29
 
28
30
  ## 📦 Installation
@@ -33,7 +35,24 @@ npm install @mobileai/react-native
33
35
  npm install react-native-agentic-ai
34
36
  ```
35
37
 
36
- No native modules required. Works with Expo managed workflow out of the box — **no eject needed**.
38
+ No native modules required by default. Works with Expo managed workflow out of the box — **no eject needed**.
39
+
40
+ ### Optional Native Dependencies
41
+
42
+ If you want to use **Live Agent (Voice)**, **Text Mode Dictation**, or **Screenshots** (for image/video content), install these optional peer dependencies:
43
+
44
+ ```bash
45
+ # For Voice / Live Agent mode:
46
+ npx expo install react-native-audio-api
47
+
48
+ # For Text mode voice dictation (mic button):
49
+ npx expo install expo-speech-recognition
50
+
51
+ # For Screenshots (when asking AI "what do you see in this image?"):
52
+ npx expo install react-native-view-shot
53
+ ```
54
+
55
+ > **Note on Permissions**: Ensure you add Microphone permissions (`NSMicrophoneUsageDescription` / `RECORD_AUDIO`) to your `app.json` or `Info.plist`/`AndroidManifest.xml` if using the audio packages.
37
56
 
38
57
  ## 🚀 Quick Start
39
58
 
@@ -61,14 +80,14 @@ A floating chat bar appears automatically. Ask the AI to navigate, tap buttons,
61
80
 
62
81
  ### `<AIAgent>` Component
63
82
 
64
- The root provider. Wrap your app once at the top level.
83
+ The root provider. Wrap your app once at the top level. You can toggle between Text and Live Agent (Voice) modes.
65
84
 
66
85
  | Prop | Type | Default | Description |
67
86
  |------|------|---------|-------------|
68
87
  | `apiKey` | `string` | — | **Required.** Gemini API key. |
69
88
  | `model` | `string` | `'gemini-2.5-flash'` | Gemini model name. |
70
89
  | `navRef` | `NavigationContainerRef` | — | Navigation ref for auto-navigation. |
71
- | `language` | `'en' \| 'ar'` | `'en'` | UI language. |
90
+ | `language` | `'en' \| 'ar'` | `'en'` | UI language. Forces Gemini Voice to speak the chosen dialect natively. |
72
91
  | `maxSteps` | `number` | `10` | Max steps per task. |
73
92
  | `showChatBar` | `boolean` | `true` | Show the floating chat bar. |
74
93
  | `onResult` | `(result) => void` | — | Called when the agent finishes. |
@@ -249,6 +268,7 @@ This starts two servers:
249
268
  | `tap(index)` | Tap any interactive element. Works universally on buttons, switches, checkboxes, and custom components. |
250
269
  | `type(index, text)` | Type text into a text-input. |
251
270
  | `navigate(screen)` | Navigate to a screen. |
271
+ | `capture_screenshot(reason)` | Capture the current screen as an image. Called on-demand by the AI (requires `react-native-view-shot`). |
252
272
  | `done(text)` | Complete the task with a response. |
253
273
  | `ask_user(question)` | Ask the user for clarification. |
254
274
 
@@ -18,12 +18,17 @@ import { AgentContext } from "../hooks/useAction.js";
18
18
  import { AgentChatBar } from "./AgentChatBar.js";
19
19
  import { AgentOverlay } from "./AgentOverlay.js";
20
20
  import { logger } from "../utils/logger.js";
21
+ import { buildVoiceSystemPrompt } from "../core/systemPrompt.js";
21
22
  import { MCPBridge } from "../core/MCPBridge.js";
22
-
23
+ import { VoiceService } from "../services/VoiceService.js";
24
+ import { AudioInputService } from "../services/AudioInputService.js";
25
+ import { AudioOutputService } from "../services/AudioOutputService.js";
26
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
23
27
  // ─── Context ───────────────────────────────────────────────────
28
+ console.log('🚀 AIAgent.tsx MODULE LOADED');
24
29
 
25
30
  // ─── Props ─────────────────────────────────────────────────────
26
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
31
+
27
32
  // ─── Component ─────────────────────────────────────────────────
28
33
 
29
34
  export function AIAgent({
@@ -48,13 +53,42 @@ export function AIAgent({
48
53
  stepDelay,
49
54
  mcpServerUrl,
50
55
  router,
51
- pathname
56
+ pathname,
57
+ enableVoice = false,
58
+ onTokenUsage,
59
+ debug = false
52
60
  }) {
61
+ // Configure logger based on debug prop
62
+ React.useEffect(() => {
63
+ console.log('[AIAgent] DEBUG PROP =', debug, '— enabling logger');
64
+ logger.setEnabled(debug);
65
+ if (debug) {
66
+ logger.info('AIAgent', '🔧 Debug logging enabled');
67
+ }
68
+ }, [debug]);
53
69
  const rootViewRef = useRef(null);
54
70
  const [isThinking, setIsThinking] = useState(false);
55
71
  const [statusText, setStatusText] = useState('');
56
72
  const [lastResult, setLastResult] = useState(null);
57
73
 
74
+ // ─── Voice/Live Mode State ──────────────────────────────────
75
+ const [mode, setMode] = useState('text');
76
+ const [isMicActive, setIsMicActive] = useState(false);
77
+ const [isSpeakerMuted, setIsSpeakerMuted] = useState(false);
78
+ const [isAISpeaking, setIsAISpeaking] = useState(false);
79
+ const [isVoiceConnected, setIsVoiceConnected] = useState(false);
80
+ const voiceServiceRef = useRef(null);
81
+ const audioInputRef = useRef(null);
82
+ const audioOutputRef = useRef(null);
83
+
84
+ // Compute available modes from props
85
+ const availableModes = useMemo(() => {
86
+ const modes = ['text'];
87
+ if (enableVoice) modes.push('voice');
88
+ logger.info('AIAgent', `Available modes: ${modes.join(', ')}`);
89
+ return modes;
90
+ }, [enableVoice]);
91
+
58
92
  // Ref-based resolver for ask_user — stays alive across renders
59
93
  const askUserResolverRef = useRef(null);
60
94
 
@@ -79,6 +113,7 @@ export function AIAgent({
79
113
  router,
80
114
  pathname,
81
115
  onStatusUpdate: setStatusText,
116
+ onTokenUsage,
82
117
  // Page-agent pattern: block the agent loop until user responds
83
118
  onAskUser: question => {
84
119
  return new Promise(resolve => {
@@ -93,7 +128,7 @@ export function AIAgent({
93
128
  setStatusText('');
94
129
  });
95
130
  }
96
- }), [apiKey, model, language, maxSteps, interactiveBlacklist, interactiveWhitelist, onBeforeStep, onAfterStep, onBeforeTask, onAfterTask, transformScreenContent, customTools, instructions, stepDelay, mcpServerUrl, router, pathname]);
131
+ }), [apiKey, model, language, maxSteps, interactiveBlacklist, interactiveWhitelist, onBeforeStep, onAfterStep, onBeforeTask, onAfterTask, transformScreenContent, customTools, instructions, stepDelay, mcpServerUrl, router, pathname, onTokenUsage]);
97
132
  const provider = useMemo(() => new GeminiProvider(apiKey, model), [apiKey, model]);
98
133
  const runtime = useMemo(() => new AgentRuntime(provider, config, rootViewRef.current, navRef),
99
134
  // eslint-disable-next-line react-hooks/exhaustive-deps
@@ -115,6 +150,145 @@ export function AIAgent({
115
150
  };
116
151
  }, [mcpServerUrl, runtime]);
117
152
 
153
+ // ─── Voice/Live Service Initialization ──────────────────────
154
+
155
+ // Initialize voice services when mode changes to voice or live
156
+ useEffect(() => {
157
+ if (mode === 'text') {
158
+ logger.info('AIAgent', 'Text mode — skipping voice service init');
159
+ return;
160
+ }
161
+ logger.info('AIAgent', `Mode changed to "${mode}" — initializing voice services...`);
162
+
163
+ // Create VoiceService with runtime's built-in tools (navigate, tap, type, done, etc.)
164
+ if (!voiceServiceRef.current) {
165
+ logger.info('AIAgent', 'Creating VoiceService...');
166
+ const runtimeTools = runtime.getTools();
167
+ logger.info('AIAgent', `Registering ${runtimeTools.length} tools with VoiceService: ${runtimeTools.map(t => t.name).join(', ')}`);
168
+ // Build the full voice system prompt (screen format + tool descriptions + guardrails)
169
+ // This gives voice mode the same screen understanding as text mode
170
+ const voicePrompt = buildVoiceSystemPrompt(language, instructions?.system);
171
+ voiceServiceRef.current = new VoiceService({
172
+ apiKey,
173
+ systemPrompt: voicePrompt,
174
+ tools: runtimeTools,
175
+ language
176
+ });
177
+ logger.info('AIAgent', 'VoiceService created with full voice system prompt and tools');
178
+ }
179
+
180
+ // Create AudioOutputService if not exists
181
+ if (!audioOutputRef.current) {
182
+ logger.info('AIAgent', 'Creating AudioOutputService...');
183
+ audioOutputRef.current = new AudioOutputService({
184
+ onError: err => logger.error('AIAgent', `AudioOutput error: ${err}`)
185
+ });
186
+ audioOutputRef.current.initialize().then(ok => {
187
+ logger.info('AIAgent', `AudioOutputService initialized: ${ok}`);
188
+ });
189
+ }
190
+
191
+ // Create AudioInputService if not exists
192
+ if (!audioInputRef.current) {
193
+ logger.info('AIAgent', 'Creating AudioInputService...');
194
+ audioInputRef.current = new AudioInputService({
195
+ // Default 16kHz — Gemini Live API input standard
196
+ onAudioChunk: chunk => {
197
+ logger.debug('AIAgent', `Mic chunk: ${chunk.length} chars`);
198
+ voiceServiceRef.current?.sendAudio(chunk);
199
+ },
200
+ onError: err => logger.error('AIAgent', `AudioInput error: ${err}`),
201
+ onPermissionDenied: () => logger.warn('AIAgent', 'Mic permission denied by user')
202
+ });
203
+ }
204
+
205
+ // Connect VoiceService
206
+ logger.info('AIAgent', 'Connecting VoiceService...');
207
+ voiceServiceRef.current.connect({
208
+ onAudioResponse: audio => {
209
+ logger.info('AIAgent', `Received audio response (${audio.length} chars)`);
210
+ setIsAISpeaking(true);
211
+ audioOutputRef.current?.enqueue(audio);
212
+ },
213
+ onStatusChange: status => {
214
+ logger.info('AIAgent', `Voice status: ${status}`);
215
+ const connected = status === 'connected';
216
+ setIsVoiceConnected(connected);
217
+ if (connected) {
218
+ logger.info('AIAgent', '✅ VoiceService connected — auto-starting mic...');
219
+ // Auto-start mic streaming once WebSocket is ready
220
+ audioInputRef.current?.start().then(ok => {
221
+ if (ok) {
222
+ setIsMicActive(true);
223
+ logger.info('AIAgent', '🎙️ Mic auto-started after connection');
224
+ }
225
+ });
226
+ // Send initial screen context (tree) so the model knows what's on screen
227
+ const initialContext = runtime.getScreenContext();
228
+ voiceServiceRef.current?.sendScreenContext(initialContext);
229
+ logger.info('AIAgent', '📡 Initial screen context sent to voice model');
230
+ }
231
+ },
232
+ onTranscript: (text, isFinal, role) => {
233
+ logger.info('AIAgent', `Transcript [${role}] (final=${isFinal}): "${text}"`);
234
+ },
235
+ onToolCall: async toolCall => {
236
+ logger.info('AIAgent', `Voice tool call: ${toolCall.name}(${JSON.stringify(toolCall.args)})`);
237
+ // Execute the tool via AgentRuntime and send result back to Gemini
238
+ const result = await runtime.executeTool(toolCall.name, toolCall.args);
239
+ logger.info('AIAgent', `Voice tool result: ${result}`);
240
+ voiceServiceRef.current?.sendFunctionResponse(toolCall.name, toolCall.id, {
241
+ result
242
+ });
243
+
244
+ // After tool execution, push updated screen context
245
+ // (the screen may have changed from tap/type/navigate)
246
+ const updatedContext = runtime.getScreenContext();
247
+ voiceServiceRef.current?.sendScreenContext(updatedContext);
248
+ logger.info('AIAgent', '📡 Updated screen context sent after tool call');
249
+ },
250
+ onError: err => {
251
+ logger.error('AIAgent', `VoiceService error: ${err}`);
252
+ },
253
+ onTurnComplete: () => {
254
+ logger.info('AIAgent', 'AI turn complete');
255
+ setIsAISpeaking(false);
256
+ }
257
+ });
258
+
259
+ // Cleanup on mode change back to text
260
+ return () => {
261
+ logger.info('AIAgent', `Cleaning up voice services (leaving "${mode}" mode)`);
262
+ voiceServiceRef.current?.disconnect();
263
+ voiceServiceRef.current = null; // Ensure fresh instance on next connect
264
+ audioInputRef.current?.stop();
265
+ setIsMicActive(false);
266
+ setIsAISpeaking(false);
267
+ setIsVoiceConnected(false);
268
+ };
269
+ // eslint-disable-next-line react-hooks/exhaustive-deps
270
+ }, [mode, apiKey, runtime, language, instructions]);
271
+
272
+ // ─── Stop Voice Session (full cleanup) ─────────────────────
273
+
274
+ const stopVoiceSession = useCallback(() => {
275
+ logger.info('AIAgent', '🛑 Stopping voice session (full cleanup)...');
276
+ // 1. Stop mic input
277
+ audioInputRef.current?.stop();
278
+ // 2. Stop audio output (clear queued chunks)
279
+ audioOutputRef.current?.stop();
280
+ // 3. Disconnect WebSocket
281
+ voiceServiceRef.current?.disconnect();
282
+ voiceServiceRef.current = null;
283
+ // 4. Reset state
284
+ setIsMicActive(false);
285
+ setIsAISpeaking(false);
286
+ setIsVoiceConnected(false);
287
+ // 5. Switch back to text mode (triggers cleanup effect naturally)
288
+ setMode('text');
289
+ logger.info('AIAgent', '🛑 Voice session fully stopped');
290
+ }, [runtime]);
291
+
118
292
  // ─── Execute ──────────────────────────────────────────────────
119
293
 
120
294
  const handleSend = useCallback(async message => {
@@ -173,7 +347,44 @@ export function AIAgent({
173
347
  isThinking: isThinking,
174
348
  lastResult: lastResult,
175
349
  language: language,
176
- onDismiss: () => setLastResult(null)
350
+ onDismiss: () => setLastResult(null),
351
+ availableModes: availableModes,
352
+ mode: mode,
353
+ onModeChange: newMode => {
354
+ logger.info('AIAgent', `Mode change: ${mode} → ${newMode}`);
355
+ setMode(newMode);
356
+ },
357
+ isMicActive: isMicActive,
358
+ isSpeakerMuted: isSpeakerMuted,
359
+ isAISpeaking: isAISpeaking,
360
+ onStopSession: stopVoiceSession,
361
+ isVoiceConnected: isVoiceConnected,
362
+ onMicToggle: active => {
363
+ if (active && !isVoiceConnected) {
364
+ logger.warn('AIAgent', 'Cannot toggle mic — VoiceService not connected yet');
365
+ return;
366
+ }
367
+ logger.info('AIAgent', `Mic toggle: ${active ? 'ON' : 'OFF'}`);
368
+ setIsMicActive(active);
369
+ if (active) {
370
+ logger.info('AIAgent', 'Starting AudioInput...');
371
+ audioInputRef.current?.start().then(ok => {
372
+ logger.info('AIAgent', `AudioInput start result: ${ok}`);
373
+ });
374
+ } else {
375
+ logger.info('AIAgent', 'Stopping AudioInput...');
376
+ audioInputRef.current?.stop();
377
+ }
378
+ },
379
+ onSpeakerToggle: muted => {
380
+ logger.info('AIAgent', `Speaker toggle: ${muted ? 'MUTED' : 'UNMUTED'}`);
381
+ setIsSpeakerMuted(muted);
382
+ if (muted) {
383
+ audioOutputRef.current?.mute();
384
+ } else {
385
+ audioOutputRef.current?.unmute();
386
+ }
387
+ }
177
388
  })]
178
389
  });
179
390
  }
@@ -1 +1 @@
1
- {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","View","StyleSheet","AgentRuntime","GeminiProvider","AgentContext","AgentChatBar","AgentOverlay","logger","MCPBridge","jsx","_jsx","jsxs","_jsxs","AIAgent","apiKey","model","navRef","language","maxSteps","showChatBar","children","onResult","interactiveBlacklist","interactiveWhitelist","onBeforeStep","onAfterStep","onBeforeTask","onAfterTask","transformScreenContent","customTools","instructions","stepDelay","mcpServerUrl","router","pathname","rootViewRef","isThinking","setIsThinking","statusText","setStatusText","lastResult","setLastResult","askUserResolverRef","config","onStatusUpdate","onAskUser","question","Promise","resolve","current","success","message","steps","provider","runtime","updateRefs","info","bridge","destroy","handleSend","trim","resolver","result","execute","error","Provider","value","ref","style","styles","root","collapsable","visible","onSend","onDismiss","create","flex"],"sourceRoot":"../../../src","sources":["components/AIAgent.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","useCallback","useEffect","useMemo","useRef","useState","View","StyleSheet","AgentRuntime","GeminiProvider","AgentContext","AgentChatBar","AgentOverlay","logger","buildVoiceSystemPrompt","MCPBridge","VoiceService","AudioInputService","AudioOutputService","jsx","_jsx","jsxs","_jsxs","console","log","AIAgent","apiKey","model","navRef","language","maxSteps","showChatBar","children","onResult","interactiveBlacklist","interactiveWhitelist","onBeforeStep","onAfterStep","onBeforeTask","onAfterTask","transformScreenContent","customTools","instructions","stepDelay","mcpServerUrl","router","pathname","enableVoice","onTokenUsage","debug","setEnabled","info","rootViewRef","isThinking","setIsThinking","statusText","setStatusText","lastResult","setLastResult","mode","setMode","isMicActive","setIsMicActive","isSpeakerMuted","setIsSpeakerMuted","isAISpeaking","setIsAISpeaking","isVoiceConnected","setIsVoiceConnected","voiceServiceRef","audioInputRef","audioOutputRef","availableModes","modes","push","join","askUserResolverRef","config","onStatusUpdate","onAskUser","question","Promise","resolve","current","success","message","steps","provider","runtime","updateRefs","bridge","destroy","runtimeTools","getTools","length","map","t","name","voicePrompt","system","systemPrompt","tools","onError","err","error","initialize","then","ok","onAudioChunk","chunk","sendAudio","onPermissionDenied","warn","connect","onAudioResponse","audio","enqueue","onStatusChange","status","connected","start","initialContext","getScreenContext","sendScreenContext","onTranscript","text","isFinal","role","onToolCall","toolCall","JSON","stringify","args","result","executeTool","sendFunctionResponse","id","updatedContext","onTurnComplete","disconnect","stop","stopVoiceSession","handleSend","trim","resolver","execute","Provider","value","ref","style","styles","root","collapsable","visible","onSend","onDismiss","onModeChange","newMode","onStopSession","onMicToggle","active","onSpeakerToggle","muted","mute","unmute","create","flex"],"sourceRoot":"../../../src","sources":["components/AIAgent.tsx"],"mappings":"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","ignoreList":[]}