@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,273 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * CSAT Survey — Customer Satisfaction component.
5
+ *
6
+ * Shown after a support conversation ends (or after idle timeout).
7
+ * Supports three rating types: emoji, stars, thumbs.
8
+ */
9
+
10
+ import { useState } from 'react';
11
+ import { View, Text, TouchableOpacity, TextInput, StyleSheet } from 'react-native';
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ const EMOJI_OPTIONS = [{
14
+ emoji: '😡',
15
+ label: 'Terrible',
16
+ score: 1
17
+ }, {
18
+ emoji: '😞',
19
+ label: 'Bad',
20
+ score: 2
21
+ }, {
22
+ emoji: '😐',
23
+ label: 'Okay',
24
+ score: 3
25
+ }, {
26
+ emoji: '😊',
27
+ label: 'Good',
28
+ score: 4
29
+ }, {
30
+ emoji: '🤩',
31
+ label: 'Amazing',
32
+ score: 5
33
+ }];
34
+ const STAR_COUNT = 5;
35
+ export function CSATSurvey({
36
+ config,
37
+ metadata,
38
+ onDismiss,
39
+ theme
40
+ }) {
41
+ const [selectedScore, setSelectedScore] = useState(null);
42
+ const [feedback, setFeedback] = useState('');
43
+ const [submitted, setSubmitted] = useState(false);
44
+ const primary = theme?.primaryColor ?? '#8b5cf6';
45
+ const textColor = theme?.textColor ?? '#ffffff';
46
+ const bgColor = theme?.backgroundColor ?? 'rgba(26, 26, 46, 0.98)';
47
+ const ratingType = config.ratingType ?? 'emoji';
48
+ const question = config.question ?? 'How was your experience?';
49
+ const handleSubmit = () => {
50
+ if (selectedScore === null) return;
51
+ const rating = {
52
+ score: selectedScore,
53
+ feedback: feedback.trim() || undefined,
54
+ metadata
55
+ };
56
+ config.onSubmit(rating);
57
+ setSubmitted(true);
58
+
59
+ // Auto-dismiss after 1.5s
60
+ setTimeout(onDismiss, 1500);
61
+ };
62
+ if (submitted) {
63
+ return /*#__PURE__*/_jsx(View, {
64
+ style: [styles.container, {
65
+ backgroundColor: bgColor
66
+ }],
67
+ children: /*#__PURE__*/_jsx(Text, {
68
+ style: [styles.thankYou, {
69
+ color: textColor
70
+ }],
71
+ children: "Thank you for your feedback! \uD83D\uDE4F"
72
+ })
73
+ });
74
+ }
75
+ return /*#__PURE__*/_jsxs(View, {
76
+ style: [styles.container, {
77
+ backgroundColor: bgColor
78
+ }],
79
+ children: [/*#__PURE__*/_jsx(Text, {
80
+ style: [styles.question, {
81
+ color: textColor
82
+ }],
83
+ children: question
84
+ }), /*#__PURE__*/_jsxs(View, {
85
+ style: styles.ratingContainer,
86
+ children: [ratingType === 'emoji' && /*#__PURE__*/_jsx(View, {
87
+ style: styles.emojiRow,
88
+ children: EMOJI_OPTIONS.map(opt => /*#__PURE__*/_jsxs(TouchableOpacity, {
89
+ onPress: () => setSelectedScore(opt.score),
90
+ style: [styles.emojiButton, selectedScore === opt.score && {
91
+ backgroundColor: `${primary}30`,
92
+ borderColor: primary
93
+ }],
94
+ activeOpacity: 0.7,
95
+ children: [/*#__PURE__*/_jsx(Text, {
96
+ style: styles.emoji,
97
+ children: opt.emoji
98
+ }), /*#__PURE__*/_jsx(Text, {
99
+ style: [styles.emojiLabel, {
100
+ color: selectedScore === opt.score ? primary : '#71717a'
101
+ }],
102
+ children: opt.label
103
+ })]
104
+ }, opt.score))
105
+ }), ratingType === 'stars' && /*#__PURE__*/_jsx(View, {
106
+ style: styles.starsRow,
107
+ children: Array.from({
108
+ length: STAR_COUNT
109
+ }, (_, i) => i + 1).map(star => /*#__PURE__*/_jsx(TouchableOpacity, {
110
+ onPress: () => setSelectedScore(star),
111
+ activeOpacity: 0.7,
112
+ children: /*#__PURE__*/_jsx(Text, {
113
+ style: [styles.star, {
114
+ color: selectedScore !== null && star <= selectedScore ? '#fbbf24' : '#52525b'
115
+ }],
116
+ children: "\u2605"
117
+ })
118
+ }, star))
119
+ }), ratingType === 'thumbs' && /*#__PURE__*/_jsxs(View, {
120
+ style: styles.thumbsRow,
121
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
122
+ onPress: () => setSelectedScore(0),
123
+ style: [styles.thumbButton, selectedScore === 0 && {
124
+ backgroundColor: '#ef444430',
125
+ borderColor: '#ef4444'
126
+ }],
127
+ activeOpacity: 0.7,
128
+ children: /*#__PURE__*/_jsx(Text, {
129
+ style: styles.thumbEmoji,
130
+ children: "\uD83D\uDC4E"
131
+ })
132
+ }), /*#__PURE__*/_jsx(TouchableOpacity, {
133
+ onPress: () => setSelectedScore(1),
134
+ style: [styles.thumbButton, selectedScore === 1 && {
135
+ backgroundColor: '#22c55e30',
136
+ borderColor: '#22c55e'
137
+ }],
138
+ activeOpacity: 0.7,
139
+ children: /*#__PURE__*/_jsx(Text, {
140
+ style: styles.thumbEmoji,
141
+ children: "\uD83D\uDC4D"
142
+ })
143
+ })]
144
+ })]
145
+ }), selectedScore !== null && /*#__PURE__*/_jsx(TextInput, {
146
+ style: [styles.feedbackInput, {
147
+ color: textColor
148
+ }],
149
+ placeholder: "Any additional feedback? (optional)",
150
+ placeholderTextColor: "#52525b",
151
+ value: feedback,
152
+ onChangeText: setFeedback,
153
+ multiline: true,
154
+ maxLength: 500
155
+ }), /*#__PURE__*/_jsxs(View, {
156
+ style: styles.actions,
157
+ children: [/*#__PURE__*/_jsx(TouchableOpacity, {
158
+ onPress: onDismiss,
159
+ activeOpacity: 0.7,
160
+ children: /*#__PURE__*/_jsx(Text, {
161
+ style: styles.dismissText,
162
+ children: "Skip"
163
+ })
164
+ }), selectedScore !== null && /*#__PURE__*/_jsx(TouchableOpacity, {
165
+ style: [styles.submitButton, {
166
+ backgroundColor: primary
167
+ }],
168
+ onPress: handleSubmit,
169
+ activeOpacity: 0.7,
170
+ children: /*#__PURE__*/_jsx(Text, {
171
+ style: [styles.submitText, {
172
+ color: textColor
173
+ }],
174
+ children: "Submit"
175
+ })
176
+ })]
177
+ })]
178
+ });
179
+ }
180
+ const styles = StyleSheet.create({
181
+ container: {
182
+ borderRadius: 16,
183
+ padding: 20,
184
+ margin: 12
185
+ },
186
+ question: {
187
+ fontSize: 16,
188
+ fontWeight: '600',
189
+ textAlign: 'center',
190
+ marginBottom: 16
191
+ },
192
+ thankYou: {
193
+ fontSize: 16,
194
+ fontWeight: '500',
195
+ textAlign: 'center',
196
+ paddingVertical: 12
197
+ },
198
+ ratingContainer: {
199
+ marginBottom: 12
200
+ },
201
+ emojiRow: {
202
+ flexDirection: 'row',
203
+ justifyContent: 'center',
204
+ gap: 8
205
+ },
206
+ emojiButton: {
207
+ alignItems: 'center',
208
+ paddingHorizontal: 10,
209
+ paddingVertical: 8,
210
+ borderRadius: 12,
211
+ borderWidth: 1,
212
+ borderColor: 'transparent'
213
+ },
214
+ emoji: {
215
+ fontSize: 28
216
+ },
217
+ emojiLabel: {
218
+ fontSize: 10,
219
+ marginTop: 4,
220
+ fontWeight: '500'
221
+ },
222
+ starsRow: {
223
+ flexDirection: 'row',
224
+ justifyContent: 'center',
225
+ gap: 8
226
+ },
227
+ star: {
228
+ fontSize: 36
229
+ },
230
+ thumbsRow: {
231
+ flexDirection: 'row',
232
+ justifyContent: 'center',
233
+ gap: 20
234
+ },
235
+ thumbButton: {
236
+ padding: 12,
237
+ borderRadius: 16,
238
+ borderWidth: 1,
239
+ borderColor: 'transparent'
240
+ },
241
+ thumbEmoji: {
242
+ fontSize: 36
243
+ },
244
+ feedbackInput: {
245
+ borderWidth: 1,
246
+ borderColor: '#3f3f46',
247
+ borderRadius: 12,
248
+ padding: 12,
249
+ fontSize: 14,
250
+ minHeight: 60,
251
+ textAlignVertical: 'top',
252
+ marginBottom: 12
253
+ },
254
+ actions: {
255
+ flexDirection: 'row',
256
+ justifyContent: 'space-between',
257
+ alignItems: 'center'
258
+ },
259
+ dismissText: {
260
+ color: '#71717a',
261
+ fontSize: 14
262
+ },
263
+ submitButton: {
264
+ paddingHorizontal: 20,
265
+ paddingVertical: 10,
266
+ borderRadius: 10
267
+ },
268
+ submitText: {
269
+ fontSize: 14,
270
+ fontWeight: '600'
271
+ }
272
+ });
273
+ //# sourceMappingURL=CSATSurvey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["useState","View","Text","TouchableOpacity","TextInput","StyleSheet","jsx","_jsx","jsxs","_jsxs","EMOJI_OPTIONS","emoji","label","score","STAR_COUNT","CSATSurvey","config","metadata","onDismiss","theme","selectedScore","setSelectedScore","feedback","setFeedback","submitted","setSubmitted","primary","primaryColor","textColor","bgColor","backgroundColor","ratingType","question","handleSubmit","rating","trim","undefined","onSubmit","setTimeout","style","styles","container","children","thankYou","color","ratingContainer","emojiRow","map","opt","onPress","emojiButton","borderColor","activeOpacity","emojiLabel","starsRow","Array","from","length","_","i","star","thumbsRow","thumbButton","thumbEmoji","feedbackInput","placeholder","placeholderTextColor","value","onChangeText","multiline","maxLength","actions","dismissText","submitButton","submitText","create","borderRadius","padding","margin","fontSize","fontWeight","textAlign","marginBottom","paddingVertical","flexDirection","justifyContent","gap","alignItems","paddingHorizontal","borderWidth","marginTop","minHeight","textAlignVertical"],"sourceRoot":"../../../src","sources":["support/CSATSurvey.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * EscalationSocket — manages a WebSocket connection to the MobileAI platform
5
+ * for receiving real-time replies from human support agents.
6
+ *
7
+ * Lifecycle:
8
+ * 1. SDK calls escalate_to_human → POST /api/v1/escalations → gets { ticketId, wsUrl }
9
+ * 2. EscalationSocket.connect(wsUrl) opens a WS connection
10
+ * 3. Platform pushes { type: 'reply', ticketId, reply } when agent responds
11
+ * 4. onReply callback fires → shown in chat UI as "👤 Human Agent: <reply>"
12
+ * 5. disconnect() on chat close / unmount
13
+ *
14
+ * Handles:
15
+ * - Server heartbeat pings (type: 'ping') — acknowledged silently
16
+ * - Auto-reconnect on unexpected close (max 3 attempts, exponential backoff)
17
+ */
18
+
19
+ export class EscalationSocket {
20
+ ws = null;
21
+ wsUrl = null;
22
+ reconnectAttempts = 0;
23
+ reconnectTimer = null;
24
+ intentionalClose = false;
25
+ constructor(options) {
26
+ this.onReply = options.onReply;
27
+ this.onError = options.onError;
28
+ this.maxReconnectAttempts = options.maxReconnectAttempts ?? 3;
29
+ }
30
+ connect(wsUrl) {
31
+ this.wsUrl = wsUrl;
32
+ this.intentionalClose = false;
33
+ this.openConnection();
34
+ }
35
+ disconnect() {
36
+ this.intentionalClose = true;
37
+ if (this.reconnectTimer) {
38
+ clearTimeout(this.reconnectTimer);
39
+ this.reconnectTimer = null;
40
+ }
41
+ if (this.ws) {
42
+ this.ws.close();
43
+ this.ws = null;
44
+ }
45
+ }
46
+ openConnection() {
47
+ if (!this.wsUrl) return;
48
+ try {
49
+ this.ws = new WebSocket(this.wsUrl);
50
+ } catch (err) {
51
+ console.error('[EscalationSocket] Failed to open WebSocket:', err);
52
+ return;
53
+ }
54
+ this.ws.onopen = () => {
55
+ console.log('[EscalationSocket] Connected:', this.wsUrl);
56
+ this.reconnectAttempts = 0;
57
+ };
58
+ this.ws.onmessage = event => {
59
+ try {
60
+ const msg = JSON.parse(String(event.data));
61
+ if (msg.type === 'ping') return; // heartbeat — ignore
62
+ if (msg.type === 'reply' && msg.reply) {
63
+ this.onReply(msg.reply);
64
+ }
65
+ } catch {
66
+ // Non-JSON message — ignore
67
+ }
68
+ };
69
+ this.ws.onerror = event => {
70
+ console.error('[EscalationSocket] Error:', event);
71
+ this.onError?.(event);
72
+ };
73
+ this.ws.onclose = () => {
74
+ if (this.intentionalClose) return;
75
+ console.warn('[EscalationSocket] Connection closed unexpectedly');
76
+ this.scheduleReconnect();
77
+ };
78
+ }
79
+ scheduleReconnect() {
80
+ if (this.reconnectAttempts >= this.maxReconnectAttempts) {
81
+ console.warn('[EscalationSocket] Max reconnect attempts reached — giving up');
82
+ return;
83
+ }
84
+ const delay = Math.min(1000 * 2 ** this.reconnectAttempts, 16_000);
85
+ this.reconnectAttempts++;
86
+ console.log(`[EscalationSocket] Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts}/${this.maxReconnectAttempts})`);
87
+ this.reconnectTimer = setTimeout(() => {
88
+ this.openConnection();
89
+ }, delay);
90
+ }
91
+ }
92
+ //# sourceMappingURL=EscalationSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EscalationSocket","ws","wsUrl","reconnectAttempts","reconnectTimer","intentionalClose","constructor","options","onReply","onError","maxReconnectAttempts","connect","openConnection","disconnect","clearTimeout","close","WebSocket","err","console","error","onopen","log","onmessage","event","msg","JSON","parse","String","data","type","reply","onerror","onclose","warn","scheduleReconnect","delay","Math","min","setTimeout"],"sourceRoot":"../../../src","sources":["support/EscalationSocket.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,142 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Support Greeting & Quick Replies — shown when chat opens in support mode.
5
+ *
6
+ * Renders a welcome message with an avatar and quick reply buttons
7
+ * that pre-fill the user's first message.
8
+ */
9
+
10
+ import { View, Text, TouchableOpacity, Image, StyleSheet, ScrollView } from 'react-native';
11
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
+ export function SupportGreeting({
13
+ config,
14
+ onQuickReply,
15
+ theme
16
+ }) {
17
+ const greeting = config.greeting;
18
+ const quickReplies = config.quickReplies ?? [];
19
+ if (!greeting) return null;
20
+ const primary = theme?.primaryColor ?? '#8b5cf6';
21
+ const textColor = theme?.textColor ?? '#ffffff';
22
+ const bgColor = theme?.backgroundColor ?? 'rgba(26, 26, 46, 0.95)';
23
+ return /*#__PURE__*/_jsxs(View, {
24
+ style: styles.container,
25
+ children: [/*#__PURE__*/_jsxs(View, {
26
+ style: styles.header,
27
+ children: [greeting.avatarUrl ? /*#__PURE__*/_jsx(Image, {
28
+ source: {
29
+ uri: greeting.avatarUrl
30
+ },
31
+ style: styles.avatar
32
+ }) : /*#__PURE__*/_jsx(View, {
33
+ style: [styles.avatarPlaceholder, {
34
+ backgroundColor: primary
35
+ }],
36
+ children: /*#__PURE__*/_jsx(Text, {
37
+ style: styles.avatarEmoji,
38
+ children: "\uD83E\uDD16"
39
+ })
40
+ }), greeting.agentName && /*#__PURE__*/_jsx(Text, {
41
+ style: [styles.agentName, {
42
+ color: textColor
43
+ }],
44
+ children: greeting.agentName
45
+ })]
46
+ }), /*#__PURE__*/_jsx(View, {
47
+ style: [styles.messageBubble, {
48
+ backgroundColor: bgColor
49
+ }],
50
+ children: /*#__PURE__*/_jsx(Text, {
51
+ style: [styles.messageText, {
52
+ color: textColor
53
+ }],
54
+ children: greeting.message
55
+ })
56
+ }), quickReplies.length > 0 && /*#__PURE__*/_jsx(ScrollView, {
57
+ horizontal: true,
58
+ showsHorizontalScrollIndicator: false,
59
+ contentContainerStyle: styles.quickRepliesContainer,
60
+ children: quickReplies.map((reply, index) => /*#__PURE__*/_jsxs(TouchableOpacity, {
61
+ style: [styles.quickReplyButton, {
62
+ borderColor: primary
63
+ }],
64
+ onPress: () => onQuickReply(reply.message ?? reply.label),
65
+ activeOpacity: 0.7,
66
+ children: [reply.icon && /*#__PURE__*/_jsx(Text, {
67
+ style: styles.quickReplyIcon,
68
+ children: reply.icon
69
+ }), /*#__PURE__*/_jsx(Text, {
70
+ style: [styles.quickReplyText, {
71
+ color: primary
72
+ }],
73
+ children: reply.label
74
+ })]
75
+ }, `qr-${index}`))
76
+ })]
77
+ });
78
+ }
79
+ const styles = StyleSheet.create({
80
+ container: {
81
+ paddingHorizontal: 16,
82
+ paddingVertical: 12
83
+ },
84
+ header: {
85
+ flexDirection: 'row',
86
+ alignItems: 'center',
87
+ gap: 10,
88
+ marginBottom: 12
89
+ },
90
+ avatar: {
91
+ width: 36,
92
+ height: 36,
93
+ borderRadius: 18
94
+ },
95
+ avatarPlaceholder: {
96
+ width: 36,
97
+ height: 36,
98
+ borderRadius: 18,
99
+ alignItems: 'center',
100
+ justifyContent: 'center'
101
+ },
102
+ avatarEmoji: {
103
+ fontSize: 18
104
+ },
105
+ agentName: {
106
+ fontSize: 14,
107
+ fontWeight: '600'
108
+ },
109
+ messageBubble: {
110
+ borderRadius: 16,
111
+ borderTopLeftRadius: 4,
112
+ paddingHorizontal: 14,
113
+ paddingVertical: 10,
114
+ marginBottom: 12,
115
+ maxWidth: '85%'
116
+ },
117
+ messageText: {
118
+ fontSize: 14,
119
+ lineHeight: 20
120
+ },
121
+ quickRepliesContainer: {
122
+ gap: 8,
123
+ paddingVertical: 4
124
+ },
125
+ quickReplyButton: {
126
+ flexDirection: 'row',
127
+ alignItems: 'center',
128
+ gap: 6,
129
+ paddingHorizontal: 14,
130
+ paddingVertical: 8,
131
+ borderRadius: 20,
132
+ borderWidth: 1
133
+ },
134
+ quickReplyIcon: {
135
+ fontSize: 14
136
+ },
137
+ quickReplyText: {
138
+ fontSize: 13,
139
+ fontWeight: '500'
140
+ }
141
+ });
142
+ //# sourceMappingURL=SupportGreeting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["View","Text","TouchableOpacity","Image","StyleSheet","ScrollView","jsx","_jsx","jsxs","_jsxs","SupportGreeting","config","onQuickReply","theme","greeting","quickReplies","primary","primaryColor","textColor","bgColor","backgroundColor","style","styles","container","children","header","avatarUrl","source","uri","avatar","avatarPlaceholder","avatarEmoji","agentName","color","messageBubble","messageText","message","length","horizontal","showsHorizontalScrollIndicator","contentContainerStyle","quickRepliesContainer","map","reply","index","quickReplyButton","borderColor","onPress","label","activeOpacity","icon","quickReplyIcon","quickReplyText","create","paddingHorizontal","paddingVertical","flexDirection","alignItems","gap","marginBottom","width","height","borderRadius","justifyContent","fontSize","fontWeight","borderTopLeftRadius","maxWidth","lineHeight","borderWidth"],"sourceRoot":"../../../src","sources":["support/SupportGreeting.tsx"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,120 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Escalate tool — hands off the conversation to a human agent.
5
+ *
6
+ * Providers:
7
+ * - 'mobileai' (default when analyticsKey present):
8
+ * POSTs to MobileAI /api/v1/escalations → gets ticketId + wsUrl
9
+ * Opens WebSocket via EscalationSocket → agent reply pushed in real time
10
+ * - 'custom': fires the consumer's onEscalate callback (backward compatible)
11
+ */
12
+
13
+ import { EscalationSocket } from "./EscalationSocket.js";
14
+ const MOBILEAI_HOST = 'https://api.mobileai.dev';
15
+
16
+ /** @deprecated Use createEscalateTool({ config, analyticsKey, getContext, getHistory }) */
17
+
18
+ export function createEscalateTool(depsOrConfig, legacyGetContext) {
19
+ // Normalise both call signatures
20
+ let deps;
21
+ if (legacyGetContext) {
22
+ deps = {
23
+ config: depsOrConfig,
24
+ getContext: legacyGetContext,
25
+ getHistory: () => []
26
+ };
27
+ } else {
28
+ deps = depsOrConfig;
29
+ }
30
+ const {
31
+ config,
32
+ analyticsKey,
33
+ getContext,
34
+ getHistory,
35
+ onHumanReply
36
+ } = deps;
37
+
38
+ // Determine effective provider
39
+ const provider = config.provider ?? (analyticsKey ? 'mobileai' : 'custom');
40
+
41
+ // Socket instance kept here — one per tool instance
42
+ let socket = null;
43
+ return {
44
+ name: 'escalate_to_human',
45
+ description: 'Hand off the conversation to a human support agent. ' + 'Use this when: (1) the user explicitly asks for a human, ' + '(2) you cannot resolve the issue after multiple attempts, or ' + '(3) the topic requires human judgment (billing disputes, account issues).',
46
+ parameters: {
47
+ reason: {
48
+ type: 'string',
49
+ description: 'Brief summary of why escalation is needed and what has been tried',
50
+ required: true
51
+ }
52
+ },
53
+ execute: async args => {
54
+ const reason = String(args.reason ?? 'User requested human support');
55
+ const context = getContext();
56
+ if (provider === 'mobileai') {
57
+ if (!analyticsKey) {
58
+ console.warn('[Escalation] provider=mobileai but no analyticsKey — falling back to custom');
59
+ } else {
60
+ try {
61
+ const history = getHistory().slice(-20); // last 20 messages for context
62
+ const res = await fetch(`${MOBILEAI_HOST}/api/v1/escalations`, {
63
+ method: 'POST',
64
+ headers: {
65
+ 'Content-Type': 'application/json'
66
+ },
67
+ body: JSON.stringify({
68
+ analyticsKey,
69
+ reason,
70
+ screen: context.currentScreen,
71
+ history,
72
+ stepsBeforeEscalation: context.stepsBeforeEscalation
73
+ })
74
+ });
75
+ if (res.ok) {
76
+ const {
77
+ ticketId,
78
+ wsUrl
79
+ } = await res.json();
80
+ console.log(`[Escalation] Ticket created: ${ticketId}`);
81
+
82
+ // Connect WebSocket for real-time reply
83
+ socket?.disconnect();
84
+ socket = new EscalationSocket({
85
+ onReply: reply => {
86
+ console.log(`[Escalation] Human reply received for ticket ${ticketId}`);
87
+ onHumanReply?.(reply);
88
+ socket?.disconnect();
89
+ socket = null;
90
+ },
91
+ onError: err => {
92
+ console.error('[Escalation] WebSocket error:', err);
93
+ }
94
+ });
95
+ socket.connect(wsUrl);
96
+ } else {
97
+ console.error('[Escalation] Failed to create ticket:', res.status);
98
+ }
99
+ } catch (err) {
100
+ console.error('[Escalation] Network error:', err.message);
101
+ }
102
+ const message = config.escalationMessage ?? 'Connecting you to a human agent...';
103
+ return `ESCALATED: ${message}`;
104
+ }
105
+ }
106
+
107
+ // 'custom' provider — fire callback
108
+ const escalationContext = {
109
+ conversationSummary: reason,
110
+ currentScreen: context.currentScreen,
111
+ originalQuery: context.originalQuery,
112
+ stepsBeforeEscalation: context.stepsBeforeEscalation
113
+ };
114
+ config.onEscalate?.(escalationContext);
115
+ const message = config.escalationMessage ?? 'Connecting you to a human agent...';
116
+ return `ESCALATED: ${message}`;
117
+ }
118
+ };
119
+ }
120
+ //# sourceMappingURL=escalateTool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["EscalationSocket","MOBILEAI_HOST","createEscalateTool","depsOrConfig","legacyGetContext","deps","config","getContext","getHistory","analyticsKey","onHumanReply","provider","socket","name","description","parameters","reason","type","required","execute","args","String","context","console","warn","history","slice","res","fetch","method","headers","body","JSON","stringify","screen","currentScreen","stepsBeforeEscalation","ok","ticketId","wsUrl","json","log","disconnect","onReply","reply","onError","err","error","connect","status","message","escalationMessage","escalationContext","conversationSummary","originalQuery","onEscalate"],"sourceRoot":"../../../src","sources":["support/escalateTool.ts"],"mappings":"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","ignoreList":[]}