@wix/legends-platform-sdk 1.16.0 → 1.18.0

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.
package/README.md CHANGED
@@ -16,24 +16,23 @@ The SDK exposes two entry points:
16
16
 
17
17
  | Entry point | What's inside |
18
18
  |---|---|
19
- | `@wix/legends-platform-sdk` | Types, hooks for text chat and conversation state (`useTextChat`, `useConversationEvents`, `useMicrophone`, `useSpeaker`, `useCamera`, etc.) |
19
+ | `@wix/legends-platform-sdk` | Types and server-safe hooks (`useTextChat`, `useConversationEvents`, `useMicrophone`, `useSpeaker`, `useCamera`, etc.) — no LiveKit dependency |
20
20
  | `@wix/legends-platform-sdk/livekit/sdk` | Everything above **+** `LegendsPlatform`, `useConversation`, `useScreenShare`, `useParticipantTrack`, `useSpeechActivityDetector`, `useAudioLevel` |
21
21
 
22
- Use the main entry when you only need types or non-livekit hooks (e.g. in server-side code or Jest tests). Use `livekit/sdk` for React components and hooks that require an active LiveKit room.
22
+ Use the main entry when you only need types or hooks without a LiveKit room (e.g. server-side code or Jest tests). Use `livekit/sdk` for React components and live conversation hooks.
23
23
 
24
24
  ---
25
25
 
26
26
  ## Quick Start
27
27
 
28
- Store the raw namespace API key returned by MCP onboarding in `.env.local`:
28
+ Get a namespace API key from the Legends Platform team, then store it in `.env.local`:
29
29
 
30
30
  ```bash
31
- VITE_LEGENDS_NAMESPACE=your-namespace
32
- VITE_LEGENDS_API_KEY=lp_your_raw_api_key
33
- VITE_LEGENDS_CHAT_ID=your-chat-id
31
+ LEGENDS_API_KEY=lp_your_raw_api_key
32
+ LEGENDS_CHAT_ID=your-chat-id
34
33
  ```
35
34
 
36
- Wrap your app with `LegendsPlatform` and pass those values:
35
+ Wrap your app with `LegendsPlatform`. External apps use `HEADLESS` as the namespace value:
37
36
 
38
37
  ```tsx
39
38
  import { LegendsPlatform, useConversation, useMicrophone } from '@wix/legends-platform-sdk/livekit/sdk';
@@ -61,9 +60,9 @@ function VoiceButton() {
61
60
  export default function App() {
62
61
  return (
63
62
  <LegendsPlatform
64
- chatId={import.meta.env.VITE_LEGENDS_CHAT_ID}
65
- namespace={import.meta.env.VITE_LEGENDS_NAMESPACE}
66
- apiKey={import.meta.env.VITE_LEGENDS_API_KEY}
63
+ chatId="your-chat-id"
64
+ namespace="HEADLESS"
65
+ apiKey="lp_your_api_key"
67
66
  >
68
67
  <VoiceButton />
69
68
  </LegendsPlatform>
@@ -81,15 +80,14 @@ The root context provider. Must wrap all SDK hooks and components.
81
80
  |------|------|-------------|
82
81
  | `chatId` | `string` | Required. The chat instance ID |
83
82
  | `namespace` | `string` | Required. Your namespace |
84
- | `apiKey` | `string` | API key for authentication (external apps) |
85
- | `personaChatService` | `IPersonaChatService` | Custom service implementation (advanced) |
83
+ | `apiKey` | `string` | Raw namespace API key pass `lp_...` as-is, the SDK sends it as `Authorization: Api-Key <token>` |
84
+ | `personaChatService` | `IPersonaChatService` | Custom service for advanced use cases (see below) |
85
+ | `tools` | `ToolsRegistry` | Optional client-side tool handlers |
86
86
  | `queryClient` | `QueryClient` | Optional TanStack Query client |
87
87
  | `children` | `ReactNode` | Required |
88
88
 
89
89
  Either `apiKey` or `personaChatService` must be provided.
90
90
 
91
- Pass the raw namespace key as `apiKey`, for example `lp_...`. The SDK sends it as `Authorization: Api-Key <token>`.
92
-
93
91
  ---
94
92
 
95
93
  ### Hooks
@@ -139,6 +137,21 @@ const { messages, status, send, fetchNext } = useTextChat();
139
137
  await send({ message: 'Hello' });
140
138
  ```
141
139
 
