@convai/web-sdk 0.1.1-beta.3 → 0.1.1-beta.5

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 (188) hide show
  1. package/README.md +41 -2
  2. package/dist/core/AudioManager.d.ts +9 -1
  3. package/dist/core/AudioManager.d.ts.map +1 -1
  4. package/dist/core/AudioManager.js +44 -6
  5. package/dist/core/AudioManager.js.map +1 -1
  6. package/dist/core/ConvaiClient.d.ts +18 -9
  7. package/dist/core/ConvaiClient.d.ts.map +1 -1
  8. package/dist/core/ConvaiClient.js +75 -49
  9. package/dist/core/ConvaiClient.js.map +1 -1
  10. package/dist/core/MessageHandler.d.ts.map +1 -1
  11. package/dist/core/MessageHandler.js +26 -24
  12. package/dist/core/MessageHandler.js.map +1 -1
  13. package/dist/react/components/ConvaiWidget.d.ts.map +1 -1
  14. package/dist/react/components/ConvaiWidget.js +5 -10
  15. package/dist/react/components/ConvaiWidget.js.map +1 -1
  16. package/dist/react/hooks/useConvaiClient.d.ts.map +1 -1
  17. package/dist/react/hooks/useConvaiClient.js +12 -9
  18. package/dist/react/hooks/useConvaiClient.js.map +1 -1
  19. package/dist/types/index.d.ts +1 -3
  20. package/dist/types/index.d.ts.map +1 -1
  21. package/dist/vanilla/AudioRenderer.d.ts +45 -0
  22. package/dist/vanilla/AudioRenderer.d.ts.map +1 -0
  23. package/dist/vanilla/AudioRenderer.js +126 -0
  24. package/dist/vanilla/AudioRenderer.js.map +1 -0
  25. package/dist/vanilla/ConvaiWidget.d.ts +39 -0
  26. package/dist/vanilla/ConvaiWidget.d.ts.map +1 -0
  27. package/dist/vanilla/ConvaiWidget.js +1577 -0
  28. package/dist/vanilla/ConvaiWidget.js.map +1 -0
  29. package/dist/vanilla/icons.d.ts +34 -0
  30. package/dist/vanilla/icons.d.ts.map +1 -0
  31. package/dist/vanilla/icons.js +215 -0
  32. package/dist/vanilla/icons.js.map +1 -0
  33. package/dist/vanilla/index.d.ts +37 -0
  34. package/dist/vanilla/index.d.ts.map +1 -0
  35. package/dist/vanilla/index.js +39 -0
  36. package/dist/vanilla/index.js.map +1 -0
  37. package/dist/{components/rtc-widget/styles/theme.d.ts → vanilla/styles.d.ts} +14 -50
  38. package/dist/vanilla/styles.d.ts.map +1 -0
  39. package/dist/vanilla/styles.js +287 -0
  40. package/dist/vanilla/styles.js.map +1 -0
  41. package/dist/vanilla/types.d.ts +38 -0
  42. package/dist/vanilla/types.d.ts.map +1 -0
  43. package/dist/vanilla/types.js +2 -0
  44. package/dist/vanilla/types.js.map +1 -0
  45. package/package.json +12 -5
  46. package/dist/components/ConvaiWidget.d.ts +0 -59
  47. package/dist/components/ConvaiWidget.d.ts.map +0 -1
  48. package/dist/components/ConvaiWidget.js +0 -421
  49. package/dist/components/ConvaiWidget.js.map +0 -1
  50. package/dist/components/index.d.ts +0 -3
  51. package/dist/components/index.d.ts.map +0 -1
  52. package/dist/components/index.js +0 -5
  53. package/dist/components/index.js.map +0 -1
  54. package/dist/components/rtc-widget/components/AudioSettingsPanel.d.ts +0 -10
  55. package/dist/components/rtc-widget/components/AudioSettingsPanel.d.ts.map +0 -1
  56. package/dist/components/rtc-widget/components/AudioSettingsPanel.js +0 -316
  57. package/dist/components/rtc-widget/components/AudioSettingsPanel.js.map +0 -1
  58. package/dist/components/rtc-widget/components/ConviMessage.d.ts +0 -10
  59. package/dist/components/rtc-widget/components/ConviMessage.d.ts.map +0 -1
  60. package/dist/components/rtc-widget/components/ConviMessage.js +0 -14
  61. package/dist/components/rtc-widget/components/ConviMessage.js.map +0 -1
  62. package/dist/components/rtc-widget/components/FloatingVideo.d.ts +0 -9
  63. package/dist/components/rtc-widget/components/FloatingVideo.d.ts.map +0 -1
  64. package/dist/components/rtc-widget/components/FloatingVideo.js +0 -122
  65. package/dist/components/rtc-widget/components/FloatingVideo.js.map +0 -1
  66. package/dist/components/rtc-widget/components/MarkdownRenderer.d.ts +0 -7
  67. package/dist/components/rtc-widget/components/MarkdownRenderer.d.ts.map +0 -1
  68. package/dist/components/rtc-widget/components/MarkdownRenderer.js +0 -68
  69. package/dist/components/rtc-widget/components/MarkdownRenderer.js.map +0 -1
  70. package/dist/components/rtc-widget/components/MessageBubble.d.ts +0 -10
  71. package/dist/components/rtc-widget/components/MessageBubble.d.ts.map +0 -1
  72. package/dist/components/rtc-widget/components/MessageBubble.js +0 -23
  73. package/dist/components/rtc-widget/components/MessageBubble.js.map +0 -1
  74. package/dist/components/rtc-widget/components/MessageList.d.ts +0 -11
  75. package/dist/components/rtc-widget/components/MessageList.d.ts.map +0 -1
  76. package/dist/components/rtc-widget/components/MessageList.js +0 -89
  77. package/dist/components/rtc-widget/components/MessageList.js.map +0 -1
  78. package/dist/components/rtc-widget/components/UserMessage.d.ts +0 -9
  79. package/dist/components/rtc-widget/components/UserMessage.d.ts.map +0 -1
  80. package/dist/components/rtc-widget/components/UserMessage.js +0 -15
  81. package/dist/components/rtc-widget/components/UserMessage.js.map +0 -1
  82. package/dist/components/rtc-widget/components/conviComponents/ConviButton.d.ts +0 -6
  83. package/dist/components/rtc-widget/components/conviComponents/ConviButton.d.ts.map +0 -1
  84. package/dist/components/rtc-widget/components/conviComponents/ConviButton.js +0 -15
  85. package/dist/components/rtc-widget/components/conviComponents/ConviButton.js.map +0 -1
  86. package/dist/components/rtc-widget/components/conviComponents/ConviFooter.d.ts +0 -25
  87. package/dist/components/rtc-widget/components/conviComponents/ConviFooter.d.ts.map +0 -1
  88. package/dist/components/rtc-widget/components/conviComponents/ConviFooter.js +0 -172
  89. package/dist/components/rtc-widget/components/conviComponents/ConviFooter.js.map +0 -1
  90. package/dist/components/rtc-widget/components/conviComponents/ConviHeader.d.ts +0 -17
  91. package/dist/components/rtc-widget/components/conviComponents/ConviHeader.d.ts.map +0 -1
  92. package/dist/components/rtc-widget/components/conviComponents/ConviHeader.js +0 -66
  93. package/dist/components/rtc-widget/components/conviComponents/ConviHeader.js.map +0 -1
  94. package/dist/components/rtc-widget/components/conviComponents/SettingsTray.d.ts +0 -12
  95. package/dist/components/rtc-widget/components/conviComponents/SettingsTray.d.ts.map +0 -1
  96. package/dist/components/rtc-widget/components/conviComponents/SettingsTray.js +0 -68
  97. package/dist/components/rtc-widget/components/conviComponents/SettingsTray.js.map +0 -1
  98. package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts +0 -8
  99. package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.d.ts.map +0 -1
  100. package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js +0 -199
  101. package/dist/components/rtc-widget/components/conviComponents/VoiceModeOverlay.js.map +0 -1
  102. package/dist/components/rtc-widget/components/conviComponents/index.d.ts +0 -6
  103. package/dist/components/rtc-widget/components/conviComponents/index.d.ts.map +0 -1
  104. package/dist/components/rtc-widget/components/conviComponents/index.js +0 -6
  105. package/dist/components/rtc-widget/components/conviComponents/index.js.map +0 -1
  106. package/dist/components/rtc-widget/components/index.d.ts +0 -8
  107. package/dist/components/rtc-widget/components/index.d.ts.map +0 -1
  108. package/dist/components/rtc-widget/components/index.js +0 -13
  109. package/dist/components/rtc-widget/components/index.js.map +0 -1
  110. package/dist/components/rtc-widget/index.d.ts +0 -6
  111. package/dist/components/rtc-widget/index.d.ts.map +0 -1
  112. package/dist/components/rtc-widget/index.js +0 -9
  113. package/dist/components/rtc-widget/index.js.map +0 -1
  114. package/dist/components/rtc-widget/styles/framerConfig.d.ts +0 -116
  115. package/dist/components/rtc-widget/styles/framerConfig.d.ts.map +0 -1
  116. package/dist/components/rtc-widget/styles/framerConfig.js +0 -73
  117. package/dist/components/rtc-widget/styles/framerConfig.js.map +0 -1
  118. package/dist/components/rtc-widget/styles/icons.d.ts +0 -28
  119. package/dist/components/rtc-widget/styles/icons.d.ts.map +0 -1
  120. package/dist/components/rtc-widget/styles/icons.js +0 -257
  121. package/dist/components/rtc-widget/styles/icons.js.map +0 -1
  122. package/dist/components/rtc-widget/styles/index.d.ts +0 -6
  123. package/dist/components/rtc-widget/styles/index.d.ts.map +0 -1
  124. package/dist/components/rtc-widget/styles/index.js +0 -9
  125. package/dist/components/rtc-widget/styles/index.js.map +0 -1
  126. package/dist/components/rtc-widget/styles/styledComponents.d.ts +0 -90
  127. package/dist/components/rtc-widget/styles/styledComponents.d.ts.map +0 -1
  128. package/dist/components/rtc-widget/styles/styledComponents.js +0 -661
  129. package/dist/components/rtc-widget/styles/styledComponents.js.map +0 -1
  130. package/dist/components/rtc-widget/styles/theme.d.ts.map +0 -1
  131. package/dist/components/rtc-widget/styles/theme.js +0 -290
  132. package/dist/components/rtc-widget/styles/theme.js.map +0 -1
  133. package/dist/components/rtc-widget/types/index.d.ts +0 -60
  134. package/dist/components/rtc-widget/types/index.d.ts.map +0 -1
  135. package/dist/components/rtc-widget/types/index.js +0 -2
  136. package/dist/components/rtc-widget/types/index.js.map +0 -1
  137. package/dist/hooks/index.d.ts +0 -13
  138. package/dist/hooks/index.d.ts.map +0 -1
  139. package/dist/hooks/index.js +0 -14
  140. package/dist/hooks/index.js.map +0 -1
  141. package/dist/hooks/useAudioControls.d.ts +0 -41
  142. package/dist/hooks/useAudioControls.d.ts.map +0 -1
  143. package/dist/hooks/useAudioControls.js +0 -208
  144. package/dist/hooks/useAudioControls.js.map +0 -1
  145. package/dist/hooks/useCharacterInfo.d.ts +0 -17
  146. package/dist/hooks/useCharacterInfo.d.ts.map +0 -1
  147. package/dist/hooks/useCharacterInfo.js +0 -60
  148. package/dist/hooks/useCharacterInfo.js.map +0 -1
  149. package/dist/hooks/useConvaiClient.d.ts +0 -30
  150. package/dist/hooks/useConvaiClient.d.ts.map +0 -1
  151. package/dist/hooks/useConvaiClient.js +0 -349
  152. package/dist/hooks/useConvaiClient.js.map +0 -1
  153. package/dist/hooks/useDynamicInfoUpdater.d.ts +0 -33
  154. package/dist/hooks/useDynamicInfoUpdater.d.ts.map +0 -1
  155. package/dist/hooks/useDynamicInfoUpdater.js +0 -49
  156. package/dist/hooks/useDynamicInfoUpdater.js.map +0 -1
  157. package/dist/hooks/useLocalCameraTrack.d.ts +0 -22
  158. package/dist/hooks/useLocalCameraTrack.d.ts.map +0 -1
  159. package/dist/hooks/useLocalCameraTrack.js +0 -34
  160. package/dist/hooks/useLocalCameraTrack.js.map +0 -1
  161. package/dist/hooks/useMessageHandler.d.ts +0 -28
  162. package/dist/hooks/useMessageHandler.d.ts.map +0 -1
  163. package/dist/hooks/useMessageHandler.js +0 -267
  164. package/dist/hooks/useMessageHandler.js.map +0 -1
  165. package/dist/hooks/useScreenShare.d.ts +0 -45
  166. package/dist/hooks/useScreenShare.d.ts.map +0 -1
  167. package/dist/hooks/useScreenShare.js +0 -186
  168. package/dist/hooks/useScreenShare.js.map +0 -1
  169. package/dist/hooks/useTemplateKeysUpdater.d.ts +0 -35
  170. package/dist/hooks/useTemplateKeysUpdater.d.ts.map +0 -1
  171. package/dist/hooks/useTemplateKeysUpdater.js +0 -51
  172. package/dist/hooks/useTemplateKeysUpdater.js.map +0 -1
  173. package/dist/hooks/useTriggerMessageSender.d.ts +0 -28
  174. package/dist/hooks/useTriggerMessageSender.d.ts.map +0 -1
  175. package/dist/hooks/useTriggerMessageSender.js +0 -46
  176. package/dist/hooks/useTriggerMessageSender.js.map +0 -1
  177. package/dist/hooks/useTtsToggle.d.ts +0 -37
  178. package/dist/hooks/useTtsToggle.d.ts.map +0 -1
  179. package/dist/hooks/useTtsToggle.js +0 -63
  180. package/dist/hooks/useTtsToggle.js.map +0 -1
  181. package/dist/hooks/useUserTextMessageSender.d.ts +0 -28
  182. package/dist/hooks/useUserTextMessageSender.d.ts.map +0 -1
  183. package/dist/hooks/useUserTextMessageSender.js +0 -58
  184. package/dist/hooks/useUserTextMessageSender.js.map +0 -1
  185. package/dist/hooks/useVideoControls.d.ts +0 -39
  186. package/dist/hooks/useVideoControls.d.ts.map +0 -1
  187. package/dist/hooks/useVideoControls.js +0 -193
  188. package/dist/hooks/useVideoControls.js.map +0 -1
