@rqmii_immersive/agent-react-sdk 2.0.0 → 4.0.1

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 (126) hide show
  1. package/README.md +103 -357
  2. package/dist/{RqmiiCloudAvatarPlayer-BnsY8xIR.js → RqmiiCloudAvatarPlayer-CESlcAGy.js} +6095 -6108
  3. package/dist/RqmiiCloudAvatarPlayer-CESlcAGy.js.map +1 -0
  4. package/dist/RqmiiCloudAvatarPlayer-D5npgPcs.cjs +2939 -0
  5. package/dist/RqmiiCloudAvatarPlayer-D5npgPcs.cjs.map +1 -0
  6. package/dist/agent-react-sdk.css +1 -1
  7. package/dist/components/RqmiiAgentRoom.d.ts +3 -0
  8. package/dist/components/RqmiiAgentRoom.d.ts.map +1 -0
  9. package/dist/components/RqmiiCloudAvatarPlayer.d.ts +3 -0
  10. package/dist/components/RqmiiCloudAvatarPlayer.d.ts.map +1 -0
  11. package/dist/components/RqmiiErrorBoundary.d.ts +19 -0
  12. package/dist/components/RqmiiErrorBoundary.d.ts.map +1 -0
  13. package/dist/components/pxs/EpicPixelStreamingPlayer.d.ts +5 -0
  14. package/dist/components/pxs/EpicPixelStreamingPlayer.d.ts.map +1 -0
  15. package/dist/core/constants.d.ts +81 -0
  16. package/dist/core/constants.d.ts.map +1 -0
  17. package/dist/core/events/emitter.d.ts +10 -0
  18. package/dist/core/events/emitter.d.ts.map +1 -0
  19. package/dist/core/managers/audio.d.ts +24 -0
  20. package/dist/core/managers/audio.d.ts.map +1 -0
  21. package/dist/core/managers/heartbeat.d.ts +13 -0
  22. package/dist/core/managers/heartbeat.d.ts.map +1 -0
  23. package/dist/core/managers/reconnect.d.ts +29 -0
  24. package/dist/core/managers/reconnect.d.ts.map +1 -0
  25. package/dist/core/managers/session.d.ts +20 -0
  26. package/dist/core/managers/session.d.ts.map +1 -0
  27. package/dist/core/managers/socket.d.ts +15 -0
  28. package/dist/core/managers/socket.d.ts.map +1 -0
  29. package/dist/core/state/reducer.d.ts +4 -0
  30. package/dist/core/state/reducer.d.ts.map +1 -0
  31. package/dist/core/state/selectors.d.ts +24 -0
  32. package/dist/core/state/selectors.d.ts.map +1 -0
  33. package/dist/core/state/types.d.ts +60 -0
  34. package/dist/core/state/types.d.ts.map +1 -0
  35. package/dist/core/utils/accumulator.d.ts +11 -0
  36. package/dist/core/utils/accumulator.d.ts.map +1 -0
  37. package/dist/core/utils/agent-type.d.ts +2 -0
  38. package/dist/core/utils/agent-type.d.ts.map +1 -0
  39. package/dist/core/utils/bytes.d.ts +2 -0
  40. package/dist/core/utils/bytes.d.ts.map +1 -0
  41. package/dist/core/utils/sleep.d.ts +2 -0
  42. package/dist/core/utils/sleep.d.ts.map +1 -0
  43. package/dist/hooks/index.d.ts +12 -0
  44. package/dist/hooks/index.d.ts.map +1 -0
  45. package/dist/hooks/use-rqmii-agent.d.ts +2 -0
  46. package/dist/hooks/use-rqmii-agent.d.ts.map +1 -0
  47. package/dist/hooks/use-rqmii-audio-element.d.ts +2 -0
  48. package/dist/hooks/use-rqmii-audio-element.d.ts.map +1 -0
  49. package/dist/hooks/use-rqmii-avatar.d.ts +13 -0
  50. package/dist/hooks/use-rqmii-avatar.d.ts.map +1 -0
  51. package/dist/hooks/use-rqmii-connection.d.ts +27 -0
  52. package/dist/hooks/use-rqmii-connection.d.ts.map +1 -0
  53. package/dist/hooks/use-rqmii-events.d.ts +3 -0
  54. package/dist/hooks/use-rqmii-events.d.ts.map +1 -0
  55. package/dist/hooks/use-rqmii-messages.d.ts +6 -0
  56. package/dist/hooks/use-rqmii-messages.d.ts.map +1 -0
  57. package/dist/hooks/use-rqmii-press-to-talk.d.ts +3 -0
  58. package/dist/hooks/use-rqmii-press-to-talk.d.ts.map +1 -0
  59. package/dist/hooks/use-rqmii-sdk.d.ts +81 -0
  60. package/dist/hooks/use-rqmii-sdk.d.ts.map +1 -0
  61. package/dist/hooks/use-rqmii-session.d.ts +9 -0
  62. package/dist/hooks/use-rqmii-session.d.ts.map +1 -0
  63. package/dist/hooks/use-rqmii-vad.d.ts +3 -0
  64. package/dist/hooks/use-rqmii-vad.d.ts.map +1 -0
  65. package/dist/hooks/use-rqmii-voice.d.ts +12 -0
  66. package/dist/hooks/use-rqmii-voice.d.ts.map +1 -0
  67. package/dist/index.cjs +1 -1
  68. package/dist/index.cjs.map +1 -1
  69. package/dist/index.d.ts +10 -340
  70. package/dist/index.d.ts.map +1 -0
  71. package/dist/index.js +270 -20
  72. package/dist/index.js.map +1 -1
  73. package/dist/provider/RqmiiAgentProvider.d.ts +4 -0
  74. package/dist/provider/RqmiiAgentProvider.d.ts.map +1 -0
  75. package/dist/provider/socket-handlers.d.ts +77 -0
  76. package/dist/provider/socket-handlers.d.ts.map +1 -0
  77. package/dist/provider/use-manager-lifecycle.d.ts +76 -0
  78. package/dist/provider/use-manager-lifecycle.d.ts.map +1 -0
  79. package/dist/types/index.d.ts +385 -0
  80. package/dist/types/index.d.ts.map +1 -0
  81. package/dist/ui/Orb.d.ts +19 -0
  82. package/dist/ui/Orb.d.ts.map +1 -0
  83. package/dist/ui/RqmiiAgentChat.d.ts +4 -0
  84. package/dist/ui/RqmiiAgentChat.d.ts.map +1 -0
  85. package/dist/ui/agent-data.d.ts +17 -0
  86. package/dist/ui/agent-data.d.ts.map +1 -0
  87. package/dist/ui/chat/ChatBox.d.ts +22 -0
  88. package/dist/ui/chat/ChatBox.d.ts.map +1 -0
  89. package/dist/ui/chat/CreditsExhaustedPanel.d.ts +6 -0
  90. package/dist/ui/chat/CreditsExhaustedPanel.d.ts.map +1 -0
  91. package/dist/ui/chat/chat-box-avatar.d.ts +3 -0
  92. package/dist/ui/chat/chat-box-avatar.d.ts.map +1 -0
  93. package/dist/ui/chat/chat-box-content.d.ts +26 -0
  94. package/dist/ui/chat/chat-box-content.d.ts.map +1 -0
  95. package/dist/ui/chat/chat-box-shared.d.ts +24 -0
  96. package/dist/ui/chat/chat-box-shared.d.ts.map +1 -0
  97. package/dist/ui/chat/chat-box-text-and-voice.d.ts +3 -0
  98. package/dist/ui/chat/chat-box-text-and-voice.d.ts.map +1 -0
  99. package/dist/ui/chat/chat-box-text.d.ts +3 -0
  100. package/dist/ui/chat/chat-box-text.d.ts.map +1 -0
  101. package/dist/ui/chat/chat-box-types.d.ts +83 -0
  102. package/dist/ui/chat/chat-box-types.d.ts.map +1 -0
  103. package/dist/ui/chat/chat-box-voice.d.ts +3 -0
  104. package/dist/ui/chat/chat-box-voice.d.ts.map +1 -0
  105. package/dist/ui/chat/components.d.ts +4 -0
  106. package/dist/ui/chat/components.d.ts.map +1 -0
  107. package/dist/ui/chat/panels.d.ts +78 -0
  108. package/dist/ui/chat/panels.d.ts.map +1 -0
  109. package/dist/ui/chat/primitives.d.ts +47 -0
  110. package/dist/ui/chat/primitives.d.ts.map +1 -0
  111. package/dist/ui/chat/utils.d.ts +7 -0
  112. package/dist/ui/chat/utils.d.ts.map +1 -0
  113. package/dist/ui/faces.d.ts +3 -0
  114. package/dist/ui/faces.d.ts.map +1 -0
  115. package/dist/ui/languages.d.ts +10 -0
  116. package/dist/ui/languages.d.ts.map +1 -0
  117. package/dist/ui.cjs +122 -1
  118. package/dist/ui.cjs.map +1 -1
  119. package/dist/ui.d.ts +11 -10
  120. package/dist/ui.d.ts.map +1 -0
  121. package/dist/ui.js +1771 -4
  122. package/dist/ui.js.map +1 -1
  123. package/package.json +33 -5
  124. package/dist/RqmiiCloudAvatarPlayer-BnsY8xIR.js.map +0 -1
  125. package/dist/RqmiiCloudAvatarPlayer-lqCz2xlU.cjs +0 -2938
  126. package/dist/RqmiiCloudAvatarPlayer-lqCz2xlU.cjs.map +0 -1