140
+ #### `useTextChatStream(options)`
141
+
142
+ Streaming counterpart to `useTextChat`. Sends messages over SSE and drips the assistant reply into `streamingText` at a steady rate via `requestAnimationFrame`.
143
+
144
+ ```tsx
145
+ const { messages, status, send } = useTextChatStream({
146
+ onError: (err) => console.error(err),
147
+ revealMsPerChar: 16, // ms per character, default 16 (~62 chars/s)
148
+ });
149
+
150
+ // messages[n].streamStatus === 'streaming' while the reply is in-flight
151
+ const result = await send({ message: 'Hello' });
152
+ // result: { ok: boolean, producedContent: boolean, aborted: boolean }
153
+ ```
154
+
142
155
  #### `useConversationStatus()`
143
156
 
144
157
  ```tsx
@@ -155,10 +168,10 @@ const { elapsed, remaining } = useConversationTimer();
155
168
 
156
169
  #### `useTools()`
157
170
 
158
- Read the list of tool calls executed by the SDK. To register tool handlers, pass a `tools` registry to `LegendsPlatform`.
171
+ Observe client-side tool calls executed by the SDK. Register tool handlers by passing a `tools` registry to `LegendsPlatform`.
159
172
 
160
173
  ```tsx
161
- import { LegendsPlatform, useTools, type ToolsRegistry } from '@wix/legends-platform-sdk';
174
+ import { LegendsPlatform, useTools, type ToolsRegistry } from '@wix/legends-platform-sdk/livekit/sdk';
162
175
 
