@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.
- package/README.md +103 -357
- package/dist/{RqmiiCloudAvatarPlayer-BnsY8xIR.js → RqmiiCloudAvatarPlayer-CESlcAGy.js} +6095 -6108
- package/dist/RqmiiCloudAvatarPlayer-CESlcAGy.js.map +1 -0
- package/dist/RqmiiCloudAvatarPlayer-D5npgPcs.cjs +2939 -0
- package/dist/RqmiiCloudAvatarPlayer-D5npgPcs.cjs.map +1 -0
- package/dist/agent-react-sdk.css +1 -1
- package/dist/components/RqmiiAgentRoom.d.ts +3 -0
- package/dist/components/RqmiiAgentRoom.d.ts.map +1 -0
- package/dist/components/RqmiiCloudAvatarPlayer.d.ts +3 -0
- package/dist/components/RqmiiCloudAvatarPlayer.d.ts.map +1 -0
- package/dist/components/RqmiiErrorBoundary.d.ts +19 -0
- package/dist/components/RqmiiErrorBoundary.d.ts.map +1 -0
- package/dist/components/pxs/EpicPixelStreamingPlayer.d.ts +5 -0
- package/dist/components/pxs/EpicPixelStreamingPlayer.d.ts.map +1 -0
- package/dist/core/constants.d.ts +81 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/events/emitter.d.ts +10 -0
- package/dist/core/events/emitter.d.ts.map +1 -0
- package/dist/core/managers/audio.d.ts +24 -0
- package/dist/core/managers/audio.d.ts.map +1 -0
- package/dist/core/managers/heartbeat.d.ts +13 -0
- package/dist/core/managers/heartbeat.d.ts.map +1 -0
- package/dist/core/managers/reconnect.d.ts +29 -0
- package/dist/core/managers/reconnect.d.ts.map +1 -0
- package/dist/core/managers/session.d.ts +20 -0
- package/dist/core/managers/session.d.ts.map +1 -0
- package/dist/core/managers/socket.d.ts +15 -0
- package/dist/core/managers/socket.d.ts.map +1 -0
- package/dist/core/state/reducer.d.ts +4 -0
- package/dist/core/state/reducer.d.ts.map +1 -0
- package/dist/core/state/selectors.d.ts +24 -0
- package/dist/core/state/selectors.d.ts.map +1 -0
- package/dist/core/state/types.d.ts +60 -0
- package/dist/core/state/types.d.ts.map +1 -0
- package/dist/core/utils/accumulator.d.ts +11 -0
- package/dist/core/utils/accumulator.d.ts.map +1 -0
- package/dist/core/utils/agent-type.d.ts +2 -0
- package/dist/core/utils/agent-type.d.ts.map +1 -0
- package/dist/core/utils/bytes.d.ts +2 -0
- package/dist/core/utils/bytes.d.ts.map +1 -0
- package/dist/core/utils/sleep.d.ts +2 -0
- package/dist/core/utils/sleep.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +12 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-agent.d.ts +2 -0
- package/dist/hooks/use-rqmii-agent.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-audio-element.d.ts +2 -0
- package/dist/hooks/use-rqmii-audio-element.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-avatar.d.ts +13 -0
- package/dist/hooks/use-rqmii-avatar.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-connection.d.ts +27 -0
- package/dist/hooks/use-rqmii-connection.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-events.d.ts +3 -0
- package/dist/hooks/use-rqmii-events.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-messages.d.ts +6 -0
- package/dist/hooks/use-rqmii-messages.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-press-to-talk.d.ts +3 -0
- package/dist/hooks/use-rqmii-press-to-talk.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-sdk.d.ts +81 -0
- package/dist/hooks/use-rqmii-sdk.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-session.d.ts +9 -0
- package/dist/hooks/use-rqmii-session.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-vad.d.ts +3 -0
- package/dist/hooks/use-rqmii-vad.d.ts.map +1 -0
- package/dist/hooks/use-rqmii-voice.d.ts +12 -0
- package/dist/hooks/use-rqmii-voice.d.ts.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +10 -340
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +270 -20
- package/dist/index.js.map +1 -1
- package/dist/provider/RqmiiAgentProvider.d.ts +4 -0
- package/dist/provider/RqmiiAgentProvider.d.ts.map +1 -0
- package/dist/provider/socket-handlers.d.ts +77 -0
- package/dist/provider/socket-handlers.d.ts.map +1 -0
- package/dist/provider/use-manager-lifecycle.d.ts +76 -0
- package/dist/provider/use-manager-lifecycle.d.ts.map +1 -0
- package/dist/types/index.d.ts +385 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/ui/Orb.d.ts +19 -0
- package/dist/ui/Orb.d.ts.map +1 -0
- package/dist/ui/RqmiiAgentChat.d.ts +4 -0
- package/dist/ui/RqmiiAgentChat.d.ts.map +1 -0
- package/dist/ui/agent-data.d.ts +17 -0
- package/dist/ui/agent-data.d.ts.map +1 -0
- package/dist/ui/chat/ChatBox.d.ts +22 -0
- package/dist/ui/chat/ChatBox.d.ts.map +1 -0
- package/dist/ui/chat/CreditsExhaustedPanel.d.ts +6 -0
- package/dist/ui/chat/CreditsExhaustedPanel.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-avatar.d.ts +3 -0
- package/dist/ui/chat/chat-box-avatar.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-content.d.ts +26 -0
- package/dist/ui/chat/chat-box-content.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-shared.d.ts +24 -0
- package/dist/ui/chat/chat-box-shared.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-text-and-voice.d.ts +3 -0
- package/dist/ui/chat/chat-box-text-and-voice.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-text.d.ts +3 -0
- package/dist/ui/chat/chat-box-text.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-types.d.ts +83 -0
- package/dist/ui/chat/chat-box-types.d.ts.map +1 -0
- package/dist/ui/chat/chat-box-voice.d.ts +3 -0
- package/dist/ui/chat/chat-box-voice.d.ts.map +1 -0
- package/dist/ui/chat/components.d.ts +4 -0
- package/dist/ui/chat/components.d.ts.map +1 -0
- package/dist/ui/chat/panels.d.ts +78 -0
- package/dist/ui/chat/panels.d.ts.map +1 -0
- package/dist/ui/chat/primitives.d.ts +47 -0
- package/dist/ui/chat/primitives.d.ts.map +1 -0
- package/dist/ui/chat/utils.d.ts +7 -0
- package/dist/ui/chat/utils.d.ts.map +1 -0
- package/dist/ui/faces.d.ts +3 -0
- package/dist/ui/faces.d.ts.map +1 -0
- package/dist/ui/languages.d.ts +10 -0
- package/dist/ui/languages.d.ts.map +1 -0
- package/dist/ui.cjs +122 -1
- package/dist/ui.cjs.map +1 -1
- package/dist/ui.d.ts +11 -10
- package/dist/ui.d.ts.map +1 -0
- package/dist/ui.js +1771 -4
- package/dist/ui.js.map +1 -1
- package/package.json +33 -5
- package/dist/RqmiiCloudAvatarPlayer-BnsY8xIR.js.map +0 -1
- package/dist/RqmiiCloudAvatarPlayer-lqCz2xlU.cjs +0 -2938
- 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 @@
|
|
|
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-
|
|
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
|
package/dist/index.cjs.map
CHANGED
|
@@ -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
|
-
|
|
2
|
-
|
|
3
|
-
export type
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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"}
|