@@ -0,0 +1,81 @@
1
+ import type { EventHandlerMap, RqmiiMessage, RqmiiState, TranscriptPayload, PartialTranscriptPayload, SessionData } from '../types';
2
+ type Listener<T> = (handler: T) => () => void;
3
+ export interface RqmiiEventListeners {
4
+ onSessionReady: Listener<EventHandlerMap['session:ready']>;
5
+ onSessionJoined: Listener<EventHandlerMap['session:joined']>;
6
+ onSessionTerminated: Listener<EventHandlerMap['session:terminated']>;
7
+ onSessionExpired: Listener<EventHandlerMap['session:expired']>;
8
+ onMessageReceived: Listener<EventHandlerMap['message:received']>;
9
+ onMessageSent: Listener<EventHandlerMap['message:sent']>;
10
+ onAudioPlaying: Listener<EventHandlerMap['audio:playing']>;
11
+ onAudioStopped: Listener<EventHandlerMap['audio:stopped']>;
12
+ onAvatarSpeaking: Listener<EventHandlerMap['avatar:speaking']>;
13
+ onAvatarSpeakingDone: Listener<EventHandlerMap['avatar:speaking_done']>;
14
+ onStateChanged: Listener<EventHandlerMap['state:changed']>;
15
+ onConnected: Listener<EventHandlerMap['connection:connected']>;
16
+ onDisconnected: Listener<EventHandlerMap['connection:disconnected']>;
17
+ onReconnecting: Listener<EventHandlerMap['connection:reconnecting']>;
18
+ onConnectionFailed: Listener<EventHandlerMap['connection:failed']>;
19
+ onError: Listener<EventHandlerMap['error']>;
20
+ onCreditsExhausted: Listener<EventHandlerMap['credits:exhausted']>;
21
+ onTranscript: Listener<EventHandlerMap['transcript']>;
22
+ onPartialTranscript: Listener<EventHandlerMap['partial_transcript']>;
23
+ onInterrupted: Listener<EventHandlerMap['interrupted']>;
24
+ }
25
+ export interface RqmiiSDKHandle {
26
+ state: {
27
+ messages: RqmiiMessage[];
28
+ connectionState: RqmiiState['connectionState'];
29
+ isConnected: boolean;
30
+ isSessionReady: boolean;
31
+ isAudioPlaying: boolean;
32
+ isAgentThinking: boolean;
33
+ isAgentSpeaking: boolean;
34
+ isToolExecuting: boolean;
35
+ isSessionTerminated: boolean;
36
+ isSessionTerminating: boolean;
37
+ creditExhausted: boolean;
38
+ creditError: string | null;
39
+ error: string | null;
40
+ transcript: TranscriptPayload | null;
41
+ partialTranscript: PartialTranscriptPayload | null;
42
+ session: RqmiiState['session'];
43
+ sessionState: RqmiiState['sessionState'];
44
+ reconnectAttempt: number;
45
+ };
46
+ actions: {
47
+ sendTextMessage: (text: string) => boolean;
48
+ sendAudioChunk: (audio: unknown) => boolean;
49
+ endAudioStream: () => boolean;
50
+ interrupt: () => boolean;
51
+ clearSessionHistory: () => boolean;
52
+ clearMessages: () => void;
53
+ changeSessionLanguage: (language: string) => boolean;
54
+ signalClientReady: (payload?: Record<string, unknown>) => boolean;
55
+ initializeSession: (opts?: {
56
+ apiKey?: string;
57
+ publicChatId?: string;
58
+ agentId?: string;
59
+ language?: string;
60
+ }) => Promise<SessionData>;
61
+ joinDesktopSession: (opts: {
62
+ uniqueId: string;
63
+ language?: string;
64
+ }) => Promise<SessionData>;
65
+ disconnect: () => void;
66
+ terminateSession: () => Promise<{
67
+ success: boolean;
68
+ }>;
69
+ resumeAudioPlayback: () => void;
70
+ pauseAudioPlayback: () => void;
71
+ attachAudioElement: (el: HTMLAudioElement | null) => void;
72
+ };
73
+ events: RqmiiEventListeners;
74
+ raw: {
75
+ socket: ReturnType<typeof import('socket.io-client').io> | null;
76
+ audioElement: HTMLAudioElement | null;
77
+ };
78
+ }
79
+ export declare function useRqmiiSDK(): RqmiiSDKHandle;
80
+ export {};
81
+ //# sourceMappingURL=use-rqmii-sdk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-rqmii-sdk.d.ts","sourceRoot":"","sources":["../../src/hooks/use-rqmii-sdk.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ export declare function useRqmiiSession(): {
2
+ sessionState: import("..").SessionState;
3
+ isSessionTerminated: boolean;
4
+ isSessionTerminating: boolean;
5
+ isAgentThinking: boolean;
6
+ isAgentSpeaking: boolean;
7
+ isToolExecuting: boolean;
8
+ };
9
+ //# sourceMappingURL=use-rqmii-session.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-rqmii-session.d.ts","sourceRoot":"","sources":["../../src/hooks/use-rqmii-session.ts"],"names":[],"mappings":"AAEA,wBAAgB,eAAe;;;;;;;EAU9B"}
@@ -0,0 +1,3 @@
1
+ import type { UseRqmiiVADOptions, UseRqmiiVADReturn } from '../types';
2
+ export declare function useRqmiiVAD(options?: UseRqmiiVADOptions): UseRqmiiVADReturn;
3
+ //# sourceMappingURL=use-rqmii-vad.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-rqmii-vad.d.ts","sourceRoot":"","sources":["../../src/hooks/use-rqmii-vad.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAgBtE,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,iBAAiB,CA0W/E"}
@@ -0,0 +1,12 @@
1
+ export declare function useRqmiiVoice(): {
2
+ sendAudioChunk: (audio: ArrayBuffer | Uint8Array | unknown) => boolean;
3
+ endAudioStream: () => boolean;
4
+ isAudioPlaying: boolean;
5
+ transcript: import("..").TranscriptPayload | null;
6
+ partialTranscript: import("..").PartialTranscriptPayload | null;
7
+ interrupt: () => boolean;
8
+ resumeAudioPlayback: () => Promise<void>;
9
+ pauseAudioPlayback: () => void;
10
+ attachAudioElement: (element: HTMLAudioElement | null) => void;
11
+ };
12
+ //# sourceMappingURL=use-rqmii-voice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-rqmii-voice.d.ts","sourceRoot":"","sources":["../../src/hooks/use-rqmii-voice.ts"],"names":[],"mappings":"AAEA,wBAAgB,aAAa;;;;;;;;;;EAa5B"}
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./RqmiiCloudAvatarPlayer-lqCz2xlU.cjs");exports.AGENT_TYPES=i.AGENT_TYPES;exports.CLOUD_STREAM_STATE=i.CLOUD_STREAM_STATE;exports.CONNECTION_STATE=i.CONNECTION_STATE;exports.EpicPixelStreamingPlayer=i.EpicPixelStreamingPlayer;exports.RqmiiAgentProvider=i.RqmiiAgentProvider;exports.RqmiiAgentRoom=i.RqmiiAgentRoom;exports.RqmiiCloudAvatarPlayer=i.RqmiiCloudAvatarPlayer;exports.SESSION_STATE=i.SESSION_STATE;exports.SOCKET_EVENTS=i.SOCKET_EVENTS;exports.useRqmiiAgent=i.useRqmiiAgent;exports.useRqmiiAgentContext=i.useRqmiiAgentContext;exports.useRqmiiAudioElement=i.useRqmiiAudioElement;exports.useRqmiiAvatar=i.useRqmiiAvatar;exports.useRqmiiConnection=i.useRqmiiConnection;exports.useRqmiiMessages=i.useRqmiiMessages;exports.useRqmiiPressToTalk=i.useRqmiiPressToTalk;exports.useRqmiiSessionState=i.useRqmiiSessionState;exports.useRqmiiVAD=i.useRqmiiVAD;exports.useRqmiiVoice=i.useRqmiiVoice;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("./RqmiiCloudAvatarPlayer-D5npgPcs.cjs"),s=require("react");function L(){return i.useRqmiiAgentContext()}function j(){const e=i.useRqmiiAgentContext();return{sessionState:e.sessionState,isSessionTerminated:e.isSessionTerminated,isSessionTerminating:e.isSessionTerminating,isAgentThinking:e.isAgentThinking,isAgentSpeaking:e.isAgentSpeaking,isToolExecuting:e.isToolExecuting}}function U(e){const{attachAudioElement:t,resumeAudioPlayback:n}=i.useRqmiiAgentContext();s.useEffect(()=>{if(!e?.current)return;t(e.current);const o=()=>{n()},c=e.current;return c.addEventListener("click",o),c.addEventListener("touchstart",o),()=>{c.removeEventListener("click",o),c.removeEventListener("touchstart",o),t(null)}},[t,e,n])}const F={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,channelCount:1,sampleRate:16e3},V=["audio/webm;codecs=opus","audio/webm","audio/mp4"],B=()=>typeof window>"u"||!window.MediaRecorder?.isTypeSupported?"":V.find(e=>window.MediaRecorder.isTypeSupported(e))||"";function H(e={}){const{onAudioChunk:t,onAudioEnd:n,onError:o,holdDelayMs:c=220,timesliceMs:y=100,interruptOnHoldStart:q=!0,audioConstraints:k=F}=e,{sendAudioChunk:x,endAudioStream:A,interrupt:P}=i.useRqmiiAgentContext(),l=s.useRef(null),d=s.useRef(null),u=s.useRef(null),D=s.useRef(!0),S=s.useRef(!1),[w,M]=s.useState(!1),[N,g]=s.useState(!1),[b,f]=s.useState(null),_=s.useCallback(async r=>{if(!r||r.size<=0)return;const a=await r.arrayBuffer();if(t){t(a);return}x(a)},[t,x]),m=s.useCallback(()=>{d.current&&(d.current.getTracks().forEach(r=>r.stop()),d.current=null)},[]),p=s.useCallback(({discard:r=!1}={})=>{const a=l.current;if(!a)return S.current=!0,!1;if(D.current=!r,l.current=null,a.state==="inactive")return r||(n?n():A()),m(),g(!1),!0;try{a.requestData()}catch{}a.onstop=()=>{D.current&&(n?n():A()),m(),g(!1)};try{a.stop()}catch(R){m(),g(!1),o?.(R)}return!0},[m,A,n,o]),h=s.useCallback(async()=>{if(l.current)return!0;if(S.current=!1,typeof navigator>"u"||!navigator.mediaDevices?.getUserMedia||typeof window>"u"||typeof window.MediaRecorder>"u"){const r=new Error("MediaRecorder or microphone APIs are unavailable in this browser");return f(r.message),o?.(r),!1}try{const r=await navigator.mediaDevices.getUserMedia({audio:k});d.current=r;const a=B(),R=a?{mimeType:a}:void 0,T=new window.MediaRecorder(r,R);return T.ondataavailable=v=>{_(v.data)},T.onerror=v=>{const O=v?.error||new Error("Microphone recording failed");f(O?.message||"recording_failed"),o?.(O)},l.current=T,g(!0),f(null),T.start(y),S.current&&(S.current=!1,p()),!0}catch(r){return m(),g(!1),f("permission_denied"),o?.(r),!1}},[k,m,_,o,y,p]),C=s.useCallback(()=>{u.current&&(clearTimeout(u.current),u.current=null),M(!0),u.current=setTimeout(()=>{q&&P(),h()},c)},[c,P,q,h]),E=s.useCallback(()=>{M(!1),u.current&&(clearTimeout(u.current),u.current=null),p()},[p]);s.useEffect(()=>()=>{u.current&&(clearTimeout(u.current),u.current=null);const r=l.current;if(r&&(l.current=null,r.state!=="inactive"))try{r.stop()}catch{}d.current&&(d.current.getTracks().forEach(a=>a.stop()),d.current=null)},[]);const I=s.useMemo(()=>({onPointerDown:r=>{r.preventDefault(),C()},onPointerUp:r=>{r.preventDefault(),E()},onPointerCancel:r=>{r.preventDefault(),E()},onPointerLeave:r=>{r.preventDefault(),E()}}),[C,E]);return{isPressing:w,isRecording:N,micError:b,startRecording:h,stopRecording:p,startPress:C,stopPress:E,eventHandlers:I}}function K(e,t,n=[]){const{events:o}=i.useRqmiiAgentContext();s.useEffect(()=>o.on(e,t),[e,t,o,...n])}function z(){const e=i.useRqmiiAgentContext(),t=e.events;return{state:{messages:e.messages,connectionState:e.connectionState,isConnected:e.isConnected,isSessionReady:e.isSessionReady,isAudioPlaying:e.isAudioPlaying,isAgentThinking:e.isAgentThinking,isAgentSpeaking:e.isAgentSpeaking,isToolExecuting:e.isToolExecuting,isSessionTerminated:e.isSessionTerminated,isSessionTerminating:e.isSessionTerminating,creditExhausted:e.creditExhausted,creditError:e.creditError,error:e.error,transcript:e.transcript,partialTranscript:e.partialTranscript,session:e.session,sessionState:e.sessionState,reconnectAttempt:e.reconnectAttempt},actions:{sendTextMessage:e.sendTextMessage,sendAudioChunk:e.sendAudioChunk,endAudioStream:e.endAudioStream,interrupt:e.interrupt,clearSessionHistory:e.clearSessionHistory,clearMessages:e.clearMessages,changeSessionLanguage:e.changeSessionLanguage,signalClientReady:e.signalClientReady,initializeSession:e.initializeSession,joinDesktopSession:e.joinDesktopSession,disconnect:e.disconnect,terminateSession:e.terminateSession,resumeAudioPlayback:e.resumeAudioPlayback,pauseAudioPlayback:e.pauseAudioPlayback,attachAudioElement:e.attachAudioElement},events:{onSessionReady:n=>t.on("session:ready",n),onSessionJoined:n=>t.on("session:joined",n),onSessionTerminated:n=>t.on("session:terminated",n),onSessionExpired:n=>t.on("session:expired",n),onMessageReceived:n=>t.on("message:received",n),onMessageSent:n=>t.on("message:sent",n),onAudioPlaying:n=>t.on("audio:playing",n),onAudioStopped:n=>t.on("audio:stopped",n),onAvatarSpeaking:n=>t.on("avatar:speaking",n),onAvatarSpeakingDone:n=>t.on("avatar:speaking_done",n),onStateChanged:n=>t.on("state:changed",n),onConnected:n=>t.on("connection:connected",n),onDisconnected:n=>t.on("connection:disconnected",n),onReconnecting:n=>t.on("connection:reconnecting",n),onConnectionFailed:n=>t.on("connection:failed",n),onError:n=>t.on("error",n),onCreditsExhausted:n=>t.on("credits:exhausted",n),onTranscript:n=>t.on("transcript",n),onPartialTranscript:n=>t.on("partial_transcript",n),onInterrupted:n=>t.on("interrupted",n)},raw:{socket:e.socket,audioElement:e.audioElement}}}class G extends s.Component{constructor(t){super(t),this.state={hasError:!1,error:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){this.props.onError?.(t,n)}reset=()=>{this.setState({hasError:!1,error:null})};render(){if(this.state.hasError){const{fallback:t}=this.props;return t?typeof t=="function"?this.state.error?t(this.state.error,this.reset):null:t:i.jsxRuntimeExports.jsxs("div",{style:{padding:"24px",textAlign:"center",color:"#ef4444"},children:[i.jsxRuntimeExports.jsx("h3",{children:"Something went wrong"}),i.jsxRuntimeExports.jsx("p",{children:this.state.error?.message||"An unexpected error occurred"}),i.jsxRuntimeExports.jsx("button",{onClick:this.reset,style:{marginTop:"12px",padding:"8px 16px",cursor:"pointer"},children:"Try again"})]})}return this.props.children}}exports.AGENT_TYPES=i.AGENT_TYPES;exports.CLOUD_STREAM_STATE=i.CLOUD_STREAM_STATE;exports.CONNECTION_STATE=i.CONNECTION_STATE;exports.DEFAULT_PCM_OPTIONS=i.DEFAULT_PCM_OPTIONS;exports.DEFAULT_RECONNECT_OPTIONS=i.DEFAULT_RECONNECT_OPTIONS;exports.EventEmitter=i.EventEmitter;exports.RqmiiAgentProvider=i.RqmiiAgentProvider;exports.RqmiiAgentRoom=i.RqmiiAgentRoom;exports.RqmiiCloudAvatarPlayer=i.RqmiiCloudAvatarPlayer;exports.SESSION_STATE=i.SESSION_STATE;exports.SOCKET_EVENTS=i.SOCKET_EVENTS;exports.useRqmiiAgentContext=i.useRqmiiAgentContext;exports.useRqmiiAvatar=i.useRqmiiAvatar;exports.useRqmiiConnection=i.useRqmiiConnection;exports.useRqmiiMessages=i.useRqmiiMessages;exports.useRqmiiVAD=i.useRqmiiVAD;exports.useRqmiiVoice=i.useRqmiiVoice;exports.RqmiiErrorBoundary=G;exports.useRqmiiAgent=L;exports.useRqmiiAudioElement=U;exports.useRqmiiEvents=K;exports.useRqmiiPressToTalk=H;exports.useRqmiiSDK=z;exports.useRqmiiSession=j;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.cjs","sources":["../src/hooks/use-rqmii-agent.ts","../src/hooks/use-rqmii-session.ts","../src/hooks/use-rqmii-audio-element.ts","../src/hooks/use-rqmii-press-to-talk.ts","../src/hooks/use-rqmii-events.ts","../src/hooks/use-rqmii-sdk.ts","../src/components/RqmiiErrorBoundary.tsx"],"sourcesContent":["import { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiAgent() {\n return useRqmiiAgentContext();\n}\n","import { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiSession() {\n const ctx = useRqmiiAgentContext();\n return {\n sessionState: ctx.sessionState,\n isSessionTerminated: ctx.isSessionTerminated,\n isSessionTerminating: ctx.isSessionTerminating,\n isAgentThinking: ctx.isAgentThinking,\n isAgentSpeaking: ctx.isAgentSpeaking,\n isToolExecuting: ctx.isToolExecuting,\n };\n}\n","import { useEffect } from 'react';\nimport { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiAudioElement(audioRef: React.RefObject<HTMLAudioElement | null>) {\n const { attachAudioElement, resumeAudioPlayback } = useRqmiiAgentContext();\n\n useEffect(() => {\n if (!audioRef?.current) return undefined;\n\n attachAudioElement(audioRef.current);\n const unlock = () => {\n void resumeAudioPlayback();\n };\n\n const node = audioRef.current;\n node.addEventListener('click', unlock);\n node.addEventListener('touchstart', unlock);\n\n return () => {\n node.removeEventListener('click', unlock);\n node.removeEventListener('touchstart', unlock);\n attachAudioElement(null);\n };\n }, [attachAudioElement, audioRef, resumeAudioPlayback]);\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\nimport type { UseRqmiiPressToTalkOptions, UseRqmiiPressToTalkReturn } from '../types';\n\nconst DEFAULT_AUDIO_CONSTRAINTS: MediaTrackConstraints = {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n sampleRate: 16000,\n};\n\nconst MEDIA_RECORDER_MIME_TYPES = [\n 'audio/webm;codecs=opus',\n 'audio/webm',\n 'audio/mp4',\n];\n\nconst getRecorderMimeType = (): string => {\n if (typeof window === 'undefined' || !window.MediaRecorder?.isTypeSupported) return '';\n return MEDIA_RECORDER_MIME_TYPES.find((type) => window.MediaRecorder.isTypeSupported(type)) || '';\n};\n\nexport function useRqmiiPressToTalk(options: UseRqmiiPressToTalkOptions = {}): UseRqmiiPressToTalkReturn {\n const {\n onAudioChunk,\n onAudioEnd,\n onError,\n holdDelayMs = 220,\n timesliceMs = 100,\n interruptOnHoldStart = true,\n audioConstraints = DEFAULT_AUDIO_CONSTRAINTS,\n } = options;\n\n const { sendAudioChunk, endAudioStream, interrupt } = useRqmiiAgentContext();\n\n const mediaRecorderRef = useRef<MediaRecorder | null>(null);\n const streamRef = useRef<MediaStream | null>(null);\n const holdTimerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const shouldSendAudioEndRef = useRef(true);\n const stopRequestedRef = useRef(false);\n\n const [isPressing, setIsPressing] = useState(false);\n const [isRecording, setIsRecording] = useState(false);\n const [micError, setMicError] = useState<string | null>(null);\n\n const handleChunk = useCallback(\n async (blob: Blob) => {\n if (!blob || blob.size <= 0) return;\n const chunkBuffer = await blob.arrayBuffer();\n if (onAudioChunk) {\n onAudioChunk(chunkBuffer);\n return;\n }\n sendAudioChunk(chunkBuffer);\n },\n [onAudioChunk, sendAudioChunk],\n );\n\n const cleanupStream = useCallback(() => {\n if (!streamRef.current) return;\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }, []);\n\n const stopRecording = useCallback(\n ({ discard = false }: { discard?: boolean } = {}): boolean => {\n const mediaRecorder = mediaRecorderRef.current;\n if (!mediaRecorder) {\n stopRequestedRef.current = true;\n return false;\n }\n\n shouldSendAudioEndRef.current = !discard;\n mediaRecorderRef.current = null;\n\n if (mediaRecorder.state === 'inactive') {\n if (!discard) {\n if (onAudioEnd) onAudioEnd();\n else endAudioStream();\n }\n cleanupStream();\n setIsRecording(false);\n return true;\n }\n\n try {\n mediaRecorder.requestData();\n } catch {\n // some browsers throw if requestData is called after stopping\n }\n\n mediaRecorder.onstop = () => {\n const shouldSendEnd = shouldSendAudioEndRef.current;\n if (shouldSendEnd) {\n if (onAudioEnd) onAudioEnd();\n else endAudioStream();\n }\n cleanupStream();\n setIsRecording(false);\n };\n\n try {\n mediaRecorder.stop();\n } catch (error) {\n cleanupStream();\n setIsRecording(false);\n onError?.(error);\n }\n\n return true;\n },\n [cleanupStream, endAudioStream, onAudioEnd, onError],\n );\n\n const startRecording = useCallback(async (): Promise<boolean> => {\n if (mediaRecorderRef.current) return true;\n stopRequestedRef.current = false;\n if (\n typeof navigator === 'undefined' ||\n !navigator.mediaDevices?.getUserMedia ||\n typeof window === 'undefined' ||\n typeof window.MediaRecorder === 'undefined'\n ) {\n const error = new Error('MediaRecorder or microphone APIs are unavailable in this browser');\n setMicError(error.message);\n onError?.(error);\n return false;\n }\n\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ audio: audioConstraints });\n streamRef.current = stream;\n\n const mimeType = getRecorderMimeType();\n const recorderOptions = mimeType ? { mimeType } : undefined;\n const mediaRecorder = new window.MediaRecorder(stream, recorderOptions);\n\n mediaRecorder.ondataavailable = (event) => {\n void handleChunk(event.data);\n };\n\n mediaRecorder.onerror = (event) => {\n const error = (event as ErrorEvent)?.error || new Error('Microphone recording failed');\n setMicError((error as Error)?.message || 'recording_failed');\n onError?.(error);\n };\n\n mediaRecorderRef.current = mediaRecorder;\n setIsRecording(true);\n setMicError(null);\n mediaRecorder.start(timesliceMs);\n\n if (stopRequestedRef.current) {\n stopRequestedRef.current = false;\n stopRecording();\n }\n\n return true;\n } catch (error) {\n cleanupStream();\n setIsRecording(false);\n setMicError('permission_denied');\n onError?.(error);\n return false;\n }\n }, [audioConstraints, cleanupStream, handleChunk, onError, timesliceMs, stopRecording]);\n\n const startPress = useCallback(() => {\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n\n setIsPressing(true);\n\n holdTimerRef.current = setTimeout(() => {\n if (interruptOnHoldStart) {\n interrupt();\n }\n void startRecording();\n }, holdDelayMs);\n }, [holdDelayMs, interrupt, interruptOnHoldStart, startRecording]);\n\n const stopPress = useCallback(() => {\n setIsPressing(false);\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n stopRecording();\n }, [stopRecording]);\n\n useEffect(() => {\n return () => {\n if (holdTimerRef.current) {\n clearTimeout(holdTimerRef.current);\n holdTimerRef.current = null;\n }\n const mr = mediaRecorderRef.current;\n if (mr) {\n mediaRecorderRef.current = null;\n if (mr.state !== 'inactive') {\n try { mr.stop(); } catch { /* ignore */ }\n }\n }\n if (streamRef.current) {\n streamRef.current.getTracks().forEach((track) => track.stop());\n streamRef.current = null;\n }\n };\n }, []);\n\n const eventHandlers = useMemo(\n () => ({\n onPointerDown: (e: React.PointerEvent) => {\n e.preventDefault();\n startPress();\n },\n onPointerUp: (e: React.PointerEvent) => {\n e.preventDefault();\n stopPress();\n },\n onPointerCancel: (e: React.PointerEvent) => {\n e.preventDefault();\n stopPress();\n },\n onPointerLeave: (e: React.PointerEvent) => {\n e.preventDefault();\n stopPress();\n },\n }),\n [startPress, stopPress],\n );\n\n return {\n isPressing,\n isRecording,\n micError,\n startRecording,\n stopRecording,\n startPress,\n stopPress,\n eventHandlers,\n };\n}\n","import { useEffect } from 'react';\nimport type { EventType, EventHandlerMap } from '../types';\nimport { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\n\nexport function useRqmiiEvents<T extends EventType>(event: T, handler: EventHandlerMap[T], deps: unknown[] = []) {\n const { events } = useRqmiiAgentContext();\n\n useEffect(() => {\n return events.on(event, handler);\n }, [event, handler, events, ...deps]);\n}\n","import { useRqmiiAgentContext } from '../provider/RqmiiAgentProvider';\nimport type { EventHandlerMap, RqmiiMessage, RqmiiState, TranscriptPayload, PartialTranscriptPayload, SessionData } from '../types';\n\ntype Listener<T> = (handler: T) => () => void;\n\nexport interface RqmiiEventListeners {\n onSessionReady: Listener<EventHandlerMap['session:ready']>;\n onSessionJoined: Listener<EventHandlerMap['session:joined']>;\n onSessionTerminated: Listener<EventHandlerMap['session:terminated']>;\n onSessionExpired: Listener<EventHandlerMap['session:expired']>;\n onMessageReceived: Listener<EventHandlerMap['message:received']>;\n onMessageSent: Listener<EventHandlerMap['message:sent']>;\n onAudioPlaying: Listener<EventHandlerMap['audio:playing']>;\n onAudioStopped: Listener<EventHandlerMap['audio:stopped']>;\n onAvatarSpeaking: Listener<EventHandlerMap['avatar:speaking']>;\n onAvatarSpeakingDone: Listener<EventHandlerMap['avatar:speaking_done']>;\n onStateChanged: Listener<EventHandlerMap['state:changed']>;\n onConnected: Listener<EventHandlerMap['connection:connected']>;\n onDisconnected: Listener<EventHandlerMap['connection:disconnected']>;\n onReconnecting: Listener<EventHandlerMap['connection:reconnecting']>;\n onConnectionFailed: Listener<EventHandlerMap['connection:failed']>;\n onError: Listener<EventHandlerMap['error']>;\n onCreditsExhausted: Listener<EventHandlerMap['credits:exhausted']>;\n onTranscript: Listener<EventHandlerMap['transcript']>;\n onPartialTranscript: Listener<EventHandlerMap['partial_transcript']>;\n onInterrupted: Listener<EventHandlerMap['interrupted']>;\n}\n\nexport interface RqmiiSDKHandle {\n state: {\n messages: RqmiiMessage[];\n connectionState: RqmiiState['connectionState'];\n isConnected: boolean;\n isSessionReady: boolean;\n isAudioPlaying: boolean;\n isAgentThinking: boolean;\n isAgentSpeaking: boolean;\n isToolExecuting: boolean;\n isSessionTerminated: boolean;\n isSessionTerminating: boolean;\n creditExhausted: boolean;\n creditError: string | null;\n error: string | null;\n transcript: TranscriptPayload | null;\n partialTranscript: PartialTranscriptPayload | null;\n session: RqmiiState['session'];\n sessionState: RqmiiState['sessionState'];\n reconnectAttempt: number;\n };\n actions: {\n sendTextMessage: (text: string) => boolean;\n sendAudioChunk: (audio: unknown) => boolean;\n endAudioStream: () => boolean;\n interrupt: () => boolean;\n clearSessionHistory: () => boolean;\n clearMessages: () => void;\n changeSessionLanguage: (language: string) => boolean;\n signalClientReady: (payload?: Record<string, unknown>) => boolean;\n initializeSession: (opts?: { apiKey?: string; publicChatId?: string; agentId?: string; language?: string }) => Promise<SessionData>;\n joinDesktopSession: (opts: { uniqueId: string; language?: string }) => Promise<SessionData>;\n disconnect: () => void;\n terminateSession: () => Promise<{ success: boolean }>;\n resumeAudioPlayback: () => void;\n pauseAudioPlayback: () => void;\n attachAudioElement: (el: HTMLAudioElement | null) => void;\n };\n events: RqmiiEventListeners;\n raw: {\n socket: ReturnType<typeof import('socket.io-client').io> | null;\n audioElement: HTMLAudioElement | null;\n };\n}\n\nexport function useRqmiiSDK(): RqmiiSDKHandle {\n const ctx = useRqmiiAgentContext();\n const ev = ctx.events;\n\n return {\n state: {\n messages: ctx.messages,\n connectionState: ctx.connectionState,\n isConnected: ctx.isConnected,\n isSessionReady: ctx.isSessionReady,\n isAudioPlaying: ctx.isAudioPlaying,\n isAgentThinking: ctx.isAgentThinking,\n isAgentSpeaking: ctx.isAgentSpeaking,\n isToolExecuting: ctx.isToolExecuting,\n isSessionTerminated: ctx.isSessionTerminated,\n isSessionTerminating: ctx.isSessionTerminating,\n creditExhausted: ctx.creditExhausted,\n creditError: ctx.creditError,\n error: ctx.error,\n transcript: ctx.transcript,\n partialTranscript: ctx.partialTranscript,\n session: ctx.session,\n sessionState: ctx.sessionState,\n reconnectAttempt: ctx.reconnectAttempt,\n },\n actions: {\n sendTextMessage: ctx.sendTextMessage,\n sendAudioChunk: ctx.sendAudioChunk,\n endAudioStream: ctx.endAudioStream,\n interrupt: ctx.interrupt,\n clearSessionHistory: ctx.clearSessionHistory,\n clearMessages: ctx.clearMessages,\n changeSessionLanguage: ctx.changeSessionLanguage,\n signalClientReady: ctx.signalClientReady,\n initializeSession: ctx.initializeSession,\n joinDesktopSession: ctx.joinDesktopSession,\n disconnect: ctx.disconnect,\n terminateSession: ctx.terminateSession,\n resumeAudioPlayback: ctx.resumeAudioPlayback,\n pauseAudioPlayback: ctx.pauseAudioPlayback,\n attachAudioElement: ctx.attachAudioElement,\n },\n events: {\n onSessionReady: (h) => ev.on('session:ready', h),\n onSessionJoined: (h) => ev.on('session:joined', h),\n onSessionTerminated: (h) => ev.on('session:terminated', h),\n onSessionExpired: (h) => ev.on('session:expired', h),\n onMessageReceived: (h) => ev.on('message:received', h),\n onMessageSent: (h) => ev.on('message:sent', h),\n onAudioPlaying: (h) => ev.on('audio:playing', h),\n onAudioStopped: (h) => ev.on('audio:stopped', h),\n onAvatarSpeaking: (h) => ev.on('avatar:speaking', h),\n onAvatarSpeakingDone: (h) => ev.on('avatar:speaking_done', h),\n onStateChanged: (h) => ev.on('state:changed', h),\n onConnected: (h) => ev.on('connection:connected', h),\n onDisconnected: (h) => ev.on('connection:disconnected', h),\n onReconnecting: (h) => ev.on('connection:reconnecting', h),\n onConnectionFailed: (h) => ev.on('connection:failed', h),\n onError: (h) => ev.on('error', h),\n onCreditsExhausted: (h) => ev.on('credits:exhausted', h),\n onTranscript: (h) => ev.on('transcript', h),\n onPartialTranscript: (h) => ev.on('partial_transcript', h),\n onInterrupted: (h) => ev.on('interrupted', h),\n },\n raw: {\n socket: ctx.socket,\n audioElement: ctx.audioElement,\n },\n };\n}\n","import React, { Component, type ErrorInfo, type ReactNode } from 'react';\n\ninterface RqmiiErrorBoundaryProps {\n children: ReactNode;\n fallback?: ReactNode | ((error: Error, reset: () => void) => ReactNode);\n onError?: (error: Error, info: ErrorInfo) => void;\n}\n\ninterface RqmiiErrorBoundaryState {\n hasError: boolean;\n error: Error | null;\n}\n\nexport class RqmiiErrorBoundary extends Component<RqmiiErrorBoundaryProps, RqmiiErrorBoundaryState> {\n constructor(props: RqmiiErrorBoundaryProps) {\n super(props);\n this.state = { hasError: false, error: null };\n }\n\n static getDerivedStateFromError(error: Error): RqmiiErrorBoundaryState {\n return { hasError: true, error };\n }\n\n componentDidCatch(error: Error, info: ErrorInfo) {\n this.props.onError?.(error, info);\n }\n\n reset = () => {\n this.setState({ hasError: false, error: null });\n };\n\n render(): ReactNode {\n if (this.state.hasError) {\n const { fallback } = this.props;\n if (fallback) {\n if (typeof fallback === 'function') {\n return this.state.error ? fallback(this.state.error, this.reset) : null;\n }\n return fallback;\n }\n return (\n <div style={{ padding: '24px', textAlign: 'center', color: '#ef4444' }}>\n <h3>Something went wrong</h3>\n <p>{this.state.error?.message || 'An unexpected error occurred'}</p>\n <button onClick={this.reset} style={{ marginTop: '12px', padding: '8px 16px', cursor: 'pointer' }}>\n Try again\n </button>\n </div>\n );\n }\n return this.props.children;\n }\n}\n"],"names":["useRqmiiAgent","useRqmiiAgentContext","useRqmiiSession","ctx","useRqmiiAudioElement","audioRef","attachAudioElement","resumeAudioPlayback","useEffect","unlock","node","DEFAULT_AUDIO_CONSTRAINTS","MEDIA_RECORDER_MIME_TYPES","getRecorderMimeType","type","useRqmiiPressToTalk","options","onAudioChunk","onAudioEnd","onError","holdDelayMs","timesliceMs","interruptOnHoldStart","audioConstraints","sendAudioChunk","endAudioStream","interrupt","mediaRecorderRef","useRef","streamRef","holdTimerRef","shouldSendAudioEndRef","stopRequestedRef","isPressing","setIsPressing","useState","isRecording","setIsRecording","micError","setMicError","handleChunk","useCallback","blob","chunkBuffer","cleanupStream","track","stopRecording","discard","mediaRecorder","error","startRecording","stream","mimeType","recorderOptions","event","startPress","stopPress","mr","eventHandlers","useMemo","e","useRqmiiEvents","handler","deps","events","useRqmiiSDK","ev","h","RqmiiErrorBoundary","Component","props","info","fallback","jsxs","jsx"],"mappings":"4JAEO,SAASA,GAAgB,CAC9B,OAAOC,uBAAA,CACT,CCFO,SAASC,GAAkB,CAChC,MAAMC,EAAMF,EAAAA,qBAAA,EACZ,MAAO,CACL,aAAcE,EAAI,aAClB,oBAAqBA,EAAI,oBACzB,qBAAsBA,EAAI,qBAC1B,gBAAiBA,EAAI,gBACrB,gBAAiBA,EAAI,gBACrB,gBAAiBA,EAAI,eAAA,CAEzB,CCTO,SAASC,EAAqBC,EAAoD,CACvF,KAAM,CAAE,mBAAAC,EAAoB,oBAAAC,CAAA,EAAwBN,uBAAA,EAEpDO,EAAAA,UAAU,IAAM,CACd,GAAI,CAACH,GAAU,QAAS,OAExBC,EAAmBD,EAAS,OAAO,EACnC,MAAMI,EAAS,IAAM,CACdF,EAAA,CACP,EAEMG,EAAOL,EAAS,QACtB,OAAAK,EAAK,iBAAiB,QAASD,CAAM,EACrCC,EAAK,iBAAiB,aAAcD,CAAM,EAEnC,IAAM,CACXC,EAAK,oBAAoB,QAASD,CAAM,EACxCC,EAAK,oBAAoB,aAAcD,CAAM,EAC7CH,EAAmB,IAAI,CACzB,CACF,EAAG,CAACA,EAAoBD,EAAUE,CAAmB,CAAC,CACxD,CCpBA,MAAMI,EAAmD,CACvD,iBAAkB,GAClB,iBAAkB,GAClB,gBAAiB,GACjB,aAAc,EACd,WAAY,IACd,EAEMC,EAA4B,CAChC,yBACA,aACA,WACF,EAEMC,EAAsB,IACtB,OAAO,OAAW,KAAe,CAAC,OAAO,eAAe,gBAAwB,GAC7ED,EAA0B,KAAME,GAAS,OAAO,cAAc,gBAAgBA,CAAI,CAAC,GAAK,GAG1F,SAASC,EAAoBC,EAAsC,GAA+B,CACvG,KAAM,CACJ,aAAAC,EACA,WAAAC,EACA,QAAAC,EACA,YAAAC,EAAc,IACd,YAAAC,EAAc,IACd,qBAAAC,EAAuB,GACvB,iBAAAC,EAAmBZ,CAAA,EACjBK,EAEE,CAAE,eAAAQ,EAAgB,eAAAC,EAAgB,UAAAC,CAAA,EAAczB,EAAAA,qBAAA,EAEhD0B,EAAmBC,EAAAA,OAA6B,IAAI,EACpDC,EAAYD,EAAAA,OAA2B,IAAI,EAC3CE,EAAeF,EAAAA,OAA6C,IAAI,EAChEG,EAAwBH,EAAAA,OAAO,EAAI,EACnCI,EAAmBJ,EAAAA,OAAO,EAAK,EAE/B,CAACK,EAAYC,CAAa,EAAIC,EAAAA,SAAS,EAAK,EAC5C,CAACC,EAAaC,CAAc,EAAIF,EAAAA,SAAS,EAAK,EAC9C,CAACG,EAAUC,CAAW,EAAIJ,EAAAA,SAAwB,IAAI,EAEtDK,EAAcC,EAAAA,YAClB,MAAOC,GAAe,CACpB,GAAI,CAACA,GAAQA,EAAK,MAAQ,EAAG,OAC7B,MAAMC,EAAc,MAAMD,EAAK,YAAA,EAC/B,GAAIzB,EAAc,CAChBA,EAAa0B,CAAW,EACxB,MACF,CACAnB,EAAemB,CAAW,CAC5B,EACA,CAAC1B,EAAcO,CAAc,CAAA,EAGzBoB,EAAgBH,EAAAA,YAAY,IAAM,CACjCZ,EAAU,UACfA,EAAU,QAAQ,YAAY,QAASgB,GAAUA,EAAM,MAAM,EAC7DhB,EAAU,QAAU,KACtB,EAAG,CAAA,CAAE,EAECiB,EAAgBL,EAAAA,YACpB,CAAC,CAAE,QAAAM,EAAU,EAAA,EAAiC,KAAgB,CAC5D,MAAMC,EAAgBrB,EAAiB,QACvC,GAAI,CAACqB,EACH,OAAAhB,EAAiB,QAAU,GACpB,GAMT,GAHAD,EAAsB,QAAU,CAACgB,EACjCpB,EAAiB,QAAU,KAEvBqB,EAAc,QAAU,WAC1B,OAAKD,IACC7B,EAAYA,EAAA,EACXO,EAAA,GAEPmB,EAAA,EACAP,EAAe,EAAK,EACb,GAGT,GAAI,CACFW,EAAc,YAAA,CAChB,MAAQ,CAER,CAEAA,EAAc,OAAS,IAAM,CACLjB,EAAsB,UAEtCb,EAAYA,EAAA,EACXO,EAAA,GAEPmB,EAAA,EACAP,EAAe,EAAK,CACtB,EAEA,GAAI,CACFW,EAAc,KAAA,CAChB,OAASC,EAAO,CACdL,EAAA,EACAP,EAAe,EAAK,EACpBlB,IAAU8B,CAAK,CACjB,CAEA,MAAO,EACT,EACA,CAACL,EAAenB,EAAgBP,EAAYC,CAAO,CAAA,EAG/C+B,EAAiBT,EAAAA,YAAY,SAA8B,CAC/D,GAAId,EAAiB,QAAS,MAAO,GAErC,GADAK,EAAiB,QAAU,GAEzB,OAAO,UAAc,KACrB,CAAC,UAAU,cAAc,cACzB,OAAO,OAAW,KAClB,OAAO,OAAO,cAAkB,IAChC,CACA,MAAMiB,EAAQ,IAAI,MAAM,kEAAkE,EAC1F,OAAAV,EAAYU,EAAM,OAAO,EACzB9B,IAAU8B,CAAK,EACR,EACT,CAEA,GAAI,CACF,MAAME,EAAS,MAAM,UAAU,aAAa,aAAa,CAAE,MAAO5B,EAAkB,EACpFM,EAAU,QAAUsB,EAEpB,MAAMC,EAAWvC,EAAA,EACXwC,EAAkBD,EAAW,CAAE,SAAAA,CAAA,EAAa,OAC5CJ,EAAgB,IAAI,OAAO,cAAcG,EAAQE,CAAe,EAEtE,OAAAL,EAAc,gBAAmBM,GAAU,CACpCd,EAAYc,EAAM,IAAI,CAC7B,EAEAN,EAAc,QAAWM,GAAU,CACjC,MAAML,EAASK,GAAsB,OAAS,IAAI,MAAM,6BAA6B,EACrFf,EAAaU,GAAiB,SAAW,kBAAkB,EAC3D9B,IAAU8B,CAAK,CACjB,EAEAtB,EAAiB,QAAUqB,EAC3BX,EAAe,EAAI,EACnBE,EAAY,IAAI,EAChBS,EAAc,MAAM3B,CAAW,EAE3BW,EAAiB,UACnBA,EAAiB,QAAU,GAC3Bc,EAAA,GAGK,EACT,OAASG,EAAO,CACd,OAAAL,EAAA,EACAP,EAAe,EAAK,EACpBE,EAAY,mBAAmB,EAC/BpB,IAAU8B,CAAK,EACR,EACT,CACF,EAAG,CAAC1B,EAAkBqB,EAAeJ,EAAarB,EAASE,EAAayB,CAAa,CAAC,EAEhFS,EAAad,EAAAA,YAAY,IAAM,CAC/BX,EAAa,UACf,aAAaA,EAAa,OAAO,EACjCA,EAAa,QAAU,MAGzBI,EAAc,EAAI,EAElBJ,EAAa,QAAU,WAAW,IAAM,CAClCR,GACFI,EAAA,EAEGwB,EAAA,CACP,EAAG9B,CAAW,CAChB,EAAG,CAACA,EAAaM,EAAWJ,EAAsB4B,CAAc,CAAC,EAE3DM,EAAYf,EAAAA,YAAY,IAAM,CAClCP,EAAc,EAAK,EACfJ,EAAa,UACf,aAAaA,EAAa,OAAO,EACjCA,EAAa,QAAU,MAEzBgB,EAAA,CACF,EAAG,CAACA,CAAa,CAAC,EAElBtC,EAAAA,UAAU,IACD,IAAM,CACPsB,EAAa,UACf,aAAaA,EAAa,OAAO,EACjCA,EAAa,QAAU,MAEzB,MAAM2B,EAAK9B,EAAiB,QAC5B,GAAI8B,IACF9B,EAAiB,QAAU,KACvB8B,EAAG,QAAU,YACf,GAAI,CAAEA,EAAG,KAAA,CAAQ,MAAQ,CAAe,CAGxC5B,EAAU,UACZA,EAAU,QAAQ,YAAY,QAASgB,GAAUA,EAAM,MAAM,EAC7DhB,EAAU,QAAU,KAExB,EACC,CAAA,CAAE,EAEL,MAAM6B,EAAgBC,EAAAA,QACpB,KAAO,CACL,cAAgBC,GAA0B,CACxCA,EAAE,eAAA,EACFL,EAAA,CACF,EACA,YAAcK,GAA0B,CACtCA,EAAE,eAAA,EACFJ,EAAA,CACF,EACA,gBAAkBI,GAA0B,CAC1CA,EAAE,eAAA,EACFJ,EAAA,CACF,EACA,eAAiBI,GAA0B,CACzCA,EAAE,eAAA,EACFJ,EAAA,CACF,CAAA,GAEF,CAACD,EAAYC,CAAS,CAAA,EAGxB,MAAO,CACL,WAAAvB,EACA,YAAAG,EACA,SAAAE,EACA,eAAAY,EACA,cAAAJ,EACA,WAAAS,EACA,UAAAC,EACA,cAAAE,CAAA,CAEJ,CCjPO,SAASG,EAAoCP,EAAUQ,EAA6BC,EAAkB,CAAA,EAAI,CAC/G,KAAM,CAAE,OAAAC,CAAA,EAAW/D,uBAAA,EAEnBO,EAAAA,UAAU,IACDwD,EAAO,GAAGV,EAAOQ,CAAO,EAC9B,CAACR,EAAOQ,EAASE,EAAQ,GAAGD,CAAI,CAAC,CACtC,CC+DO,SAASE,GAA8B,CAC5C,MAAM9D,EAAMF,EAAAA,qBAAA,EACNiE,EAAK/D,EAAI,OAEf,MAAO,CACL,MAAO,CACL,SAAUA,EAAI,SACd,gBAAiBA,EAAI,gBACrB,YAAaA,EAAI,YACjB,eAAgBA,EAAI,eACpB,eAAgBA,EAAI,eACpB,gBAAiBA,EAAI,gBACrB,gBAAiBA,EAAI,gBACrB,gBAAiBA,EAAI,gBACrB,oBAAqBA,EAAI,oBACzB,qBAAsBA,EAAI,qBAC1B,gBAAiBA,EAAI,gBACrB,YAAaA,EAAI,YACjB,MAAOA,EAAI,MACX,WAAYA,EAAI,WAChB,kBAAmBA,EAAI,kBACvB,QAASA,EAAI,QACb,aAAcA,EAAI,aAClB,iBAAkBA,EAAI,gBAAA,EAExB,QAAS,CACP,gBAAiBA,EAAI,gBACrB,eAAgBA,EAAI,eACpB,eAAgBA,EAAI,eACpB,UAAWA,EAAI,UACf,oBAAqBA,EAAI,oBACzB,cAAeA,EAAI,cACnB,sBAAuBA,EAAI,sBAC3B,kBAAmBA,EAAI,kBACvB,kBAAmBA,EAAI,kBACvB,mBAAoBA,EAAI,mBACxB,WAAYA,EAAI,WAChB,iBAAkBA,EAAI,iBACtB,oBAAqBA,EAAI,oBACzB,mBAAoBA,EAAI,mBACxB,mBAAoBA,EAAI,kBAAA,EAE1B,OAAQ,CACN,eAAiBgE,GAAMD,EAAG,GAAG,gBAAiBC,CAAC,EAC/C,gBAAkBA,GAAMD,EAAG,GAAG,iBAAkBC,CAAC,EACjD,oBAAsBA,GAAMD,EAAG,GAAG,qBAAsBC,CAAC,EACzD,iBAAmBA,GAAMD,EAAG,GAAG,kBAAmBC,CAAC,EACnD,kBAAoBA,GAAMD,EAAG,GAAG,mBAAoBC,CAAC,EACrD,cAAgBA,GAAMD,EAAG,GAAG,eAAgBC,CAAC,EAC7C,eAAiBA,GAAMD,EAAG,GAAG,gBAAiBC,CAAC,EAC/C,eAAiBA,GAAMD,EAAG,GAAG,gBAAiBC,CAAC,EAC/C,iBAAmBA,GAAMD,EAAG,GAAG,kBAAmBC,CAAC,EACnD,qBAAuBA,GAAMD,EAAG,GAAG,uBAAwBC,CAAC,EAC5D,eAAiBA,GAAMD,EAAG,GAAG,gBAAiBC,CAAC,EAC/C,YAAcA,GAAMD,EAAG,GAAG,uBAAwBC,CAAC,EACnD,eAAiBA,GAAMD,EAAG,GAAG,0BAA2BC,CAAC,EACzD,eAAiBA,GAAMD,EAAG,GAAG,0BAA2BC,CAAC,EACzD,mBAAqBA,GAAMD,EAAG,GAAG,oBAAqBC,CAAC,EACvD,QAAUA,GAAMD,EAAG,GAAG,QAASC,CAAC,EAChC,mBAAqBA,GAAMD,EAAG,GAAG,oBAAqBC,CAAC,EACvD,aAAeA,GAAMD,EAAG,GAAG,aAAcC,CAAC,EAC1C,oBAAsBA,GAAMD,EAAG,GAAG,qBAAsBC,CAAC,EACzD,cAAgBA,GAAMD,EAAG,GAAG,cAAeC,CAAC,CAAA,EAE9C,IAAK,CACH,OAAQhE,EAAI,OACZ,aAAcA,EAAI,YAAA,CACpB,CAEJ,CCjIO,MAAMiE,UAA2BC,EAAAA,SAA4D,CAClG,YAAYC,EAAgC,CAC1C,MAAMA,CAAK,EACX,KAAK,MAAQ,CAAE,SAAU,GAAO,MAAO,IAAA,CACzC,CAEA,OAAO,yBAAyBrB,EAAuC,CACrE,MAAO,CAAE,SAAU,GAAM,MAAAA,CAAA,CAC3B,CAEA,kBAAkBA,EAAcsB,EAAiB,CAC/C,KAAK,MAAM,UAAUtB,EAAOsB,CAAI,CAClC,CAEA,MAAQ,IAAM,CACZ,KAAK,SAAS,CAAE,SAAU,GAAO,MAAO,KAAM,CAChD,EAEA,QAAoB,CAClB,GAAI,KAAK,MAAM,SAAU,CACvB,KAAM,CAAE,SAAAC,GAAa,KAAK,MAC1B,OAAIA,EACE,OAAOA,GAAa,WACf,KAAK,MAAM,MAAQA,EAAS,KAAK,MAAM,MAAO,KAAK,KAAK,EAAI,KAE9DA,EAGPC,yBAAC,MAAA,CAAI,MAAO,CAAE,QAAS,OAAQ,UAAW,SAAU,MAAO,SAAA,EACzD,SAAA,CAAAC,EAAAA,kBAAAA,IAAC,MAAG,SAAA,sBAAA,CAAoB,0BACvB,IAAA,CAAG,SAAA,KAAK,MAAM,OAAO,SAAW,+BAA+B,EAChEA,EAAAA,kBAAAA,IAAC,SAAA,CAAO,QAAS,KAAK,MAAO,MAAO,CAAE,UAAW,OAAQ,QAAS,WAAY,OAAQ,SAAA,EAAa,SAAA,WAAA,CAEnG,CAAA,EACF,CAEJ,CACA,OAAO,KAAK,MAAM,QACpB,CACF"}
package/dist/index.d.ts CHANGED
@@ -1,340 +1,10 @@
1
- import * as React from 'react';
2
-
3
- export type AgentType =
4
- | 'text'
5
- | 'voice'
6
- | 'text_and_voice'
7
- | 'cloud_avatar'
8
- | 'desktop_avatar'
9
- | (string & {});
10
-
11
- export type ConnectionState =
12
- | 'idle'
13
- | 'initializing'
14
- | 'connecting'
15
- | 'connected'
16
- | 'reconnecting'
17
- | 'failed'
18
- | 'ended'
19
- | (string & {});
20
-
21
- export type SessionState =
22
- | 'idle'
23
- | 'user_speaking'
24
- | 'agent_thinking'
25
- | 'agent_speaking'
26
- | 'tool_executing'
27
- | 'terminating'
28
- | 'terminated'
29
- | (string & {});
30
-
31
- export type CloudStreamState =
32
- | 'idle'
33
- | 'connecting'
34
- | 'loading'
35
- | 'connected'
36
- | 'disconnected'
37
- | 'error'
38
- | (string & {});
39
-
40
- export interface RqmiiSessionInfo {
41
- sessionId: string | null;
42
- role: string | null;
43
- agentType: AgentType | null;
44
- streamingUrl: string | null;
45
- uniqueId: string | null;
46
- }
47
-
48
- export interface RqmiiMessage {
49
- id: string;
50
- role: 'assistant' | 'user' | string;
51
- text: string;
52
- streaming?: boolean;
53
- timestamp?: string;
54
- }
55
-
56
- export interface RqmiiReconnectOptions {
57
- enabled?: boolean;
58
- maxAttempts?: number;
59
- initialDelayMs?: number;
60
- maxDelayMs?: number;
61
- timeoutMs?: number;
62
- }
63
-
64
- export interface RqmiiPCMOptions {
65
- encoding?: string;
66
- channels?: number;
67
- sampleRate?: number;
68
- }
69
-
70
- export interface InitializeSessionArgs {
71
- apiKey?: string;
72
- publicChatId?: string;
73
- agentId?: string;
74
- language?: string;
75
- }
76
-
77
- export interface JoinDesktopSessionArgs {
78
- uniqueId: string;
79
- }
80
-
81
- export interface RqmiiAgentProviderProps {
82
- children?: React.ReactNode;
83
- wsUrl: string;
84
- restUrl: string;
85
- reconnectOptions?: RqmiiReconnectOptions;
86
- enableAudio?: boolean;
87
- pcmOptions?: RqmiiPCMOptions;
88
- debug?: boolean;
89
- heartbeatIntervalSeconds?: number;
90
- onSessionExpired?: (payload?: { sessionId?: string; message?: string; timestamp?: string }) => void;
91
- onSessionTerminated?: () => void;
92
- onError?: (payload?: { code?: string; message?: string; detail?: string }) => void;
93
- onDisconnect?: (reason?: string) => void;
94
- onReconnectSuccess?: (payload?: { sessionId?: string; reconnectToken?: string; role?: string }) => void;
95
- onReconnectFailed?: (payload?: { code?: string; reason?: string }) => void;
96
- }
97
-
98
- export interface RqmiiAgentRoomSessionInitialize {
99
- mode?: 'initialize';
100
- apiKey?: string;
101
- publicChatId?: string;
102
- agentId?: string;
103
- language?: string;
104
- }
105
-
106
- export interface RqmiiAgentRoomSessionJoinDesktop {
107
- mode: 'join_desktop';
108
- uniqueId: string;
109
- }
110
-
111
- export type RqmiiAgentRoomSession =
112
- | RqmiiAgentRoomSessionInitialize
113
- | RqmiiAgentRoomSessionJoinDesktop;
114
-
115
- export interface RqmiiAgentRoomProps extends RqmiiAgentProviderProps {
116
- session?: RqmiiAgentRoomSession;
117
- connect?: boolean;
118
- onError?: (error: unknown) => void;
119
- onInitialized?: (data: any) => void;
120
- }
121
-
122
- export interface RqmiiCloudAvatarPlayerProps {
123
- className?: string;
124
- style?: React.CSSProperties;
125
- autoConnect?: boolean;
126
- muted?: boolean;
127
- onConnected?: () => void;
128
- onDisconnected?: () => void;
129
- onError?: (error: unknown) => void;
130
- }
131
-
132
- export interface EpicPixelStreamingPlayerProps {
133
- signallingUrl?: string;
134
- autoConnect?: boolean;
135
- width?: string | number;
136
- height?: string | number;
137
- onConnecting?: () => void;
138
- onLoading?: () => void;
139
- onConnected?: () => void;
140
- onDisconnected?: () => void;
141
- onError?: (error: unknown) => void;
142
- muted?: boolean;
143
- }
144
-
145
- export interface UseRqmiiConnectionReturn {
146
- connectionState: ConnectionState;
147
- isConnected: boolean;
148
- isSessionReady: boolean;
149
- error: string | null;
150
- reconnectAttempt: number;
151
- session: RqmiiSessionInfo;
152
- creditExhausted?: boolean;
153
- creditError?: string | null;
154
- sessionState: SessionState;
155
- isSessionTerminated: boolean;
156
- isSessionTerminating: boolean;
157
- isAgentThinking: boolean;
158
- isAgentSpeaking: boolean;
159
- isToolExecuting: boolean;
160
- initializeSession: (args?: InitializeSessionArgs) => Promise<any>;
161
- joinDesktopSession: (args: JoinDesktopSessionArgs) => Promise<any>;
162
- disconnect: () => void;
163
- terminateSession: () => Promise<{ success: boolean; skipped?: boolean; error?: unknown }>;
164
- interrupt: () => boolean;
165
- clearSessionHistory: () => boolean;
166
- changeSessionLanguage: (language: string) => boolean;
167
- }
168
-
169
- export interface UseRqmiiSessionStateReturn {
170
- sessionState: SessionState;
171
- isSessionTerminated: boolean;
172
- isSessionTerminating: boolean;
173
- isAgentThinking: boolean;
174
- isAgentSpeaking: boolean;
175
- isToolExecuting: boolean;
176
- }
177
-
178
- export interface UseRqmiiMessagesReturn {
179
- messages: RqmiiMessage[];
180
- sendTextMessage: (text: string) => boolean;
181
- clearMessages: () => void;
182
- }
183
-
184
- export interface UseRqmiiVoiceReturn {
185
- sendAudioChunk: (audio: ArrayBuffer | Uint8Array | unknown) => boolean;
186
- endAudioStream: () => boolean;
187
- isAudioPlaying: boolean;
188
- transcript: unknown;
189
- partialTranscript: unknown;
190
- interrupt: () => boolean;
191
- resumeAudioPlayback: () => Promise<void>;
192
- attachAudioElement: (element: HTMLAudioElement | null) => void;
193
- }
194
-
195
- export interface UseRqmiiAvatarReturn {
196
- streamingUrl: string | null;
197
- isAvatarSpeaking: boolean;
198
- speakingSource: 'avatar_events';
199
- isCloudAvatar: boolean;
200
- isDesktopAvatar: boolean;
201
- cloudStreamState: CloudStreamState;
202
- cloudStreamError: string | null;
203
- isCloudStreamConnected: boolean;
204
- isCloudStreamLoading: boolean;
205
- setCloudStreamState: (nextState: CloudStreamState, error?: unknown) => void;
206
- }
207
-
208
- export interface UseRqmiiPressToTalkOptions {
209
- onAudioChunk?: (chunk: ArrayBuffer) => void;
210
- onAudioEnd?: () => void;
211
- onError?: (error: unknown) => void;
212
- holdDelayMs?: number;
213
- timesliceMs?: number;
214
- interruptOnHoldStart?: boolean;
215
- audioConstraints?: MediaTrackConstraints;
216
- }
217
-
218
- export interface UseRqmiiPressToTalkReturn {
219
- isPressing: boolean;
220
- isRecording: boolean;
221
- micError: string | null;
222
- startRecording: () => Promise<boolean>;
223
- stopRecording: (args?: { discard?: boolean }) => boolean;
224
- startPress: () => void;
225
- stopPress: () => void;
226
- eventHandlers: React.HTMLAttributes<HTMLElement>;
227
- }
228
-
229
- export interface UseRqmiiVADOptions {
230
- onAudioChunk?: (chunk: ArrayBuffer) => void;
231
- onAudioEnd?: () => void;
232
- onSpeechStart?: () => void;
233
- onSpeechEnd?: () => void;
234
- onVADMisfire?: () => void;
235
- onError?: (error: unknown) => void;
236
- interruptOnSpeechStart?: boolean;
237
- forceAudioMp4?: boolean;
238
- }
239
-
240
- export interface UseRqmiiVADReturn {
241
- isListening: boolean;
242
- isLoading: boolean;
243
- isSpeaking: boolean;
244
- micError: string | null;
245
- toggle: () => void;
246
- start: () => void;
247
- pause: () => void;
248
- userSpeaking: boolean;
249
- }
250
-
251
- export interface RqmiiAgentContextValue extends UseRqmiiConnectionReturn {
252
- isAudioPlaying: boolean;
253
- isAvatarSpeaking: boolean;
254
- sessionState: SessionState;
255
- isSessionTerminated: boolean;
256
- isSessionTerminating: boolean;
257
- isAgentThinking: boolean;
258
- isAgentSpeaking: boolean;
259
- isToolExecuting: boolean;
260
- cloudStream: {
261
- state: CloudStreamState;
262
- error: string | null;
263
- };
264
- transcript: unknown;
265
- partialTranscript: unknown;
266
- messages: RqmiiMessage[];
267
- initializeSession: (args?: InitializeSessionArgs) => Promise<any>;
268
- joinDesktopSession: (args: JoinDesktopSessionArgs) => Promise<any>;
269
- disconnect: () => void;
270
- terminateSession: () => Promise<{ success: boolean; skipped?: boolean; error?: unknown }>;
271
- emit: (event: string, payload?: unknown) => boolean;
272
- sendTextMessage: (text: string) => boolean;
273
- sendAudioChunk: (audio: ArrayBuffer | Uint8Array | unknown) => boolean;
274
- endAudioStream: () => boolean;
275
- interrupt: () => boolean;
276
- clearSessionHistory: () => boolean;
277
- changeSessionLanguage: (language: string) => boolean;
278
- clearMessages: () => void;
279
- resumeAudioPlayback: () => Promise<void>;
280
- attachAudioElement: (element: HTMLAudioElement | null) => void;
281
- setCloudStreamState: (nextState: CloudStreamState, error?: unknown) => void;
282
- audioElement: HTMLAudioElement | null;
283
- socket: any;
284
- }
285
-
286
- export const AGENT_TYPES: {
287
- readonly TEXT: 'text';
288
- readonly VOICE: 'voice';
289
- readonly TEXT_AND_VOICE: 'text_and_voice';
290
- readonly CLOUD_AVATAR: 'cloud_avatar';
291
- readonly DESKTOP_AVATAR: 'desktop_avatar';
292
- };
293
-
294
- export const SESSION_STATE: {
295
- readonly IDLE: 'idle';
296
- readonly USER_SPEAKING: 'user_speaking';
297
- readonly AGENT_THINKING: 'agent_thinking';
298
- readonly AGENT_SPEAKING: 'agent_speaking';
299
- readonly TOOL_EXECUTING: 'tool_executing';
300
- readonly TERMINATING: 'terminating';
301
- readonly TERMINATED: 'terminated';
302
- };
303
-
304
- export const SOCKET_EVENTS: Record<string, string>;
305
-
306
- export const CONNECTION_STATE: {
307
- readonly IDLE: 'idle';
308
- readonly INITIALIZING: 'initializing';
309
- readonly CONNECTING: 'connecting';
310
- readonly CONNECTED: 'connected';
311
- readonly RECONNECTING: 'reconnecting';
312
- readonly FAILED: 'failed';
313
- readonly ENDED: 'ended';
314
- };
315
-
316
- export const CLOUD_STREAM_STATE: {
317
- readonly IDLE: 'idle';
318
- readonly CONNECTING: 'connecting';
319
- readonly LOADING: 'loading';
320
- readonly CONNECTED: 'connected';
321
- readonly DISCONNECTED: 'disconnected';
322
- readonly ERROR: 'error';
323
- };
324
-
325
- export function RqmiiAgentProvider(props: RqmiiAgentProviderProps): React.JSX.Element;
326
- export function useRqmiiAgentContext(): RqmiiAgentContextValue;
327
-
328
- export function useRqmiiAgent(): RqmiiAgentContextValue;
329
- export function useRqmiiConnection(): UseRqmiiConnectionReturn;
330
- export function useRqmiiSessionState(): UseRqmiiSessionStateReturn;
331
- export function useRqmiiMessages(): UseRqmiiMessagesReturn;
332
- export function useRqmiiVoice(): UseRqmiiVoiceReturn;
333
- export function useRqmiiAvatar(): UseRqmiiAvatarReturn;
334
- export function useRqmiiAudioElement(audioRef: React.RefObject<HTMLAudioElement | null>): void;
335
- export function useRqmiiPressToTalk(options?: UseRqmiiPressToTalkOptions): UseRqmiiPressToTalkReturn;
336
- export function useRqmiiVAD(options?: UseRqmiiVADOptions): UseRqmiiVADReturn;
337
-
338
- export function RqmiiAgentRoom(props: RqmiiAgentRoomProps): React.JSX.Element;
339
- export function RqmiiCloudAvatarPlayer(props: RqmiiCloudAvatarPlayerProps): React.JSX.Element | null;
340
- export const EpicPixelStreamingPlayer: React.ComponentType<EpicPixelStreamingPlayerProps>;
1
+ export { RqmiiAgentProvider, useRqmiiAgentContext } from './provider/RqmiiAgentProvider';
2
+ export { useRqmiiAgent, useRqmiiConnection, useRqmiiSession, useRqmiiMessages, useRqmiiVoice, useRqmiiAvatar, useRqmiiAudioElement, useRqmiiPressToTalk, useRqmiiVAD, useRqmiiEvents, useRqmiiSDK, } from './hooks';
3
+ export type { RqmiiSDKHandle, RqmiiEventListeners } from './hooks';
4
+ export { RqmiiAgentRoom } from './components/RqmiiAgentRoom';
5
+ export { RqmiiCloudAvatarPlayer } from './components/RqmiiCloudAvatarPlayer';
6
+ export { RqmiiErrorBoundary } from './components/RqmiiErrorBoundary';
7
+ export { AGENT_TYPES, SOCKET_EVENTS, CONNECTION_STATE, CLOUD_STREAM_STATE, SESSION_STATE, DEFAULT_RECONNECT_OPTIONS, DEFAULT_PCM_OPTIONS } from './core/constants';
8
+ export type { AgentType, ConnectionState, SessionState, CloudStreamState, RqmiiSessionInfo, RqmiiMessage, PublicAgent, RqmiiReconnectOptions, RqmiiPCMOptions, InitializeSessionArgs, JoinDesktopSessionArgs, RqmiiAgentProviderProps, RqmiiAgentContextValue, RqmiiState, EventType, EventHandlerMap, SessionData, TranscriptPayload, PartialTranscriptPayload, RqmiiAgentChatProps, RqmiiAgentChatPreviewProps, RqmiiAgentRoomProps, RqmiiCloudAvatarPlayerProps, UseRqmiiConnectionReturn, UseRqmiiMessagesReturn, UseRqmiiVoiceReturn, UseRqmiiAvatarReturn, UseRqmiiPressToTalkReturn, UseRqmiiVADReturn, UseRqmiiSessionStateReturn, } from './types';
9
+ export { EventEmitter } from './core/events/emitter';
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAEzF,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,WAAW,EACX,cAAc,EACd,WAAW,GACZ,MAAM,SAAS,CAAC;AAEjB,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,aAAa,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEnK,YAAY,EACV,SAAS,EACT,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,qBAAqB,EACrB,eAAe,EACf,qBAAqB,EACrB,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,UAAU,EACV,SAAS,EACT,eAAe,EACf,WAAW,EACX,iBAAiB,EACjB,wBAAwB,EACxB,mBAAmB,EACnB,0BAA0B,EAC1B,mBAAmB,EACnB,2BAA2B,EAC3B,wBAAwB,EACxB,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,iBAAiB,EACjB,0BAA0B,GAC3B,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}