163
176
  const tools: ToolsRegistry = {
164
177
  get_weather: async ({ city }) => {
@@ -172,25 +185,14 @@ function ToolLog() {
172
185
  return <pre>{JSON.stringify(calls, null, 2)}</pre>;
173
186
  }
174
187
 
175
- return (
176
- <LegendsPlatform ... tools={tools}>
177
- <ToolLog />
178
- </LegendsPlatform>
179
- );
180
- ```
181
-
182
- #### `useTextChatStream(options)`
183
-
184
- Streaming counterpart to `useTextChat`. Sends messages over SSE and drips the assistant reply into `streamingText` at a steady rate via `requestAnimationFrame`.
185
-
186
- ```tsx
187
- const { messages, send } = useTextChatStream({
188
- streamUrl: '/api/chat/stream',
189
- onError: (err) => console.error(err),
190
- });
191
-
192
- // messages[n].streamStatus === 'streaming' while the reply is in-flight
193
- await send({ message: 'Hello' });
188
+ <LegendsPlatform
189
+ chatId="your-chat-id"
190
+ namespace="HEADLESS"
191
+ apiKey="lp_your_api_key"
192
+ tools={tools}
193
+ >
194
+ <ToolLog />
195
+ </LegendsPlatform>
194
196
  ```
195
197
 
196
198
  #### `useSpeechActivityDetector(options)`
@@ -211,21 +213,25 @@ useSpeechActivityDetector({
211
213
 
212
214
  ## Advanced: Custom Service
213
215
 
214
- For advanced use cases, inject a custom `IPersonaChatService` instead of using `apiKey`:
216
+ For advanced integration, inject a custom `IPersonaChatService` instead of `apiKey`. Your implementation owns authentication and must forward valid credentials on every request.
215
217
 
216
218
  ```tsx
217
219
  import { LegendsPlatform } from '@wix/legends-platform-sdk/livekit/sdk';
218
220
  import type { IPersonaChatService } from '@wix/legends-platform-sdk';
219
221
 
220
222
  const myService: IPersonaChatService = {
221
- async createVoiceConversation(params) { ... },
222
- async createInteractiveConversation(params) { ... },
223
- async endInteractiveConversation(params) { ... },
224
- async sendChatMessage(params) { ... },
225
- async queryChatMessages(params) { ... },
223
+ async createVoiceConversation(params) { /* ... */ },
224
+ async createInteractiveConversation(params) { /* ... */ },
225
+ async endInteractiveConversation(params) { /* ... */ },
226
+ async sendChatMessage(params) { /* ... */ },
227
+ async queryChatMessages(params) { /* ... */ },
226
228
  };
227
229
 
228
- <LegendsPlatform personaChatService={myService} ...>
230
+ <LegendsPlatform
231
+ chatId="your-chat-id"
232
+ namespace="your-namespace"
233
+ personaChatService={myService}
234
+ >
229
235
  ...
230
236
  </LegendsPlatform>
231
237
  ```
@@ -88,12 +88,10 @@ function useConversation(options) {
88
88
  setUserLastActivity(Date.now());
89
89
  }
90
90
  function agentVideoLoaded() {
91
- setJoinedAt(new Date());
91
+ setJoinedAt(joined => joined ?? new Date());
92
92
  }
93
93
  function agentJoined() {
94
- if (type === 'audio') {
95
- setJoinedAt(new Date());
96
- }
94
+ setJoinedAt(joined => joined ?? new Date());
97
95
  }
98
96
  }
99
97
  //# sourceMappingURL=useConversation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_jotai","require","_reactUse","state","_interopRequireWildcard","_sdkConsumer","_useConversation","_useConversationEvents","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useConversation","options","type","chatId","namespace","useSdkConsumer","setConversationStatus","useSetAtom","conversationStatus","setUserConnectionState","userConnectionState","setUserActivityState","userActivityState","setAgentConnectionState","agentConnectionState","setAgentActivityState","agentActivityState","setConversation","conversation","setTranscriptions","transcriptions","setJoinedAt","joinedAt","userLastActivity","setUserLastActivity","useAtom","setUserInactivityDuration","userInactivityDuration","useUnmount","cleanup","useUpdateEffect","useInterval","Date","now","Error","useConversationEvents","userSpeakStart","userSpeakStop","agentSpeakStart","agentSpeakStop","responseLatency","userSendMessage","callStarted","agentVideoLoaded","agentJoined","useLivekitConversation","undefined","_payload"],"sources":["../../../../src/hooks/useConversation/useConversation.ts"],"sourcesContent":["import { useSetAtom, useAtom } from 'jotai';\nimport { useUpdateEffect, useUnmount, useInterval } from 'react-use';\n\nimport * as state from '../../conversation/state';\nimport { useSdkConsumer } from '../../sdk-consumer';\n\nimport { useConversation as useLivekitConversation } from './livekit/useConversation';\n\nimport {\n useConversationEvents,\n type UserSpeakStartPayload,\n type UserSpeakStopPayload,\n type AgentSpeakStartPayload,\n type AgentSpeakStopPayload,\n type ResponseLatencyPayload,\n} from '../useConversationEvents';\nimport type { UseConversationResult, UseConversationOptions } from './types';\n\ntype BiEventPayload =\n | UserSpeakStartPayload\n | UserSpeakStopPayload\n | AgentSpeakStartPayload\n | AgentSpeakStopPayload;\n\nexport function useConversation(\n options: UseConversationOptions,\n): UseConversationResult {\n const { type } = options;\n const { chatId, namespace } = useSdkConsumer();\n\n const setConversationStatus = useSetAtom(state.conversationStatus);\n const setUserConnectionState = useSetAtom(state.userConnectionState);\n const setUserActivityState = useSetAtom(state.userActivityState);\n const setAgentConnectionState = useSetAtom(state.agentConnectionState);\n const setAgentActivityState = useSetAtom(state.agentActivityState);\n const setConversation = useSetAtom(state.conversation);\n const setTranscriptions = useSetAtom(state.transcriptions);\n const setJoinedAt = useSetAtom(state.joinedAt);\n const [userLastActivity, setUserLastActivity] = useAtom(\n state.userLastActivity,\n );\n const setUserInactivityDuration = useSetAtom(state.userInactivityDuration);\n\n useUnmount(cleanup);\n\n useUpdateEffect(() => {\n cleanup();\n }, [chatId, namespace]);\n\n useInterval(() => {\n if (!userLastActivity) {\n return;\n }\n setUserInactivityDuration(Date.now() - userLastActivity);\n }, 1000);\n\n useUpdateEffect(() => {\n throw new Error(\n 'Conversation type & vendor cannot be changed once are set',\n );\n }, [type]);\n\n useConversationEvents({\n userSpeakStart,\n userSpeakStop,\n agentSpeakStart,\n agentSpeakStop,\n responseLatency,\n userSendMessage,\n callStarted,\n agentVideoLoaded,\n agentJoined,\n });\n\n return useLivekitConversation(options);\n\n function cleanup() {\n setConversationStatus('pending');\n setUserConnectionState('idle');\n setUserActivityState('idle');\n setAgentConnectionState('idle');\n setAgentActivityState('idle');\n setTranscriptions([]);\n setConversation(undefined);\n setJoinedAt(undefined);\n setUserLastActivity(null);\n setUserInactivityDuration(0);\n }\n\n // Conversation Events\n function responseLatency(_payload: ResponseLatencyPayload) {\n // BI logging handled by private impl (IBILogger interface — coming soon)\n }\n function userSpeakStart(_payload: BiEventPayload) {\n setUserLastActivity(Date.now());\n }\n function userSpeakStop(_payload: BiEventPayload) {\n setUserLastActivity(Date.now());\n }\n function agentSpeakStart(_payload: BiEventPayload) {\n // no-op\n }\n function agentSpeakStop(_payload: BiEventPayload) {\n // no-op\n }\n function userSendMessage() {\n setUserLastActivity(Date.now());\n }\n function callStarted() {\n setUserLastActivity(Date.now());\n }\n function agentVideoLoaded() {\n setJoinedAt(new Date());\n }\n\n function agentJoined() {\n if (type === 'audio') {\n setJoinedAt(new Date());\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_jotai","require","_reactUse","state","_interopRequireWildcard","_sdkConsumer","_useConversation","_useConversationEvents","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useConversation","options","type","chatId","namespace","useSdkConsumer","setConversationStatus","useSetAtom","conversationStatus","setUserConnectionState","userConnectionState","setUserActivityState","userActivityState","setAgentConnectionState","agentConnectionState","setAgentActivityState","agentActivityState","setConversation","conversation","setTranscriptions","transcriptions","setJoinedAt","joinedAt","userLastActivity","setUserLastActivity","useAtom","setUserInactivityDuration","userInactivityDuration","useUnmount","cleanup","useUpdateEffect","useInterval","Date","now","Error","useConversationEvents","userSpeakStart","userSpeakStop","agentSpeakStart","agentSpeakStop","responseLatency","userSendMessage","callStarted","agentVideoLoaded","agentJoined","useLivekitConversation","undefined","_payload","joined"],"sources":["../../../../src/hooks/useConversation/useConversation.ts"],"sourcesContent":["import { useSetAtom, useAtom } from 'jotai';\nimport { useUpdateEffect, useUnmount, useInterval } from 'react-use';\n\nimport * as state from '../../conversation/state';\nimport { useSdkConsumer } from '../../sdk-consumer';\n\nimport { useConversation as useLivekitConversation } from './livekit/useConversation';\n\nimport {\n useConversationEvents,\n type UserSpeakStartPayload,\n type UserSpeakStopPayload,\n type AgentSpeakStartPayload,\n type AgentSpeakStopPayload,\n type ResponseLatencyPayload,\n} from '../useConversationEvents';\nimport type { UseConversationResult, UseConversationOptions } from './types';\n\ntype BiEventPayload =\n | UserSpeakStartPayload\n | UserSpeakStopPayload\n | AgentSpeakStartPayload\n | AgentSpeakStopPayload;\n\nexport function useConversation(\n options: UseConversationOptions,\n): UseConversationResult {\n const { type } = options;\n const { chatId, namespace } = useSdkConsumer();\n\n const setConversationStatus = useSetAtom(state.conversationStatus);\n const setUserConnectionState = useSetAtom(state.userConnectionState);\n const setUserActivityState = useSetAtom(state.userActivityState);\n const setAgentConnectionState = useSetAtom(state.agentConnectionState);\n const setAgentActivityState = useSetAtom(state.agentActivityState);\n const setConversation = useSetAtom(state.conversation);\n const setTranscriptions = useSetAtom(state.transcriptions);\n const setJoinedAt = useSetAtom(state.joinedAt);\n const [userLastActivity, setUserLastActivity] = useAtom(\n state.userLastActivity,\n );\n const setUserInactivityDuration = useSetAtom(state.userInactivityDuration);\n\n useUnmount(cleanup);\n\n useUpdateEffect(() => {\n cleanup();\n }, [chatId, namespace]);\n\n useInterval(() => {\n if (!userLastActivity) {\n return;\n }\n setUserInactivityDuration(Date.now() - userLastActivity);\n }, 1000);\n\n useUpdateEffect(() => {\n throw new Error(\n 'Conversation type & vendor cannot be changed once are set',\n );\n }, [type]);\n\n useConversationEvents({\n userSpeakStart,\n userSpeakStop,\n agentSpeakStart,\n agentSpeakStop,\n responseLatency,\n userSendMessage,\n callStarted,\n agentVideoLoaded,\n agentJoined,\n });\n\n return useLivekitConversation(options);\n\n function cleanup() {\n setConversationStatus('pending');\n setUserConnectionState('idle');\n setUserActivityState('idle');\n setAgentConnectionState('idle');\n setAgentActivityState('idle');\n setTranscriptions([]);\n setConversation(undefined);\n setJoinedAt(undefined);\n setUserLastActivity(null);\n setUserInactivityDuration(0);\n }\n\n // Conversation Events\n function responseLatency(_payload: ResponseLatencyPayload) {\n // BI logging handled by private impl (IBILogger interface — coming soon)\n }\n function userSpeakStart(_payload: BiEventPayload) {\n setUserLastActivity(Date.now());\n }\n function userSpeakStop(_payload: BiEventPayload) {\n setUserLastActivity(Date.now());\n }\n function agentSpeakStart(_payload: BiEventPayload) {\n // no-op\n }\n function agentSpeakStop(_payload: BiEventPayload) {\n // no-op\n }\n function userSendMessage() {\n setUserLastActivity(Date.now());\n }\n function callStarted() {\n setUserLastActivity(Date.now());\n }\n function agentVideoLoaded() {\n setJoinedAt((joined) => joined ?? new Date());\n }\n\n function agentJoined() {\n setJoinedAt((joined) => joined ?? new Date());\n }\n}\n"],"mappings":";;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AAEA,IAAAE,KAAA,GAAAC,uBAAA,CAAAH,OAAA;AACA,IAAAI,YAAA,GAAAJ,OAAA;AAEA,IAAAK,gBAAA,GAAAL,OAAA;AAEA,IAAAM,sBAAA,GAAAN,OAAA;AAOkC,SAAAG,wBAAAI,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAN,uBAAA,YAAAA,CAAAI,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAS3B,SAASkB,eAAeA,CAC7BC,OAA+B,EACR;EACvB,MAAM;IAAEC;EAAK,CAAC,GAAGD,OAAO;EACxB,MAAM;IAAEE,MAAM;IAAEC;EAAU,CAAC,GAAG,IAAAC,2BAAc,EAAC,CAAC;EAE9C,MAAMC,qBAAqB,GAAG,IAAAC,iBAAU,EAAC/B,KAAK,CAACgC,kBAAkB,CAAC;EAClE,MAAMC,sBAAsB,GAAG,IAAAF,iBAAU,EAAC/B,KAAK,CAACkC,mBAAmB,CAAC;EACpE,MAAMC,oBAAoB,GAAG,IAAAJ,iBAAU,EAAC/B,KAAK,CAACoC,iBAAiB,CAAC;EAChE,MAAMC,uBAAuB,GAAG,IAAAN,iBAAU,EAAC/B,KAAK,CAACsC,oBAAoB,CAAC;EACtE,MAAMC,qBAAqB,GAAG,IAAAR,iBAAU,EAAC/B,KAAK,CAACwC,kBAAkB,CAAC;EAClE,MAAMC,eAAe,GAAG,IAAAV,iBAAU,EAAC/B,KAAK,CAAC0C,YAAY,CAAC;EACtD,MAAMC,iBAAiB,GAAG,IAAAZ,iBAAU,EAAC/B,KAAK,CAAC4C,cAAc,CAAC;EAC1D,MAAMC,WAAW,GAAG,IAAAd,iBAAU,EAAC/B,KAAK,CAAC8C,QAAQ,CAAC;EAC9C,MAAM,CAACC,gBAAgB,EAAEC,mBAAmB,CAAC,GAAG,IAAAC,cAAO,EACrDjD,KAAK,CAAC+C,gBACR,CAAC;EACD,MAAMG,yBAAyB,GAAG,IAAAnB,iBAAU,EAAC/B,KAAK,CAACmD,sBAAsB,CAAC;EAE1E,IAAAC,oBAAU,EAACC,OAAO,CAAC;EAEnB,IAAAC,yBAAe,EAAC,MAAM;IACpBD,OAAO,CAAC,CAAC;EACX,CAAC,EAAE,CAAC1B,MAAM,EAAEC,SAAS,CAAC,CAAC;EAEvB,IAAA2B,qBAAW,EAAC,MAAM;IAChB,IAAI,CAACR,gBAAgB,EAAE;MACrB;IACF;IACAG,yBAAyB,CAACM,IAAI,CAACC,GAAG,CAAC,CAAC,GAAGV,gBAAgB,CAAC;EAC1D,CAAC,EAAE,IAAI,CAAC;EAER,IAAAO,yBAAe,EAAC,MAAM;IACpB,MAAM,IAAII,KAAK,CACb,2DACF,CAAC;EACH,CAAC,EAAE,CAAChC,IAAI,CAAC,CAAC;EAEV,IAAAiC,4CAAqB,EAAC;IACpBC,cAAc;IACdC,aAAa;IACbC,eAAe;IACfC,cAAc;IACdC,eAAe;IACfC,eAAe;IACfC,WAAW;IACXC,gBAAgB;IAChBC;EACF,CAAC,CAAC;EAEF,OAAO,IAAAC,gCAAsB,EAAC5C,OAAO,CAAC;EAEtC,SAAS4B,OAAOA,CAAA,EAAG;IACjBvB,qBAAqB,CAAC,SAAS,CAAC;IAChCG,sBAAsB,CAAC,MAAM,CAAC;IAC9BE,oBAAoB,CAAC,MAAM,CAAC;IAC5BE,uBAAuB,CAAC,MAAM,CAAC;IAC/BE,qBAAqB,CAAC,MAAM,CAAC;IAC7BI,iBAAiB,CAAC,EAAE,CAAC;IACrBF,eAAe,CAAC6B,SAAS,CAAC;IAC1BzB,WAAW,CAACyB,SAAS,CAAC;IACtBtB,mBAAmB,CAAC,IAAI,CAAC;IACzBE,yBAAyB,CAAC,CAAC,CAAC;EAC9B;;EAEA;EACA,SAASc,eAAeA,CAACO,QAAgC,EAAE;IACzD;EAAA;EAEF,SAASX,cAAcA,CAACW,QAAwB,EAAE;IAChDvB,mBAAmB,CAACQ,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;EACjC;EACA,SAASI,aAAaA,CAACU,QAAwB,EAAE;IAC/CvB,mBAAmB,CAACQ,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;EACjC;EACA,SAASK,eAAeA,CAACS,QAAwB,EAAE;IACjD;EAAA;EAEF,SAASR,cAAcA,CAACQ,QAAwB,EAAE;IAChD;EAAA;EAEF,SAASN,eAAeA,CAAA,EAAG;IACzBjB,mBAAmB,CAACQ,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;EACjC;EACA,SAASS,WAAWA,CAAA,EAAG;IACrBlB,mBAAmB,CAACQ,IAAI,CAACC,GAAG,CAAC,CAAC,CAAC;EACjC;EACA,SAASU,gBAAgBA,CAAA,EAAG;IAC1BtB,WAAW,CAAE2B,MAAM,IAAKA,MAAM,IAAI,IAAIhB,IAAI,CAAC,CAAC,CAAC;EAC/C;EAEA,SAASY,WAAWA,CAAA,EAAG;IACrBvB,WAAW,CAAE2B,MAAM,IAAKA,MAAM,IAAI,IAAIhB,IAAI,CAAC,CAAC,CAAC;EAC/C;AACF","ignoreList":[]}
@@ -82,12 +82,10 @@ export function useConversation(options) {
82
82
  setUserLastActivity(Date.now());
83
83
  }
84
84
  function agentVideoLoaded() {
85
- setJoinedAt(new Date());
85
+ setJoinedAt(joined => joined ?? new Date());
86
86
  }
87
87
  function agentJoined() {
88
- if (type === 'audio') {
89
- setJoinedAt(new Date());
90
- }
88
+ setJoinedAt(joined => joined ?? new Date());
91
89
  }
92
90
  }
93
91
  //# sourceMappingURL=useConversation.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["useSetAtom","useAtom","useUpdateEffect","useUnmount","useInterval","state","useSdkConsumer","useConversation","useLivekitConversation","useConversationEvents","options","type","_useSdkConsumer","chatId","namespace","setConversationStatus","conversationStatus","setUserConnectionState","userConnectionState","setUserActivityState","userActivityState","setAgentConnectionState","agentConnectionState","setAgentActivityState","agentActivityState","setConversation","conversation","setTranscriptions","transcriptions","setJoinedAt","joinedAt","_useAtom","userLastActivity","setUserLastActivity","setUserInactivityDuration","userInactivityDuration","cleanup","Date","now","Error","userSpeakStart","userSpeakStop","agentSpeakStart","agentSpeakStop","responseLatency","userSendMessage","callStarted","agentVideoLoaded","agentJoined","undefined","_payload"],"sources":["../../../../src/hooks/useConversation/useConversation.ts"],"sourcesContent":["import { useSetAtom, useAtom } from 'jotai';\nimport { useUpdateEffect, useUnmount, useInterval } from 'react-use';\n\nimport * as state from '../../conversation/state';\nimport { useSdkConsumer } from '../../sdk-consumer';\n\nimport { useConversation as useLivekitConversation } from './livekit/useConversation';\n\nimport {\n useConversationEvents,\n type UserSpeakStartPayload,\n type UserSpeakStopPayload,\n type AgentSpeakStartPayload,\n type AgentSpeakStopPayload,\n type ResponseLatencyPayload,\n} from '../useConversationEvents';\nimport type { UseConversationResult, UseConversationOptions } from './types';\n\ntype BiEventPayload =\n | UserSpeakStartPayload\n | UserSpeakStopPayload\n | AgentSpeakStartPayload\n | AgentSpeakStopPayload;\n\nexport function useConversation(\n options: UseConversationOptions,\n): UseConversationResult {\n const { type } = options;\n const { chatId, namespace } = useSdkConsumer();\n\n const setConversationStatus = useSetAtom(state.conversationStatus);\n const setUserConnectionState = useSetAtom(state.userConnectionState);\n const setUserActivityState = useSetAtom(state.userActivityState);\n const setAgentConnectionState = useSetAtom(state.agentConnectionState);\n const setAgentActivityState = useSetAtom(state.agentActivityState);\n const setConversation = useSetAtom(state.conversation);\n const setTranscriptions = useSetAtom(state.transcriptions);\n const setJoinedAt = useSetAtom(state.joinedAt);\n const [userLastActivity, setUserLastActivity] = useAtom(\n state.userLastActivity,\n );\n const setUserInactivityDuration = useSetAtom(state.userInactivityDuration);\n\n useUnmount(cleanup);\n\n useUpdateEffect(() => {\n cleanup();\n }, [chatId, namespace]);\n\n useInterval(() => {\n if (!userLastActivity) {\n return;\n }\n setUserInactivityDuration(Date.now() - userLastActivity);\n }, 1000);\n\n useUpdateEffect(() => {\n throw new Error(\n 'Conversation type & vendor cannot be changed once are set',\n );\n }, [type]);\n\n useConversationEvents({\n userSpeakStart,\n userSpeakStop,\n agentSpeakStart,\n agentSpeakStop,\n responseLatency,\n userSendMessage,\n callStarted,\n agentVideoLoaded,\n agentJoined,\n });\n\n return useLivekitConversation(options);\n\n function cleanup() {\n setConversationStatus('pending');\n setUserConnectionState('idle');\n setUserActivityState('idle');\n setAgentConnectionState('idle');\n setAgentActivityState('idle');\n setTranscriptions([]);\n setConversation(undefined);\n setJoinedAt(undefined);\n setUserLastActivity(null);\n setUserInactivityDuration(0);\n }\n\n // Conversation Events\n function responseLatency(_payload: ResponseLatencyPayload) {\n // BI logging handled by private impl (IBILogger interface — coming soon)\n }\n function userSpeakStart(_payload: BiEventPayload) {\n setUserLastActivity(Date.now());\n }\n function userSpeakStop(_payload: BiEventPayload) {\n setUserLastActivity(Date.now());\n }\n function agentSpeakStart(_payload: BiEventPayload) {\n // no-op\n }\n function agentSpeakStop(_payload: BiEventPayload) {\n // no-op\n }\n function userSendMessage() {\n setUserLastActivity(Date.now());\n }\n function callStarted() {\n setUserLastActivity(Date.now());\n }\n function agentVideoLoaded() {\n setJoinedAt(new Date());\n }\n\n function agentJoined() {\n if (type === 'audio') {\n setJoinedAt(new Date());\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["useSetAtom","useAtom","useUpdateEffect","useUnmount","useInterval","state","useSdkConsumer","useConversation","useLivekitConversation","useConversationEvents","options","type","_useSdkConsumer","chatId","namespace","setConversationStatus","conversationStatus","setUserConnectionState","userConnectionState","setUserActivityState","userActivityState","setAgentConnectionState","agentConnectionState","setAgentActivityState","agentActivityState","setConversation","conversation","setTranscriptions","transcriptions","setJoinedAt","joinedAt","_useAtom","userLastActivity","setUserLastActivity","setUserInactivityDuration","userInactivityDuration","cleanup","Date","now","Error","userSpeakStart","userSpeakStop","agentSpeakStart","agentSpeakStop","responseLatency","userSendMessage","callStarted","agentVideoLoaded","agentJoined","undefined","_payload","joined"],"sources":["../../../../src/hooks/useConversation/useConversation.ts"],"sourcesContent":["import { useSetAtom, useAtom } from 'jotai';\nimport { useUpdateEffect, useUnmount, useInterval } from 'react-use';\n\nimport * as state from '../../conversation/state';\nimport { useSdkConsumer } from '../../sdk-consumer';\n\nimport { useConversation as useLivekitConversation } from './livekit/useConversation';\n\nimport {\n useConversationEvents,\n type UserSpeakStartPayload,\n type UserSpeakStopPayload,\n type AgentSpeakStartPayload,\n type AgentSpeakStopPayload,\n type ResponseLatencyPayload,\n} from '../useConversationEvents';\nimport type { UseConversationResult, UseConversationOptions } from './types';\n\ntype BiEventPayload =\n | UserSpeakStartPayload\n | UserSpeakStopPayload\n | AgentSpeakStartPayload\n | AgentSpeakStopPayload;\n\nexport function useConversation(\n options: UseConversationOptions,\n): UseConversationResult {\n const { type } = options;\n const { chatId, namespace } = useSdkConsumer();\n\n const setConversationStatus = useSetAtom(state.conversationStatus);\n const setUserConnectionState = useSetAtom(state.userConnectionState);\n const setUserActivityState = useSetAtom(state.userActivityState);\n const setAgentConnectionState = useSetAtom(state.agentConnectionState);\n const setAgentActivityState = useSetAtom(state.agentActivityState);\n const setConversation = useSetAtom(state.conversation);\n const setTranscriptions = useSetAtom(state.transcriptions);\n const setJoinedAt = useSetAtom(state.joinedAt);\n const [userLastActivity, setUserLastActivity] = useAtom(\n state.userLastActivity,\n );\n const setUserInactivityDuration = useSetAtom(state.userInactivityDuration);\n\n useUnmount(cleanup);\n\n useUpdateEffect(() => {\n cleanup();\n }, [chatId, namespace]);\n\n useInterval(() => {\n if (!userLastActivity) {\n return;\n }\n setUserInactivityDuration(Date.now() - userLastActivity);\n }, 1000);\n\n useUpdateEffect(() => {\n throw new Error(\n 'Conversation type & vendor cannot be changed once are set',\n );\n }, [type]);\n\n useConversationEvents({\n userSpeakStart,\n userSpeakStop,\n agentSpeakStart,\n agentSpeakStop,\n responseLatency,\n userSendMessage,\n callStarted,\n agentVideoLoaded,\n agentJoined,\n });\n\n return useLivekitConversation(options);\n\n function cleanup() {\n setConversationStatus('pending');\n setUserConnectionState('idle');\n setUserActivityState('idle');\n setAgentConnectionState('idle');\n setAgentActivityState('idle');\n setTranscriptions([]);\n setConversation(undefined);\n setJoinedAt(undefined);\n setUserLastActivity(null);\n setUserInactivityDuration(0);\n }\n\n // Conversation Events\n function responseLatency(_payload: ResponseLatencyPayload) {\n // BI logging handled by private impl (IBILogger interface — coming soon)\n }\n function userSpeakStart(_payload: BiEventPayload) {\n setUserLastActivity(Date.now());\n }\n function userSpeakStop(_payload: BiEventPayload) {\n setUserLastActivity(Date.now());\n }\n function agentSpeakStart(_payload: BiEventPayload) {\n // no-op\n }\n function agentSpeakStop(_payload: BiEventPayload) {\n // no-op\n }\n function userSendMessage() {\n setUserLastActivity(Date.now());\n }\n function callStarted() {\n setUserLastActivity(Date.now());\n }\n function agentVideoLoaded() {\n setJoinedAt((joined) => joined ?? new Date());\n }\n\n function agentJoined() {\n setJoinedAt((joined) => joined ?? new Date());\n }\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"useConversation.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useConversation/useConversation.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAQ7E,wBAAgB,eAAe,CAC7B,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CA8FvB"}
1
+ {"version":3,"file":"useConversation.d.ts","sourceRoot":"","sources":["../../../../src/hooks/useConversation/useConversation.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAQ7E,wBAAgB,eAAe,CAC7B,OAAO,EAAE,sBAAsB,GAC9B,qBAAqB,CA4FvB"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.16.0",
2
+ "version": "1.18.0",
3
3
  "name": "@wix/legends-platform-sdk",
4
4
  "license": "MIT",
5
5
  "author": {
@@ -103,5 +103,5 @@
103
103
  "wallaby": {
104
104
  "autoDetect": true
105
105
  },
106
- "falconPackageHash": "f9a5891b405ebfa64741ade86c1a924e1e787822a89b42952a939184"
106
+ "falconPackageHash": "9674109c8137f4cb9cfe640ebc920c6e20a2d7cba174d033802ecddc"
107
107
  }