@1interface/voice-shell 0.6.1 → 0.7.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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),t=require("@1interface/voice-core/webrtc"),r=e.memo(({engineKey:r,conversationId:o,voiceBridge:a,transportFactory:n,assistantStartsConversation:s,onValue:i})=>{const c=t.useVoiceProviderValue({conversationId:o,voiceBridge:a,transportFactory:n,assistantStartsConversation:s});return e.useLayoutEffect(()=>i(r,c),[i,r,c]),null});exports.default=r;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{memo as t,useLayoutEffect as r}from"react";import{useVoiceProviderValue as o}from"@1interface/voice-core/webrtc";const e=t(({engineKey:t,conversationId:e,voiceBridge:n,transportFactory:a,assistantStartsConversation:s,onValue:i})=>{const c=o({conversationId:e,voiceBridge:n,transportFactory:a,assistantStartsConversation:s});return r(()=>i(t,c),[i,t,c]),null});export{e as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react"),t=require("@1interface/voice-core/ws"),r=e.memo(({engineKey:r,transport:o,conversationId:s,voiceBridge:n,assistantStartsConversation:a,onValue:i})=>{const c=t.useVoiceWsProviderValue({conversationId:s,voiceBridge:n,transport:o,assistantStartsConversation:a});return e.useLayoutEffect(()=>i(r,c),[i,r,c]),null});exports.default=r;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{memo as t,useLayoutEffect as o}from"react";import{useVoiceWsProviderValue as r}from"@1interface/voice-core/ws";const e=t(({engineKey:t,transport:e,conversationId:n,voiceBridge:s,assistantStartsConversation:a,onValue:i})=>{const c=r({conversationId:n,voiceBridge:s,transport:e,assistantStartsConversation:a});return o(()=>i(t,c),[i,t,c]),null});export{e as default};
|
package/dist/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { default as default_2 } from 'react';
|
|
|
3
3
|
import { Provider } from 'react';
|
|
4
4
|
import { ReactNode } from 'react';
|
|
5
5
|
import { VoiceChatBridge } from '@1interface/voice-core';
|
|
6
|
+
import { VoiceTransport } from '@1interface/shared-core';
|
|
6
7
|
import { VoiceTransportFactory } from '@1interface/voice-core';
|
|
7
8
|
import { VoiceUIContextValue } from '@1interface/voice-core';
|
|
8
9
|
|
|
@@ -13,6 +14,10 @@ declare interface AudioPlatformProviderProps {
|
|
|
13
14
|
children: ReactNode;
|
|
14
15
|
}
|
|
15
16
|
|
|
17
|
+
export declare function preloadVoiceEngine(transport: VoiceTransport): Promise<unknown>;
|
|
18
|
+
|
|
19
|
+
export declare const useVoiceEngineReady: () => boolean;
|
|
20
|
+
|
|
16
21
|
export declare const VoiceProvider: default_2.FC<VoiceProviderProps>;
|
|
17
22
|
|
|
18
23
|
declare interface VoiceProviderProps {
|
|
@@ -21,6 +26,7 @@ declare interface VoiceProviderProps {
|
|
|
21
26
|
voiceBridge: VoiceChatBridge;
|
|
22
27
|
transportFactory: VoiceTransportFactory;
|
|
23
28
|
assistantStartsConversation: boolean;
|
|
29
|
+
transport?: VoiceTransport;
|
|
24
30
|
audioPlatform?: AudioPlatform;
|
|
25
31
|
}
|
|
26
32
|
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),r=require("@1interface/voice-core"),o=({value:
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react/jsx-runtime"),t=require("react"),r=require("react-redux"),n=require("@1interface/voice-core"),s=require("@1interface/shared-core");var o="undefined"!=typeof document?document.currentScript:null;const c=({value:t,children:r})=>e.jsx(n.AudioPlatformContext.Provider,{value:t??n.browserAudioPlatform,children:r}),u="ws",i=e=>e===s.VOICE_TRANSPORTS.LEGACY_WS||e===s.VOICE_TRANSPORTS.PIPECAT_WS?u:"webrtc",a=e=>import(e),l=function(e,t,r=a){const n=new Map,s=new Map,o=new Map;return{load:c=>{const u=i(c);let a=n.get(u);if(!a){const c=e[u];if(!c)return Promise.reject(new Error(`No voice-shell engines/<Name>Engine.tsx for the "${u}" engine.`));const i=o.get(u)??0,l=i?function(e,t,r){const n=/import\(\s*["'`]([^"'`]+)["'`]/.exec(String(e))?.[1];if(!n)return null;const s=new URL(n,r);return s.searchParams.set("retry",String(t)),s.href}(c,i,t):null;a=(l?r(l):c()).then(e=>(o.delete(u),s.set(u,e.default),e.default)),a.catch(()=>{n.delete(u),o.set(u,i+1)}),n.set(u,a)}return a},loaded:e=>s.get(i(e))}}(Object.fromEntries(Object.entries(Object.assign({"./engines/WebRtcEngine.tsx":()=>Promise.resolve().then(()=>require("./WebRtcEngine-BKQ3eFVU.cjs")),"./engines/WsEngine.tsx":()=>Promise.resolve().then(()=>require("./WsEngine-ByKZ5xLh.cjs"))})).map(([e,t])=>[e.slice(10,-10).toLowerCase(),t])),"undefined"==typeof document?require("url").pathToFileURL(__filename).href:o&&"SCRIPT"===o.tagName.toUpperCase()&&o.src||new URL("index.js",document.baseURI).href),d=l.load,f=t.createContext(!1),p=({transport:o,children:c,...a})=>{const p=i(o),S=p===u?o:p,[,v]=t.useState(0),g=(e=>l.loaded(e))(o);t.useEffect(()=>{if(g)return;let e=!0;return d(o).then(()=>e&&v(e=>e+1),()=>{}),()=>{e=!1}},[g,o]);const[E,h]=t.useState(null),m=t.useCallback((e,t)=>h(r=>r?.key===e&&r.value===t?r:{key:e,value:t}),[]),x=E?.key===S?E.value:null,P=t.useRef(x),C=t.useRef([]);t.useLayoutEffect(()=>{if(P.current=x,!x)return;const e=C.current;C.current=[],e.forEach(e=>e(x))},[x]),t.useEffect(()=>()=>{const e=C.current;C.current=[],e.forEach(e=>e(null))},[]);const R=t.useCallback(()=>(v(e=>e+1),P.current?Promise.resolve(P.current):new Promise(e=>C.current.push(e))),[]),b=((e,o)=>{const c=r.useDispatch(),a=n.useAudioPlatform(),l=n.useVoiceDisplayState(),f=r.useSelector(e=>e.voice.muted),p=r.useSelector(e=>e.voice.serverMuted),S=r.useSelector(e=>e.voice.pipelineStatus),v=r.useSelector(e=>e.voice.isAgentWorking),g=r.useSelector(e=>e.voice.sessionEndedSignal),E=t.useRef(0);t.useEffect(()=>{E.current++},[e]);const h=t.useCallback(async()=>{i(e)===u&&a.primeGestureAudio?.();const t=++E.current;try{await d(e)}catch{return s.showErrorToast(n.VOICE_CONNECT_ERROR_MESSAGE),!1}const r=await o();return E.current===t&&!!r&&r.enterVoiceMode()},[e,a,o]),m=t.useCallback(()=>{E.current++},[]),x=t.useCallback(()=>c(n.setMuted(!f)),[c,f]),P=t.useCallback(e=>c(n.setSelectedMicId(e)),[c]),C=t.useCallback(e=>c(n.setSelectedSpeakerId(e)),[c]);return t.useMemo(()=>({displayState:l,pipelineStatus:S,isAgentWorking:v,enterVoiceMode:h,exitVoiceMode:m,toggleMute:x,sendText:()=>{},muted:f,serverMuted:p,sessionEndedSignal:g,setInputDevice:P,setOutputDevice:C}),[l,S,v,h,m,x,f,p,g,P,C])})(o,R);return e.jsxs(e.Fragment,{children:[e.jsx(f.Provider,{value:null!==x,children:e.jsx(n.VoiceContext.Provider,{value:x??b,children:c})}),g?e.jsx(g,{engineKey:S,transport:o,onValue:m,...a},S):null]})},S=n.VoiceUIContext.Provider;exports.AudioPlatformProvider=c,exports.VoiceProvider=({audioPlatform:t,transport:r=s.VOICE_TRANSPORTS.PIPECAT_WEBRTC,children:n,...o})=>e.jsx(c,{value:t,children:e.jsx(p,{transport:r,...o,children:n})}),exports.VoiceUIProvider=S,exports.preloadVoiceEngine=function(e){return d(e).catch(()=>{})},exports.useVoiceEngineReady=()=>t.useContext(f);
|
package/dist/index.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{jsx as r}from"react/jsx-runtime";import{
|
|
1
|
+
import{jsx as e,jsxs as r,Fragment as t}from"react/jsx-runtime";import{useContext as n,useState as i,useEffect as o,useCallback as c,useRef as s,useLayoutEffect as u,createContext as a,useMemo as l}from"react";import{useDispatch as d,useSelector as m}from"react-redux";import{AudioPlatformContext as p,browserAudioPlatform as g,VoiceContext as v,useAudioPlatform as f,useVoiceDisplayState as h,VOICE_CONNECT_ERROR_MESSAGE as E,setMuted as P,setSelectedMicId as w,setSelectedSpeakerId as x,VoiceUIContext as M}from"@1interface/voice-core";import{VOICE_TRANSPORTS as S,showErrorToast as W}from"@1interface/shared-core";const y=({value:r,children:t})=>e(p.Provider,{value:r??g,children:t}),j="ws",b=e=>e===S.LEGACY_WS||e===S.PIPECAT_WS?j:"webrtc",A=e=>import(e),k=function(e,r,t=A){const n=new Map,i=new Map,o=new Map;return{load:c=>{const s=b(c);let u=n.get(s);if(!u){const c=e[s];if(!c)return Promise.reject(new Error(`No voice-shell engines/<Name>Engine.tsx for the "${s}" engine.`));const a=o.get(s)??0,l=a?function(e,r,t){const n=/import\(\s*["'`]([^"'`]+)["'`]/.exec(String(e))?.[1];if(!n)return null;const i=new URL(n,t);return i.searchParams.set("retry",String(r)),i.href}(c,a,r):null;u=(l?t(l):c()).then(e=>(o.delete(s),i.set(s,e.default),e.default)),u.catch(()=>{n.delete(s),o.set(s,a+1)}),n.set(s,u)}return u},loaded:e=>i.get(b(e))}}(Object.fromEntries(Object.entries(Object.assign({"./engines/WebRtcEngine.tsx":()=>import("./WebRtcEngine-DCewwH1J.js"),"./engines/WsEngine.tsx":()=>import("./WsEngine-D2V5euGc.js")})).map(([e,r])=>[e.slice(10,-10).toLowerCase(),r])),import.meta.url),C=k.load;function O(e){return C(e).catch(()=>{})}const R=a(!1),T=()=>n(R),V=({transport:n,children:a,...p})=>{const g=b(n),M=g===j?n:g,[,S]=i(0),y=(e=>k.loaded(e))(n);o(()=>{if(y)return;let e=!0;return C(n).then(()=>e&&S(e=>e+1),()=>{}),()=>{e=!1}},[y,n]);const[A,O]=i(null),T=c((e,r)=>O(t=>t?.key===e&&t.value===r?t:{key:e,value:r}),[]),V=A?.key===M?A.value:null,I=s(V),L=s([]);u(()=>{if(I.current=V,!V)return;const e=L.current;L.current=[],e.forEach(e=>e(V))},[V]),o(()=>()=>{const e=L.current;L.current=[],e.forEach(e=>e(null))},[]);const _=c(()=>(S(e=>e+1),I.current?Promise.resolve(I.current):new Promise(e=>L.current.push(e))),[]),D=((e,r)=>{const t=d(),n=f(),i=h(),u=m(e=>e.voice.muted),a=m(e=>e.voice.serverMuted),p=m(e=>e.voice.pipelineStatus),g=m(e=>e.voice.isAgentWorking),v=m(e=>e.voice.sessionEndedSignal),M=s(0);o(()=>{M.current++},[e]);const S=c(async()=>{b(e)===j&&n.primeGestureAudio?.();const t=++M.current;try{await C(e)}catch{return W(E),!1}const i=await r();return M.current===t&&!!i&&i.enterVoiceMode()},[e,n,r]),y=c(()=>{M.current++},[]),A=c(()=>t(P(!u)),[t,u]),k=c(e=>t(w(e)),[t]),O=c(e=>t(x(e)),[t]);return l(()=>({displayState:i,pipelineStatus:p,isAgentWorking:g,enterVoiceMode:S,exitVoiceMode:y,toggleMute:A,sendText:()=>{},muted:u,serverMuted:a,sessionEndedSignal:v,setInputDevice:k,setOutputDevice:O}),[i,p,g,S,y,A,u,a,v,k,O])})(n,_);return r(t,{children:[e(R.Provider,{value:null!==V,children:e(v.Provider,{value:V??D,children:a})}),y?e(y,{engineKey:M,transport:n,onValue:T,...p},M):null]})},I=({audioPlatform:r,transport:t=S.PIPECAT_WEBRTC,children:n,...i})=>e(y,{value:r,children:e(V,{transport:t,...i,children:n})}),L=M.Provider;export{y as AudioPlatformProvider,I as VoiceProvider,L as VoiceUIProvider,O as preloadVoiceEngine,T as useVoiceEngineReady};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@1interface/voice-shell",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.7.1",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -26,8 +26,8 @@
|
|
|
26
26
|
"access": "public"
|
|
27
27
|
},
|
|
28
28
|
"dependencies": {
|
|
29
|
-
"@1interface/shared-core": "^0.
|
|
30
|
-
"@1interface/voice-core": "^0.
|
|
29
|
+
"@1interface/shared-core": "^0.18.0",
|
|
30
|
+
"@1interface/voice-core": "^0.8.1"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"@reduxjs/toolkit": "^2.0.0",
|