@@ -1,28 +0,0 @@
1
- import { Room } from "livekit-client";
2
- import { ChatMessage } from "../types";
3
- /**
4
- * Hook for handling incoming messages from Convai.
5
- *
6
- * Sets up data message listeners to process various message types
7
- * from the AI assistant and updates the chat message history.
8
- *
9
- * @param {Room} room - LiveKit room instance
10
- * @param {Function} setChatMessages - Function to update chat messages state
11
- * @returns {Function} Cleanup function to remove message listeners
12
- *
13
- * @example
14
- * ```tsx
15
- * function ChatComponent() {
16
- * const [chatMessages, setChatMessages] = useState([]);
17
- * const cleanup = useMessageHandler(room, setChatMessages);
18
- *
19
- * useEffect(() => {
20
- * return cleanup;
21
- * }, []);
22
- * }
23
- * ```
24
- */
25
- export declare const useMessageHandler: (room: Room, setChatMessages: React.Dispatch<React.SetStateAction<ChatMessage[]>>, onUserTranscription?: (text: string) => void, setIsBotResponding?: (responding: boolean) => void, isBotResponding?: boolean, setIsSpeaking?: (speaking: boolean) => void, onConnectionStateChange?: (isConnected: boolean) => void, setActivity?: (activity: string) => void, setIsBotReady?: (isReady: boolean) => void) => {
26
- setupMessageListener: () => (() => void) | undefined;
27
- };
28
- //# sourceMappingURL=useMessageHandler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMessageHandler.d.ts","sourceRoot":"","sources":["../../src/hooks/useMessageHandler.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAA8B,MAAM,gBAAgB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAGvC;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,eAAO,MAAM,iBAAiB,GAC5B,MAAM,IAAI,EACV,iBAAiB,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,CAAC,EACpE,sBAAsB,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,EAC5C,qBAAqB,CAAC,UAAU,EAAE,OAAO,KAAK,IAAI,EAClD,kBAAkB,OAAO,EACzB,gBAAgB,CAAC,QAAQ,EAAE,OAAO,KAAK,IAAI,EAC3C,0BAA0B,CAAC,WAAW,EAAE,OAAO,KAAK,IAAI,EACxD,cAAc,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,EACxC,gBAAgB,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI;;CA8Q3C,CAAC"}
@@ -1,267 +0,0 @@
1
- import { useCallback } from "react";
2
- import { RoomEvent } from "livekit-client";
3
- import { logger } from "../utils/logger";
4
- /**
5
- * Hook for handling incoming messages from Convai.
6
- *
7
- * Sets up data message listeners to process various message types
8
- * from the AI assistant and updates the chat message history.
9
- *
10
- * @param {Room} room - LiveKit room instance
11
- * @param {Function} setChatMessages - Function to update chat messages state
12
- * @returns {Function} Cleanup function to remove message listeners
13
- *
14
- * @example
15
- * ```tsx
16
- * function ChatComponent() {
17
- * const [chatMessages, setChatMessages] = useState([]);
18
- * const cleanup = useMessageHandler(room, setChatMessages);
19
- *
20
- * useEffect(() => {
21
- * return cleanup;
22
- * }, []);
23
- * }
24
- * ```
25
- */
26
- export const useMessageHandler = (room, setChatMessages, onUserTranscription, setIsBotResponding, isBotResponding, setIsSpeaking, onConnectionStateChange, setActivity, setIsBotReady) => {
27
- const handleDataReceived = useCallback((payload, participant) => {
28
- try {
29
- // Decode bytes to string
30
- const decoder = new TextDecoder();
31
- const messageString = decoder.decode(payload);
32
- // Parse JSON
33
- const messageData = JSON.parse(messageString);
34
- // Extract and categorize messages for chat display
35
- const timestamp = new Date().toISOString();
36
- const messageId = `${messageData.type}-${Date.now()}-${Math.random()}`;
37
- // Handle different message types
38
- switch (messageData.type) {
39
- // User text messages - Skip these, only allow user-transcription
40
- case "user_text_message":
41
- case "user-llm-text":
42
- case "text-input":
43
- case "user-input":
44
- case "text-message":
45
- case "chat-message":
46
- case "input-text":
47
- case "message":
48
- // Skip user text messages - only allow user-transcription
49
- break;
50
- // Bot Ready - Bot is ready, connection should be true
51
- case "bot-ready":
52
- // Set connection state to true when bot is ready
53
- if (onConnectionStateChange) {
54
- onConnectionStateChange(true);
55
- }
56
- // Set bot-ready state to true - bot can now receive messages
57
- if (setIsBotReady) {
58
- setIsBotReady(true);
59
- }
60
- // Update activity state
61
- if (setActivity) {
62
- setActivity("Connected");
63
- }
64
- break;
65
- // Bot LLM Started - Begin streaming response
66
- case "bot-llm-started":
67
- if (setIsBotResponding) {
68
- setIsBotResponding(true);
69
- }
70
- // Mark any accumulated user message as final before starting bot response
71
- setChatMessages((prevMessages) => {
72
- const lastMessage = prevMessages[prevMessages.length - 1];
73
- if (lastMessage && lastMessage.type === "user-transcription" && lastMessage.isFinal) {
74
- // Mark the last user message as no longer accumulating
75
- return [
76
- ...prevMessages.slice(0, -1),
77
- { ...lastMessage, isFinal: false }
78
- ];
79
- }
80
- return prevMessages;
81
- });
82
- // Add initial streaming message to chat
83
- const streamingMessage = {
84
- id: messageId,
85
- type: "bot-llm-text",
86
- content: "",
87
- timestamp: timestamp,
88
- isFinal: true,
89
- };
90
- setChatMessages((prev) => [...prev, streamingMessage]);
91
- break;
92
- // Bot LLM Text Messages - Streaming chunks
93
- case "bot-llm-text":
94
- if (messageData.data?.text) {
95
- const newChunk = messageData.data.text;
96
- // Update the streaming message in chat
97
- setChatMessages((prevMessages) => {
98
- const lastMessage = prevMessages[prevMessages.length - 1];
99
- if (lastMessage && lastMessage.isFinal) {
100
- return [
101
- ...prevMessages.slice(0, -1),
102
- { ...lastMessage, content: lastMessage.content + newChunk }
103
- ];
104
- }
105
- else {
106
- // If no streaming message exists yet, create one
107
- const streamingMessage = {
108
- id: `${messageData.type}-${Date.now()}-${Math.random()}`,
109
- type: "bot-llm-text",
110
- content: newChunk,
111
- timestamp: new Date().toISOString(),
112
- isFinal: true,
113
- };
114
- return [...prevMessages, streamingMessage];
115
- }
116
- });
117
- }
118
- break;
119
- // Bot LLM Stopped - Complete streaming response
120
- case "bot-llm-stopped":
121
- // Get the most up-to-date content from the current message in chat
122
- setChatMessages((prevMessages) => {
123
- const lastMessage = prevMessages[prevMessages.length - 1];
124
- if (lastMessage && lastMessage.isFinal) {
125
- const finalContent = lastMessage.content;
126
- return [
127
- ...prevMessages.slice(0, -1),
128
- { ...lastMessage, content: finalContent, isFinal: false }
129
- ];
130
- }
131
- return prevMessages;
132
- });
133
- // Clear streaming state
134
- if (setIsBotResponding) {
135
- setIsBotResponding(false);
136
- }
137
- break;
138
- // User Transcription Messages
139
- case "user-transcription":
140
- if (messageData.data?.text) {
141
- const messageContent = messageData.data.text;
142
- if (messageData.data?.final) {
143
- // Final transcription - accumulate in single bubble until bot responds
144
- setChatMessages((prev) => {
145
- const lastMessage = prev[prev.length - 1];
146
- // Check if last message is an accumulating user message (isFinal=true)
147
- if (lastMessage &&
148
- lastMessage.type === "user-transcription" &&
149
- lastMessage.isFinal === true) {
150
- // Accumulate: append new content to existing message with space
151
- const accumulatedContent = lastMessage.content.trim() + " " + messageContent.trim();
152
- return [
153
- ...prev.slice(0, -1),
154
- {
155
- ...lastMessage,
156
- content: accumulatedContent,
157
- timestamp: timestamp // Update timestamp to most recent
158
- }
159
- ];
160
- }
161
- else {
162
- // Start new accumulating message (isFinal=true means "still accumulating")
163
- const userMessage = {
164
- id: messageId,
165
- type: "user-transcription",
166
- content: messageContent,
167
- timestamp: timestamp,
168
- isFinal: true, // Mark as accumulating
169
- };
170
- return [...prev, userMessage];
171
- }
172
- });
173
- // Clear live transcription when final
174
- if (onUserTranscription) {
175
- onUserTranscription('');
176
- }
177
- }
178
- else {
179
- // Non-final transcription - show in input field
180
- if (onUserTranscription) {
181
- onUserTranscription(messageContent);
182
- }
183
- }
184
- }
185
- break;
186
- // Bot Emotion Messages
187
- case "bot-emotion":
188
- if (messageData.data?.emotion) {
189
- const emotionMessage = {
190
- id: messageId,
191
- type: "bot-emotion",
192
- content: `${messageData.data.emotion} (scale: ${messageData.data.scale || 1})`,
193
- timestamp,
194
- };
195
- setChatMessages((prev) => [...prev, emotionMessage]);
196
- }
197
- break;
198
- // Bot Started Speaking
199
- case "bot-started-speaking":
200
- if (setIsSpeaking) {
201
- setIsSpeaking(true);
202
- }
203
- break;
204
- // Bot Stopped Speaking
205
- case "bot-stopped-speaking":
206
- if (setIsSpeaking) {
207
- setIsSpeaking(false);
208
- }
209
- break;
210
- // Action Response Messages
211
- case "action-response":
212
- if (messageData.data?.actions) {
213
- const actionMessage = {
214
- id: messageId,
215
- type: "action",
216
- content: `Actions: ${messageData.data.actions.join(", ")}`,
217
- timestamp,
218
- };
219
- setChatMessages((prev) => [...prev, actionMessage]);
220
- }
221
- break;
222
- // Behavior Tree Response Messages
223
- case "behavior-tree-response":
224
- if (messageData.data?.narrative_section_id) {
225
- const behaviorMessage = {
226
- id: messageId,
227
- type: "behavior-tree",
228
- content: `Narrative Section: ${messageData.data.narrative_section_id}`,
229
- timestamp,
230
- };
231
- setChatMessages((prev) => [...prev, behaviorMessage]);
232
- }
233
- break;
234
- // Moderation Response Messages
235
- case "moderation-response":
236
- break;
237
- // Trigger Messages
238
- case "trigger-message":
239
- break;
240
- // Template Keys Updates
241
- case "update-template-keys":
242
- break;
243
- // Dynamic Info Updates
244
- case "update-dynamic-info":
245
- break;
246
- }
247
- // Silently ignore any unhandled message types
248
- }
249
- catch (error) {
250
- logger.error("Failed to parse data message:", error);
251
- }
252
- }, [setChatMessages, onUserTranscription, setIsBotResponding, isBotResponding, setIsSpeaking, onConnectionStateChange, setActivity]);
253
- const setupMessageListener = useCallback(() => {
254
- if (!room)
255
- return;
256
- // Listen for data received events
257
- room.on(RoomEvent.DataReceived, handleDataReceived);
258
- // Return cleanup function
259
- return () => {
260
- room.off(RoomEvent.DataReceived, handleDataReceived);
261
- };
262
- }, [room, handleDataReceived]);
263
- return {
264
- setupMessageListener,
265
- };
266
- };
267
- //# sourceMappingURL=useMessageHandler.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useMessageHandler.js","sourceRoot":"","sources":["../../src/hooks/useMessageHandler.ts"],"names":[],"mappings":"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"}
@@ -1,45 +0,0 @@
1
- import { Room } from "livekit-client";
2
- export interface ScreenShareControls {
3
- isScreenShareEnabled: boolean;
4
- isScreenShareActive: boolean;
5
- enableScreenShare: () => Promise<void>;
6
- disableScreenShare: () => Promise<void>;
7
- toggleScreenShare: () => Promise<void>;
8
- enableScreenShareWithAudio: () => Promise<void>;
9
- getScreenShareTracks: () => Promise<any[]>;
10
- }
11
- /**
12
- * Hook for managing screen sharing controls in LiveKit.
13
- *
14
- * Provides methods to enable/disable screen sharing, manage screen share state,
15
- * and handle screen sharing with audio support.
16
- *
17
- * Features:
18
- * - Includes current tab in screen share options (selfBrowserSurface: "include")
19
- * - Supports surface switching during screen share
20
- * - Supports system audio capture
21
- *
22
- * Note: By default, browsers exclude the current tab from screen share to prevent
23
- * infinite recursion ("hall of mirrors" effect). This hook enables it by setting
24
- * selfBrowserSurface: "include", but be aware this may cause visual feedback loops.
25
- *
26
- * @param {Room | null} room - LiveKit room instance
27
- * @returns {ScreenShareControls} Object containing screen share control methods and state
28
- *
29
- * @example
30
- * ```tsx
31
- * function ScreenShareControls() {
32
- * const screenShareControls = useScreenShare(room);
33
- *
34
- * return (
35
- * <div>
36
- * <button onClick={screenShareControls.toggleScreenShare}>
37
- * {screenShareControls.isScreenShareEnabled ? 'Stop Sharing' : 'Share Screen'}
38
- * </button>
39
- * </div>
40
- * );
41
- * }
42
- * ```
43
- */
44
- export declare const useScreenShare: (room: Room | null) => ScreenShareControls;
45
- //# sourceMappingURL=useScreenShare.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGtC,MAAM,WAAW,mBAAmB;IAElC,oBAAoB,EAAE,OAAO,CAAC;IAC9B,mBAAmB,EAAE,OAAO,CAAC;IAG7B,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,kBAAkB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,iBAAiB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGvC,0BAA0B,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAGhD,oBAAoB,EAAE,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;CAC5C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,cAAc,GAAI,MAAM,IAAI,GAAG,IAAI,KAAG,mBA0KlD,CAAC"}
@@ -1,186 +0,0 @@
1
- import { useCallback, useState, useEffect } from "react";
2
- import { logger } from "../utils/logger";
3
- /**
4
- * Hook for managing screen sharing controls in LiveKit.
5
- *
6
- * Provides methods to enable/disable screen sharing, manage screen share state,
7
- * and handle screen sharing with audio support.
8
- *
9
- * Features:
10
- * - Includes current tab in screen share options (selfBrowserSurface: "include")
11
- * - Supports surface switching during screen share
12
- * - Supports system audio capture
13
- *
14
- * Note: By default, browsers exclude the current tab from screen share to prevent
15
- * infinite recursion ("hall of mirrors" effect). This hook enables it by setting
16
- * selfBrowserSurface: "include", but be aware this may cause visual feedback loops.
17
- *
18
- * @param {Room | null} room - LiveKit room instance
19
- * @returns {ScreenShareControls} Object containing screen share control methods and state
20
- *
21
- * @example
22
- * ```tsx
23
- * function ScreenShareControls() {
24
- * const screenShareControls = useScreenShare(room);
25
- *
26
- * return (
27
- * <div>
28
- * <button onClick={screenShareControls.toggleScreenShare}>
29
- * {screenShareControls.isScreenShareEnabled ? 'Stop Sharing' : 'Share Screen'}
30
- * </button>
31
- * </div>
32
- * );
33
- * }
34
- * ```
35
- */
36
- export const useScreenShare = (room) => {
37
- const [isScreenShareEnabled, setIsScreenShareEnabled] = useState(false);
38
- const [isScreenShareActive, setIsScreenShareActive] = useState(false);
39
- // Update screen share state when room changes
40
- useEffect(() => {
41
- if (!room || room.state === 'disconnected') {
42
- setIsScreenShareEnabled(false);
43
- setIsScreenShareActive(false);
44
- return;
45
- }
46
- const localParticipant = room.localParticipant;
47
- // Set initial state
48
- setIsScreenShareEnabled(localParticipant.isScreenShareEnabled);
49
- setIsScreenShareActive(localParticipant.isScreenShareEnabled);
50
- // Listen for screen share state changes
51
- const handleTrackPublished = (track) => {
52
- if (track.source === 'screen_share') {
53
- setIsScreenShareActive(true);
54
- }
55
- };
56
- const handleTrackUnpublished = (track) => {
57
- if (track.source === 'screen_share') {
58
- setIsScreenShareActive(false);
59
- }
60
- };
61
- const handleTrackMuted = (track) => {
62
- if (track.source === 'screen_share') {
63
- setIsScreenShareActive(false);
64
- }
65
- };
66
- const handleTrackUnmuted = (track) => {
67
- if (track.source === 'screen_share') {
68
- setIsScreenShareActive(true);
69
- }
70
- };
71
- // Subscribe to events
72
- localParticipant.on('trackPublished', handleTrackPublished);
73
- localParticipant.on('trackUnpublished', handleTrackUnpublished);
74
- localParticipant.on('trackMuted', handleTrackMuted);
75
- localParticipant.on('trackUnmuted', handleTrackUnmuted);
76
- return () => {
77
- localParticipant.off('trackPublished', handleTrackPublished);
78
- localParticipant.off('trackUnpublished', handleTrackUnpublished);
79
- localParticipant.off('trackMuted', handleTrackMuted);
80
- localParticipant.off('trackUnmuted', handleTrackUnmuted);
81
- };
82
- }, [room, room?.state]);
83
- // Enable screen share
84
- const enableScreenShare = useCallback(async () => {
85
- if (!room) {
86
- return;
87
- }
88
- try {
89
- // Use setScreenShareEnabled with options to include current tab
90
- await room.localParticipant.setScreenShareEnabled(true, {
91
- // @ts-ignore - selfBrowserSurface is a valid Chrome option but may not be in types
92
- selfBrowserSurface: "include",
93
- surfaceSwitching: "include",
94
- systemAudio: "include",
95
- });
96
- setIsScreenShareEnabled(true);
97
- }
98
- catch (error) {
99
- logger.error("Failed to enable screen share:", error);
100
- throw error;
101
- }
102
- }, [room]);
103
- // Disable screen share
104
- const disableScreenShare = useCallback(async () => {
105
- if (!room) {
106
- return;
107
- }
108
- try {
109
- await room.localParticipant.setScreenShareEnabled(false);
110
- setIsScreenShareEnabled(false);
111
- }
112
- catch (error) {
113
- logger.error("Failed to disable screen share:", error);
114
- throw error;
115
- }
116
- }, [room]);
117
- // Toggle screen share
118
- const toggleScreenShare = useCallback(async () => {
119
- if (isScreenShareEnabled) {
120
- await disableScreenShare();
121
- }
122
- else {
123
- await enableScreenShare();
124
- }
125
- }, [isScreenShareEnabled, enableScreenShare, disableScreenShare]);
126
- // Enable screen share with audio
127
- const enableScreenShareWithAudio = useCallback(async () => {
128
- if (!room) {
129
- return;
130
- }
131
- try {
132
- // Create screen tracks with audio enabled and include current tab
133
- const tracks = await room.localParticipant.createScreenTracks({
134
- audio: true,
135
- // @ts-ignore - selfBrowserSurface is a valid Chrome option but may not be in types
136
- selfBrowserSurface: "include",
137
- surfaceSwitching: "include",
138
- systemAudio: "include",
139
- });
140
- // Publish each track
141
- tracks.forEach((track) => {
142
- room.localParticipant.publishTrack(track);
143
- });
144
- setIsScreenShareEnabled(true);
145
- }
146
- catch (error) {
147
- logger.error("Failed to enable screen share with audio:", error);
148
- throw error;
149
- }
150
- }, [room]);
151
- // Get screen share tracks
152
- const getScreenShareTracks = useCallback(async () => {
153
- if (!room) {
154
- return [];
155
- }
156
- try {
157
- const localParticipant = room.localParticipant;
158
- const screenShareTracks = [];
159
- // Get all published tracks
160
- localParticipant.trackPublications.forEach((publication) => {
161
- if (publication.source === 'screen_share' && publication.track) {
162
- screenShareTracks.push(publication.track);
163
- }
164
- });
165
- return screenShareTracks;
166
- }
167
- catch (error) {
168
- logger.error("Failed to get screen share tracks:", error);
169
- throw error;
170
- }
171
- }, [room]);
172
- return {
173
- // Screen share state
174
- isScreenShareEnabled,
175
- isScreenShareActive,
176
- // Screen share controls
177
- enableScreenShare,
178
- disableScreenShare,
179
- toggleScreenShare,
180
- // Screen share with audio
181
- enableScreenShareWithAudio,
182
- // Screen share settings
183
- getScreenShareTracks,
184
- };
185
- };
186
- //# sourceMappingURL=useScreenShare.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useScreenShare.js","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- import { Room } from "livekit-client";
2
- export interface TemplateKeys {
3
- [key: string]: string;
4
- }
5
- /**
6
- * Hook for updating template keys in Convai.
7
- *
8
- * Updates dynamic template variables that can be used in AI responses
9
- * to provide personalized and contextual information.
10
- *
11
- * @param {Room} room - LiveKit room instance
12
- * @param {string} participantSid - Participant session ID
13
- * @returns {Object} Object containing updateTemplateKeys function
14
- *
15
- * @example
16
- * ```tsx
17
- * function TemplateComponent() {
18
- * const { updateTemplateKeys } = useTemplateKeysUpdater(room, participantSid);
19
- *
20
- * const handleUpdate = () => {
21
- * updateTemplateKeys({
22
- * user_name: "John",
23
- * location: "New York",
24
- * mood: "happy"
25
- * });
26
- * };
27
- *
28
- * return <button onClick={handleUpdate}>Update Templates</button>;
29
- * }
30
- * ```
31
- */
32
- export declare const useTemplateKeysUpdater: (room: Room, participantSid: string) => {
33
- updateTemplateKeys: (templateKeys: TemplateKeys) => void;
34
- };
35
- //# sourceMappingURL=useTemplateKeysUpdater.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTemplateKeysUpdater.d.ts","sourceRoot":"","sources":["../../src/hooks/useTemplateKeysUpdater.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAGtC,MAAM,WAAW,YAAY;IAC3B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CACvB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,eAAO,MAAM,sBAAsB,GACjC,MAAM,IAAI,EACV,gBAAgB,MAAM;uCAGL,YAAY;CA0B9B,CAAC"}
@@ -1,51 +0,0 @@
1
- import { useCallback } from "react";
2
- /**
3
- * Hook for updating template keys in Convai.
4
- *
5
- * Updates dynamic template variables that can be used in AI responses
6
- * to provide personalized and contextual information.
7
- *
8
- * @param {Room} room - LiveKit room instance
9
- * @param {string} participantSid - Participant session ID
10
- * @returns {Object} Object containing updateTemplateKeys function
11
- *
12
- * @example
13
- * ```tsx
14
- * function TemplateComponent() {
15
- * const { updateTemplateKeys } = useTemplateKeysUpdater(room, participantSid);
16
- *
17
- * const handleUpdate = () => {
18
- * updateTemplateKeys({
19
- * user_name: "John",
20
- * location: "New York",
21
- * mood: "happy"
22
- * });
23
- * };
24
- *
25
- * return <button onClick={handleUpdate}>Update Templates</button>;
26
- * }
27
- * ```
28
- */
29
- export const useTemplateKeysUpdater = (room, participantSid) => {
30
- const updateTemplateKeys = useCallback((templateKeys) => {
31
- if (room &&
32
- room.localParticipant &&
33
- Object.keys(templateKeys).length > 0) {
34
- const message = {
35
- type: "update-template-keys",
36
- data: {
37
- template_keys: templateKeys,
38
- participant_sid: participantSid || room.localParticipant.sid,
39
- },
40
- };
41
- const encodedData = new TextEncoder().encode(JSON.stringify(message));
42
- room.localParticipant.publishData(encodedData, {
43
- reliable: true,
44
- });
45
- }
46
- }, [room, participantSid]);
47
- return {
48
- updateTemplateKeys,
49
- };
50
- };
51
- //# sourceMappingURL=useTemplateKeysUpdater.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useTemplateKeysUpdater.js","sourceRoot":"","sources":["../../src/hooks/useTemplateKeysUpdater.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAQpC;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,IAAU,EACV,cAAsB,EACtB,EAAE;IACF,MAAM,kBAAkB,GAAG,WAAW,CACpC,CAAC,YAA0B,EAAE,EAAE;QAC7B,IACE,IAAI;YACJ,IAAI,CAAC,gBAAgB;YACrB,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,CAAC,EACpC,CAAC;YACD,MAAM,OAAO,GAAG;gBACd,IAAI,EAAE,sBAAsB;gBAC5B,IAAI,EAAE;oBACJ,aAAa,EAAE,YAAY;oBAC3B,eAAe,EAAE,cAAc,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG;iBAC7D;aACF,CAAC;YAEF,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;YACtE,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,WAAW,EAAE;gBAC7C,QAAQ,EAAE,IAAI;aACf,CAAC,CAAC;QACL,CAAC;IACH,CAAC,EACD,CAAC,IAAI,EAAE,cAAc,CAAC,CACvB,CAAC;IAEF,OAAO;QACL,kBAAkB;KACnB,CAAC;AACJ,CAAC,CAAC"}