@theoremjs/studio 0.3.4-next.508.geda6db0 → 0.3.4-next.522.g9e684cd
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/compile.js +44 -2
- package/draft.d.ts +54 -1
- package/draft.js +14 -0
- package/mod.d.ts +1 -1
- package/mod.js +1 -1
- package/package.json +4 -4
- package/page/assets/{Banner-BcHZFaJb.js → Banner-UZW6WFTG.js} +2 -2
- package/page/assets/{ConsoleFrame-Byq_hSpu.js → ConsoleFrame-C6ZxuLse.js} +1 -1
- package/page/assets/{ContextMenu-C6S-GYrc.js → ContextMenu-ClIUDzvK.js} +2 -2
- package/page/assets/{ToolResultCharts-CkEf5ub5.js → ToolResultCharts-COgqvWEu.js} +1 -1
- package/page/assets/{TraceInspector-BsYHHhGv.js → TraceInspector-D2unePaa.js} +1 -1
- package/page/assets/{TraceOverview-CMFfbfGM.js → TraceOverview-CCA1iUNg.js} +1 -1
- package/page/assets/{_virtual_studio-type-sources-CTIGQ210.js → _virtual_studio-type-sources-DfyVGpe8.js} +47 -17
- package/page/assets/browser-engine-CRGnAh9x.js +11 -0
- package/page/assets/browser-transport-CgmN-3Ia.js +47 -0
- package/page/assets/{compile-egress-BSxOdX4K.js → compile-egress-BRGW9qfO.js} +2 -2
- package/page/assets/{crypto-DAIn4qnM.js → crypto-BoqeX_71.js} +1 -1
- package/page/assets/{encode-files-oYzzs_iG.js → encode-files-DFrbgXms.js} +1 -1
- package/page/assets/{export-agent-BeUTYowB.js → export-agent-U8qRBuhg.js} +1 -1
- package/page/assets/{guardrail-tester-DLT99rnO.js → guardrail-tester-DASanQyo.js} +1 -1
- package/page/assets/host-patterns-cSf1U25G.js +1 -0
- package/page/assets/{index-DNA-Y8Mp.js → index-CGN6iWF2.js} +71 -71
- package/page/assets/{live-ingress-lDUGPwth.js → live-ingress-qi-y5uvH.js} +1 -1
- package/page/assets/{live-messages-BnBioidx.js → live-messages-cl-CI8gZ.js} +1 -1
- package/page/assets/reader-IkImpzZF.js +7 -0
- package/page/assets/shaped-data-CITXsEfw.js +21 -0
- package/page/assets/{stub-B3GersQP.js → stub-Ccyi1ZiM.js} +1 -1
- package/page/assets/studio-code-pane-AoMu0cGy.js +8 -0
- package/page/assets/{studio-console-CJT5FkWm.js → studio-console-JNYkyQ0E.js} +1 -1
- package/page/assets/{studio-decision-DhHdHb7Z.js → studio-decision-BRJuvgS3.js} +1 -1
- package/page/assets/{studio-embedding-B8vBhuZU.js → studio-embedding-D-r2kuz3.js} +1 -1
- package/page/assets/{studio-host-console-CE_5_tEn.js → studio-host-console-HoLSpRVk.js} +2 -2
- package/page/assets/{studio-labels-C2SI_T2p.js → studio-labels-CBcjlfH4.js} +1 -1
- package/page/assets/studio-live-DtywUIK2.js +5 -0
- package/page/assets/{studio-map-CKm_FCd9.js → studio-map-BIJ-S7br.js} +1 -1
- package/page/assets/{studio-trace-replay-BRMD6pex.js → studio-trace-replay-BuOKQwlj.js} +1 -1
- package/page/assets/{studio-type-checker-DoaPHYNy.js → studio-type-checker-C8qG2W9D.js} +1 -1
- package/page/assets/tool-schema-DDkOMTMz.js +17 -0
- package/page/assets/{trace-record-DWxIfO7D.js → trace-record-Dqvj9bhx.js} +1 -1
- package/page/assets/tree-jmLWUWxQ.js +3 -0
- package/page/assets/{turn-client-DF0ije7A.js → turn-client-DSatougR.js} +1 -1
- package/page/assets/types-4jMDDudJ.js +1 -0
- package/page/assets/{use-one-call-Bhnpve1Y.js → use-one-call-BcTU9gJ9.js} +1 -1
- package/page/assets/workspace-B2bnm5qv.js +1 -0
- package/page/index.html +17 -17
- package/read-source.js +10 -1
- package/registrations.d.ts +6 -0
- package/tools.js +3 -0
- package/types.d.ts +6 -0
- package/ui/profile-editor.js +21 -5
- package/page/assets/browser-engine-DjYv346h.js +0 -11
- package/page/assets/browser-transport-Bm3uY9Fj.js +0 -47
- package/page/assets/host-patterns-C9RMP16Q.js +0 -1
- package/page/assets/reader-BFYIhA73.js +0 -7
- package/page/assets/shaped-data-1Qn2111E.js +0 -16
- package/page/assets/studio-code-pane-CCi7-lyE.js +0 -8
- package/page/assets/studio-live-CKSSyYZj.js +0 -5
- package/page/assets/tool-schema-DXYwL5aE.js +0 -18
- package/page/assets/tree-Chi6mqzx.js +0 -3
- package/page/assets/types-2I4NfLiS.js +0 -1
- package/page/assets/workspace-U3w2ELtN.js +0 -1
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,l as n,n as r,u as i}from"./themeProps-3IqahpCr.js";import{h as a}from"./tokens.stylex-DkHf0P9C.js";import{i as o,l as s,u as c}from"./SegmentedControlItem-BLuJOusN.js";import{t as l}from"./VStack-CkVMcNiK.js";import{n as u,t as d}from"./StackItem-CQviqAfM.js";import{F as f,M as p,W as m,b as h,s as g,t as _}from"./browser-transport-Bm3uY9Fj.js";import{t as v}from"./mergeProps-ptS-gIMz.js";import{p as y}from"./fieldParts-Cs6Amprh.js";import{t as b}from"./Icon-ZfFwTt8n.js";import{p as x,r as S,t as C,u as ee}from"./IconButton-CG5klqF1.js";import{d as w,f as T,h as E,o as D,u as O}from"./use-trace-records-BkAYJz0M.js";import{t as k}from"./Text-BsiAsowd.js";import{a as A,n as j,t as M}from"./labels-provider-Gus3heEH.js";import{t as N}from"./Dialog-BDUExlk_.js";import{t as P}from"./createReactComponent-CZwsv6DD.js";import{a as F,i as I,t as L}from"./Banner-BcHZFaJb.js";import{t as R}from"./Center-nHS1JSux.js";import{_ as z,g as B,m as te,n as ne,r as re,t as ie,v as ae,y as oe}from"./studio-labels-C2SI_T2p.js";import{Pr as V}from"./tool-schema-DXYwL5aE.js";import{c as H}from"./host-patterns-C9RMP16Q.js";import{Mn as se,mn as ce,pn as le}from"./shaped-data-1Qn2111E.js";import{S as ue,g as de,r as fe,t as pe}from"./reader-BFYIhA73.js";import{i as U}from"./live-ingress-lDUGPwth.js";import{i as me,v as he}from"./turn-client-DF0ije7A.js";import{r as ge,t as _e}from"./live-messages-BnBioidx.js";import{t as ve}from"./EmptyState-C8W4JKBZ.js";import"./use-second-ticker-VX91zrxj.js";import{t as ye}from"./Section-DJ97F7QE.js";import{P as be,S as xe,bt as Se,dt as Ce,i as we,lt as Te,nt as Ee,p as De,ut as Oe}from"./index-DNA-Y8Mp.js";var ke=P(`outline`,`camera-rotate`,`CameraRotate`,[[`path`,{d:`M5 7h1a2 2 0 0 0 2 -2a1 1 0 0 1 1 -1h6a1 1 0 0 1 1 1a2 2 0 0 0 2 2h1a2 2 0 0 1 2 2v9a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-9a2 2 0 0 1 2 -2`,key:`svg-0`}],[`path`,{d:`M11.245 15.904a3 3 0 0 0 3.755 -2.904m-2.25 -2.905a3 3 0 0 0 -3.75 2.905`,key:`svg-1`}],[`path`,{d:`M14 13h2v2`,key:`svg-2`}],[`path`,{d:`M10 13h-2v-2`,key:`svg-3`}]]),Ae=P(`outline`,`microphone-off`,`MicrophoneOff`,[[`path`,{d:`M3 3l18 18`,key:`svg-0`}],[`path`,{d:`M9 5a3 3 0 0 1 6 0v5a3 3 0 0 1 -.13 .874m-2 2a3 3 0 0 1 -3.87 -2.872v-1`,key:`svg-1`}],[`path`,{d:`M5 10a7 7 0 0 0 10.846 5.85m2 -2a6.967 6.967 0 0 0 1.152 -3.85`,key:`svg-2`}],[`path`,{d:`M8 21l8 0`,key:`svg-3`}],[`path`,{d:`M12 17l0 4`,key:`svg-4`}]]),je=P(`outline`,`phone-off`,`PhoneOff`,[[`path`,{d:`M3 21l18 -18`,key:`svg-0`}],[`path`,{d:`M5.831 14.161a15.946 15.946 0 0 1 -2.831 -8.161a2 2 0 0 1 2 -2h4l2 5l-2.5 1.5c.108 .22 .223 .435 .345 .645m1.751 2.277c.843 .84 1.822 1.544 2.904 2.078l1.5 -2.5l5 2v4a2 2 0 0 1 -2 2a15.963 15.963 0 0 1 -10.344 -4.657`,key:`svg-1`}]]),Me=P(`outline`,`phone`,`Phone`,[[`path`,{d:`M5 4h4l2 5l-2.5 1.5a11 11 0 0 0 5 5l1.5 -2.5l5 2v4a2 2 0 0 1 -2 2a16 16 0 0 1 -15 -15a2 2 0 0 1 2 -2`,key:`svg-0`}]]),Ne=P(`outline`,`subtitles`,`Subtitles`,[[`path`,{d:`M18 5a3 3 0 0 1 3 3v8a3 3 0 0 1 -3 3h-12a3 3 0 0 1 -3 -3v-8a3 3 0 0 1 3 -3l12 0`,key:`svg-0`}],[`path`,{d:`M7 15h5`,key:`svg-1`}],[`path`,{d:`M15 15h2`,key:`svg-2`}],[`path`,{d:`M17 12h-3`,key:`svg-3`}],[`path`,{d:`M11 12h-1`,key:`svg-4`}]]),Pe=P(`outline`,`video-off`,`VideoOff`,[[`path`,{d:`M3 3l18 18`,key:`svg-0`}],[`path`,{d:`M15 11v-1l4.553 -2.276a1 1 0 0 1 1.447 .894v6.764a1 1 0 0 1 -.675 .946`,key:`svg-1`}],[`path`,{d:`M10 6h3a2 2 0 0 1 2 2v3m0 4v1a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2v-8a2 2 0 0 1 2 -2h1`,key:`svg-2`}]]),Fe=P(`outline`,`video`,`Video`,[[`path`,{d:`M15 10l4.553 -2.276a1 1 0 0 1 1.447 .894v6.764a1 1 0 0 1 -1.447 .894l-4.553 -2.276v-4`,key:`svg-0`}],[`path`,{d:`M3 8a2 2 0 0 1 2 -2h8a2 2 0 0 1 2 2v8a2 2 0 0 1 -2 2h-8a2 2 0 0 1 -2 -2l0 -8`,key:`svg-1`}]]);function Ie(e){return e.status===`reconnecting`?`reconnecting`:e.toolName?`calling_tool`:e.connectPhase===`socket`?`connecting`:e.connectPhase===`microphone`?`requesting_mic`:e.status===`speaking`?`speaking`:e.status===`listening`||e.status===`ready`?e.voiceEnabled===!1?`connected`:e.isMuted?`muted`:`listening`:e.status===`connecting`?`connecting`:e.status===`error`?`error`:`ended`}function Le(e){return!(e.isMuted||!e.socketOpen||e.modelPlaying&&e.rms<e.bargeInRmsWhileSpeaking)}function Re(e){let{evidence:t,text:n}=e;return!n||t.kind!==`input_transcription`&&t.kind!==`output_transcription`?null:{text:n,isUser:t.kind===`input_transcription`,interim:t.interim===!0}}function ze(e,t){if(e.phase===void 0){t.toolCalls.push({id:e.callId,name:e.name,arguments:e.arguments,...e.operationId?{operationId:e.operationId}:{}});return}if(e.phase===`cancel`){t.cancelledToolIds.add(e.callId);return}if(e.phase!==`error`)return;let n=t.toolCalls.findIndex(t=>t.id===e.callId);n!==-1&&t.toolCalls.splice(n,1)}function Be(e){if(!(e instanceof Error))return!1;let t=`name`in e&&typeof e.name==`string`?e.name:``;return t===`NotAllowedError`||t===`PermissionDeniedError`||/permission|not allowed|denied/i.test(e.message)}var Ve=`mic-capture-processor`;function He(){return new URL(`data:text/javascript;base64,LyoqCiAqIEF1ZGlvV29ya2xldCBwcm9jZXNzb3IgdGhhdCBmb3J3YXJkcyBtb25vIG1pYyBmcmFtZXMgdG8gdGhlIG1haW4gdGhyZWFkLgogKiBQbGFpbiBKUzogaXQgcnVucyBpbiB0aGUgQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGUgYXMgaXRzIG93biBtb2R1bGUsIGxvYWRlZAogKiBieSBVUkwgKHNlZSBgLi4vbWljLWNhcHR1cmUudHNgKSwgc28gaXQgaW1wb3J0cyBub3RoaW5nIGFuZCBzaGlwcyBhcyBpcy4KICovCnJlZ2lzdGVyUHJvY2Vzc29yKAogICdtaWMtY2FwdHVyZS1wcm9jZXNzb3InLAogIGNsYXNzIE1pY0NhcHR1cmVQcm9jZXNzb3IgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3IgewogICAgcHJvY2VzcyhpbnB1dHMpIHsKICAgICAgY29uc3QgY2hhbm5lbCA9IGlucHV0c1swXVswXTsKICAgICAgY29uc3QgY29weSA9IG5ldyBGbG9hdDMyQXJyYXkoY2hhbm5lbCk7CiAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZShjb3B5LCBbY29weS5idWZmZXJdKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfSwKKTsK`,``+import.meta.url)}function Ue(e,t,n=16e3){if(t===n)return We(e);let r=t/n,i=Math.round(e.length/r),a=new Int16Array(i),o=0,s=0;for(;o<a.length;){let t=Math.round((o+1)*r),n=0,i=0;for(let r=s;r<t&&r<e.length;r++)n+=e[r]??0,i++;a[o]=W(i>0?n/i:0),o++,s=t}return a}function We(e){let t=new Int16Array(e.length);for(let n=0;n<e.length;n++)t[n]=W(e[n]??0);return t}function W(e){let t=Math.max(-1,Math.min(1,e));return t<0?t*32768:t*32767}function Ge(e){let t=new DataView(e.buffer,e.byteOffset,e.byteLength),n=new Float32Array(e.byteLength/2);for(let e=0;e<n.length;e++){let r=t.getInt16(e*2,!0);n[e]=r/(r<0?32768:32767)}return n}function G(e){return JSON.stringify(e)}function Ke(){return{toolCalls:[],mediaChunks:[],cancelledToolIds:new Set}}var qe=.05,Je=[500,1e3,2e3,4e3,8e3];function K(e){return e instanceof Error?e:new H(`internal`,V(e),{cause:e})}function q(e){if(e&&typeof e.disconnect==`function`)try{e.disconnect()}catch{}}function Ye(e){if(e&&typeof e.getTracks==`function`)for(let t of e.getTracks())t.stop()}function Xe(e){let t=Te(e.inputFloat32),n=e.hasPlaybackNodes||e.status===`speaking`;return Le({isMuted:e.isMuted,socketOpen:e.wsOpen,modelPlaying:n,rms:t,bargeInRmsWhileSpeaking:qe})}function Ze(e,t){return e===`listening`&&t?`working`:e===`working`&&!t?`listening`:null}var Qe=class{ws=null;audioContext=null;micStream=null;micSource=null;micWorklet=null;micWorkletModuleLoaded=!1;playbackNodes=[];playbackBus=null;playbackAnalyser=null;playbackMeterFrame=0;playbackMeterBuffer=null;nextPlaybackTime=0;status=`disconnected`;serverWorking=!1;micActivating=!1;connectTimeout=null;isMuted=!1;options;inboundChain=Promise.resolve();audioChain=Promise.resolve();toolChain=Promise.resolve();audioEpoch=0;pendingExecuteResults=new Map;context;sentContext;history=[];providerState;sessionOver=!1;droppedAt;lostAt;reconnectTries=0;reconnectTimer=null;constructor(e){this.options=e,this.context=e.context}setStatus(e){this.status=e,(e===`listening`||e===`disconnected`||e===`error`)&&this.clearConnectTimeout(),this.options.onStatusChange?.(e)}get opening(){return this.status===`connecting`||this.status===`reconnecting`}setConnectPhase(e){this.options.onConnectPhase?.(e)}clearConnectTimeout(){this.connectTimeout&&=(clearTimeout(this.connectTimeout),null)}detachWebSocket(){for(let[e,t]of this.pendingExecuteResults)t.reject(new H(`network`,`live session closed before call ${e} settled`));if(this.pendingExecuteResults.clear(),this.ws){this.ws.onopen=null,this.ws.onmessage=null,this.ws.onclose=null,this.ws.onerror=null;try{this.ws.close()}catch{}this.ws=null}}clearReconnect(){this.reconnectTimer&&clearTimeout(this.reconnectTimer),this.reconnectTimer=null,this.reconnectTries=0,this.droppedAt=void 0}teardownConnection(){this.clearConnectTimeout(),this.micActivating=!1,this.setConnectPhase(null),this.detachWebSocket(),this.cleanupAudio()}failSession(e){this.status!==`error`&&this.status!==`disconnected`&&(this.clearReconnect(),this.teardownConnection(),this.options.onError?.(e),this.setStatus(`error`))}createSocket(e){return this.options.createSocket?.()??new WebSocket(e)}connect(){let e=this.lostAt;return this.clearReconnect(),this.lostAt=void 0,e===void 0?(this.providerState=void 0,this.history=[]):this.droppedAt=e,this.open(`connecting`)}startOver(){return this.status!==`connecting`||!this.providerState?!1:(this.providerState=void 0,this.droppedAt=void 0,this.open(`connecting`),!0)}openMessage(){let{slots:e,openMessage:t}=this.options;return{type:`open`,...this.history.length?{history:structuredClone(this.history)}:{},...e?{slots:e}:{},...this.context===void 0?{}:{context:this.context},...this.providerState?{resume:{providerState:this.providerState,awayMs:this.droppedAt===void 0?0:Date.now()-this.droppedAt}}:{},...t?{host:t}:{}}}handleDrop(){!this.providerState||this.sessionOver?(this.teardownConnection(),this.setStatus(`disconnected`)):(this.droppedAt??=Date.now(),this.teardownConnection(),this.setStatus(`reconnecting`),this.scheduleReconnect())}scheduleReconnect(){let e=Je[this.reconnectTries];if(e===void 0){let e=this.droppedAt;this.failSession(new H(`network`,`live call dropped and could not reconnect`)),this.lostAt=e}else this.reconnectTries+=1,this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.open(`reconnecting`)},e)}failOpen(e){this.status===`reconnecting`?(this.teardownConnection(),this.scheduleReconnect()):this.startOver()||this.failSession(e)}async open(e){this.teardownConnection(),this.sessionOver=!1,this.setStatus(e),e===`connecting`&&this.setConnectPhase(`socket`);try{let e=globalThis.AudioContext;this.audioContext=new e,this.audioContext.state===`suspended`&&await this.audioContext.resume();let t=globalThis.location.protocol===`https:`?`wss:`:`ws:`,n=this.options.profile?`?profile=${encodeURIComponent(this.options.profile)}`:``,r=`${t}//${globalThis.location.host}/api/live/relay${n}`,i=this.options.relayUrl||r;this.ws=this.createSocket(i),this.ws.binaryType=`arraybuffer`,this.ws.onopen=()=>{let e=this.openMessage();this.sentContext=JSON.stringify(e.context),this.ws?.send(JSON.stringify(e))},this.connectTimeout=setTimeout(()=>{this.opening&&this.failOpen(new H(`timeout`,`live connect timed out`))},2e4),this.ws.onmessage=e=>{this.enqueueServerMessage(e.data)},this.ws.onclose=()=>{this.opening?this.failOpen(new H(`network`,`live socket closed before ready`)):this.handleDrop()},this.ws.onerror=()=>{!this.opening&&this.providerState&&!this.sessionOver?this.handleDrop():this.failOpen(new H(`network`,`live socket error`))}}catch(e){this.failOpen(new H(`internal`,V(e),{cause:e}))}}async ensureAudioContext(){if(!this.audioContext||this.audioContext.state===`closed`){let e=globalThis.AudioContext;this.audioContext=new e,this.audioContext.state===`suspended`&&await this.audioContext.resume()}}async activateMicrophone(){if(!this.micActivating&&this.opening){this.micActivating=!0,this.status===`connecting`&&this.setConnectPhase(`microphone`);try{await this.ensureAudioContext(),this.micStream=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0}}),await this.setupMicrophonePipeline(),this.becomeReady()}catch(e){let t=Be(e);this.failSession(new H(t?`auth`:`internal`,V(e),{cause:e,copy:{key:t?`voice.permission`:`voice.unavailable`}}))}finally{this.micActivating=!1}}}sendMicFrame(e,t){let n=Ue(e,t,16e3),r=ce(new Uint8Array(n.buffer)),i=this.ws;i?.readyState===WebSocket.OPEN&&i.send(G({type:`audio`,data:r}))}reportMicVolume(e){this.isMuted||this.options.onVolumeLevel?.(Oe(e),!0)}forwardMicBuffer(e){if(this.reportMicVolume(e),Xe({isMuted:this.isMuted,wsOpen:this.ws?.readyState===WebSocket.OPEN,hasPlaybackNodes:this.playbackNodes.length>0,status:this.status,inputFloat32:e})){let t=this.audioContext?this.audioContext.sampleRate:48e3;this.sendMicFrame(e,t)}}async setupMicrophonePipeline(){if(!this.micStream||!this.audioContext)return;this.micSource=this.audioContext.createMediaStreamSource(this.micStream);let e=this.audioContext.createGain();e.gain.value=0,this.micWorkletModuleLoaded||=(await this.audioContext.audioWorklet.addModule(He()),!0),this.micWorklet=new AudioWorkletNode(this.audioContext,Ve),this.micWorklet.port.onmessage=e=>{let t=new Float32Array(e.data);this.forwardMicBuffer(t)},this.micSource.connect(this.micWorklet),this.micWorklet.connect(e),e.connect(this.audioContext.destination)}ensurePlaybackBus(){this.audioContext&&!this.playbackBus&&(this.playbackBus=this.audioContext.createGain(),this.playbackAnalyser=this.audioContext.createAnalyser(),this.playbackAnalyser.fftSize=512,this.playbackAnalyser.smoothingTimeConstant=.35,this.playbackBus.connect(this.playbackAnalyser),this.playbackAnalyser.connect(this.audioContext.destination),this.playbackMeterBuffer=new Uint8Array(this.playbackAnalyser.fftSize))}stopPlaybackMeter(){this.playbackMeterFrame&&=(cancelAnimationFrame(this.playbackMeterFrame),0),this.options.onVolumeLevel?.(0,!1)}startPlaybackMeter(){if(this.playbackMeterFrame)return;let e=()=>{this.playbackNodes.length===0||!this.playbackAnalyser||!this.playbackMeterBuffer?this.stopPlaybackMeter():(this.playbackAnalyser.getByteTimeDomainData(this.playbackMeterBuffer),this.options.onVolumeLevel?.(Ce(this.playbackMeterBuffer),!1),this.playbackMeterFrame=requestAnimationFrame(e))};this.playbackMeterFrame=requestAnimationFrame(e)}async processServerEnvelope(e){if(await this.tryHandleControlEnvelope(e)||e.type!==`events`)return;let t=this.collectInboundTurn(e.events),n=t.toolCalls.filter(e=>!t.cancelledToolIds.has(e.id));for(let e of n)this.toolChain=this.toolChain.then(()=>this.options.onToolCall(e.name,e.arguments,{callId:e.id,operationId:me(e)})).catch(e=>{this.options.onError?.(K(e))});this.scheduleMediaChunks(t.mediaChunks)}enqueueServerMessage(e){this.inboundChain=this.inboundChain.then(async()=>{if(typeof e!=`string`)return;let t=ge(e);t.type===`unsupported`||t.type===`malformed`?this.options.onTurnEvent?.(t):await this.processServerEnvelope(t)}).catch(e=>{this.options.onError?.(K(e))})}async handleReadyEnvelope(e){this.options.onSessionReady?.({sessionId:e.sessionId,profile:e.profile}),this.options.voiceIngress===!1?this.becomeReady():await this.activateMicrophone()}becomeReady(){this.clearReconnect(),this.setConnectPhase(null),this.setStatus(`listening`),this.flushContext()}handleExecuteToolResultEnvelope(e){let t=this.pendingExecuteResults.get(e.operationId);t&&t.callId===e.callId&&(this.pendingExecuteResults.delete(e.operationId),e.status===`refused`?t.reject(ue(e.body,`request`)):e.status===`dispatched`?t.resolve({status:`dispatched`,grantId:e.grantId,arguments:e.arguments}):e.status===`gated`?t.resolve({status:`gated`,gate:e.gate}):t.resolve({status:`settled`}))}async tryHandleControlEnvelope(e){return e.type===`ready`?(await this.handleReadyEnvelope(e),!0):e.type===`executeToolResult`?(this.handleExecuteToolResultEnvelope(e),!0):e.type===`trace`?(this.options.onTrace?.(e.record),!0):e.type===`error`&&(this.startOver()||(this.sessionOver=!0,this.options.onError?.(ue(e,`unavailable`)),this.setStatus(`error`)),!0)}collectInboundTurn(e){let t=Ke();for(let n of e)this.processTurnEvent(n,t);return t}processTurnEvent(e,t){switch(e.type===`provider_checkpoint`&&e.history&&(this.history=structuredClone(e.history)),(e.type===`provider_checkpoint`||e.type===`done`)&&e.providerState&&(this.providerState=e.providerState),e.type===`provider_warning`&&(this.providerState=void 0),this.options.onTurnEvent?.(e),e.type){case`evidence`:this.handleEvidenceTurnEvent(e);break;case`session`:this.handleSessionTurnEvent(e);break;case`media`:this.collectMediaTurnEvent(e,t);break;case`tool`:ze(e.tool,t);break;case`done`:this.handleDoneTurnEvent(e)}}handleEvidenceTurnEvent(e){let t=Re(e);t&&this.options.onTranscript?.(t.text,t.isUser,{interim:t.interim})}handleSessionTurnEvent(e){if(this.notifySessionLifecycle(e.session))return;this.serverWorking=e.session.kind===`working`;let t=Ze(this.status,this.serverWorking);t&&this.setStatus(t)}notifySessionLifecycle(e){return e.kind===`closing_soon`?(this.options.onSessionClosing?.(e.timeLeftMs),!0):e.kind===`ended`?this.providerState?(this.handleDrop(),!0):(this.sessionOver=!0,this.options.onSessionEnded?.(e),!0):!1}restingStatus(){return this.serverWorking?`working`:`listening`}collectMediaTurnEvent(e,t){e.media.data&&(this.setStatus(`speaking`),t.mediaChunks.push({data:e.media.data,mimeType:e.media.mimeType}))}handleDoneTurnEvent(e){e.interrupted&&this.cancelPlayback(),e.stop.kind!==`generation_complete`&&(this.serverWorking=!1,this.setStatus(`listening`))}scheduleMediaChunks(e){if(e.length===0)return;let t=this.audioEpoch;for(let n of e)this.audioChain=this.audioChain.then(async()=>{t===this.audioEpoch&&await this.enqueueAudioChunk(n.data,n.mimeType)}).catch(e=>{this.options.onError?.(K(e))})}executeToolOnRelay(e){let t=this.ws;if(!t||t.readyState!==WebSocket.OPEN)throw new H(`request`,`live session is not connected`);let n=_e.safeParse({...e,type:`executeTool`});if(!n.success||n.data.type!==`executeTool`)throw new H(`request`,se(`error.request`));let r=n.data;if(this.pendingExecuteResults.has(r.operationId))throw new H(`request`,se(`session.gate_expired`));return new Promise((e,n)=>{this.pendingExecuteResults.set(r.operationId,{callId:r.callId,resolve:e,reject:n});try{t.send(G(r))}catch(e){this.pendingExecuteResults.delete(r.operationId),n(K(e))}})}async enqueueAudioChunk(e,t){if(this.audioContext)try{if(this.ensurePlaybackBus(),!this.playbackBus)return;let n=le(e),r;if(t?.includes(`wav`)){let e=n.buffer.slice(n.byteOffset,n.byteOffset+n.byteLength);r=await this.audioContext.decodeAudioData(e)}else{let e=Ge(n);r=this.audioContext.createBuffer(1,e.length,24e3),r.getChannelData(0).set(e)}let i=this.audioContext.createBufferSource();i.buffer=r,i.connect(this.playbackBus);let a=this.audioContext.currentTime,o=Math.max(a,this.nextPlaybackTime);i.start(o),this.nextPlaybackTime=o+r.duration,this.playbackNodes.push(i),this.startPlaybackMeter(),i.onended=()=>{let e=this.playbackNodes.indexOf(i);e!==-1&&this.playbackNodes.splice(e,1),this.playbackNodes.length===0&&(this.stopPlaybackMeter(),this.status===`speaking`&&this.setStatus(this.restingStatus()))}}catch(e){this.options.onError?.(K(e))}}cancelPlayback(){this.audioEpoch+=1,this.audioChain=Promise.resolve();for(let e of this.playbackNodes)try{e.stop(),e.disconnect()}catch{}this.playbackNodes=[],this.stopPlaybackMeter(),this.audioContext&&(this.nextPlaybackTime=this.audioContext.currentTime)}toggleMute(){return this.isMuted=!this.isMuted,this.isMuted}sendText(e){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(G({type:`text`,text:e}))}setSlots(e){JSON.stringify(e)!==JSON.stringify(this.options.slots)&&(this.options={...this.options,slots:e},this.providerState&&!this.opening&&this.ws?.readyState===WebSocket.OPEN&&this.handleDrop())}setContext(e){this.context=e,this.flushContext()}flushContext(){if(this.opening||this.ws?.readyState!==WebSocket.OPEN)return;let e=JSON.stringify(this.context);e!==this.sentContext&&(this.sentContext=e,this.ws.send(G({type:`context`,context:this.context})))}sendVideo(e,t=`image/jpeg`){this.ws&&this.ws.readyState===WebSocket.OPEN&&this.ws.send(G({type:`video`,data:e,mimeType:t}))}disconnect(){this.clearReconnect(),this.lostAt=void 0,this.providerState=void 0,this.teardownConnection(),this.setStatus(`disconnected`)}cleanupAudio(){if(this.cancelPlayback(),this.stopPlaybackMeter(),q(this.playbackBus),this.playbackBus=null,this.playbackAnalyser=null,this.playbackMeterBuffer=null,this.micWorklet&&=(this.micWorklet.port.onmessage=null,q(this.micWorklet),null),q(this.micSource),this.micSource=null,Ye(this.micStream),this.micStream=null,this.audioContext&&this.audioContext.state!==`closed`){try{this.audioContext.close()}catch{}this.audioContext=null,this.micWorkletModuleLoaded=!1}}},J=e(i(),1);function $e(){return{turns:[],interimUser:``,interimAgent:``,working:!1}}function et(e,t){return t.length===0?e:[...e,[...t]]}function tt(e,t){return e?t?t.startsWith(e)||e.startsWith(t)?t.length>=e.length?t:e:nt(e,t):e:t}function nt(e,t){return e?t?!e.endsWith(` `)&&!t.startsWith(` `)&&!/^\s/.test(t)&&!/^[\s.,!?;:]/.test(t)?`${e} ${t}`:`${e}${t}`:e:t}function rt(e){return`${String(Date.now())}-${String(e.turns.length)}`}function it(e,t,n,r,i){if(!t)return e;if(r)return n?{...e,interimUser:t}:{...e,interimAgent:t};let a=n?`user`:`agent`,o=[...e.turns],s=o.at(-1),c=n?e.interimUser:e.interimAgent;if(!i?.forceNew&&s?.role===a)o[o.length-1]={...s,text:nt(s.text,t)};else{let n=i?.forceNew?t:tt(c,t);o.push({id:rt(e),role:a,text:n})}return{...e,turns:o,interimUser:n?``:e.interimUser,interimAgent:n?e.interimAgent:``}}function at(e){return e.type===`thought`||e.type===`tool`||e.type===`citation`}function ot(e,t){return e.findIndex(e=>e.role===`work`&&e.events.some(e=>e.type===`tool`&&e.tool.callId===t))}function st(e,t){if(t.type===`tool`&&t.tool.phase!==void 0)return t.tool.phase===`gate`?-1:ot(e,t.tool.callId);let n=e.at(-1)?.role===`work`;return t.type===`thought`&&!(n?t.text:t.text.trim())?-1:n?e.length-1:e.length}function ct(e,t){if(t.type===`done`)return e.working?{...e,working:!1}:e;if(!at(t))return e;let n=st(e.turns,t);if(n===-1)return e;let r=[...e.turns],i=r[n];return r[n]=i?.role===`work`?{...i,events:[...i.events,t]}:{id:rt(e),role:`work`,events:[t]},{...e,turns:r,working:!0}}function lt(e){return e.role===`work`?he(e.events,{idPrefix:e.id}):[{id:e.id,kind:e.role===`user`?`user-text`:`text`,text:e.text}]}var ut=24;function dt(e,t){let n=0;for(;n<e.length&&n<t.length&&e[n]===t[n];)n+=1;return n}function ft(e,t){let n=e.trim();return dt(n,t.trim())>=Math.min(n.length,ut)}function pt(e){return e.filter((t,n)=>{if(t.role!==`agent`)return!0;let r=e.slice(n+1),i=r.findIndex(e=>e.role===`user`);return!(i===-1?r:r.slice(0,i)).some(e=>e.role===`agent`&&ft(t.text,e.text))})}function mt(e,{turns:t,interimUser:n,interimAgent:r}){let i=[...t];n&&i.push({id:`interim-user`,role:`user`,text:n}),r&&i.push({id:`interim-agent`,role:`agent`,text:r});let a=[...e.map((e,t)=>e.map(e=>({...e,id:`${String(t)}:${e.id}`}))),i].map(e=>pt(e).flatMap(lt)).filter(e=>e.length>0);return{blocks:a.flat(),callStarts:a.slice(1).map(e=>e[0].id)}}function ht({working:e,interimAgent:t}){return t!==``||e}function gt(e){return!e.interimUser&&!e.interimAgent?e:{...e,interimUser:``,interimAgent:``}}function _t(e,t){let n=Object.keys(t??{}).sort().join(`
|
|
2
|
-
`),r=e?.join(`
|
|
3
|
-
`);(0,J.useEffect)(()=>{r!==void 0&&Ee(r?r.split(`
|
|
4
|
-
`):[],n?n.split(`
|
|
5
|
-
`):[])},[r,n])}var vt=.62,yt=400;function bt(e){return navigator.mediaDevices.getUserMedia({video:{facingMode:{ideal:e},width:{ideal:640},height:{ideal:480}},audio:!1})}function xt(e,t){let n=t?.facingMode??`user`;return bt(n).then(t=>{let r=document.createElement(`video`);r.srcObject=t,r.muted=!0,r.playsInline=!0,r.setAttribute(`playsinline`,``);let i=document.createElement(`canvas`),a=i.getContext(`2d`);if(!a){for(let e of t.getTracks())e.stop();throw new H(`unsupported`,`no 2d canvas for live video`)}let o=null,s=!1,c={stream:t,facing:n},l=()=>{if(s||r.videoWidth===0)return;i.width=r.videoWidth,i.height=r.videoHeight,a.drawImage(r,0,0);let t=i.toDataURL(`image/jpeg`,vt).split(`,`)[1];t&&e(t)};return r.play().then(()=>{o||s||(o=setInterval(l,yt))}),{video:r,facingMode:()=>c.facing,flip:async()=>{if(s)return c.facing;let e=c.facing===`user`?`environment`:`user`,t=await bt(e);for(let e of c.stream.getTracks())e.stop();return c={stream:t,facing:e},r.srcObject=t,await r.play(),e},stop:()=>{s=!0,o&&clearInterval(o),o=null,r.srcObject=null;for(let e of c.stream.getTracks())e.stop()}}})}function St(e){let t=(0,J.useCallback)(()=>{e.cancelGateDecision(),e.clearClient(),e.stopVideo(),e.setIsMuted(!1),e.isMutedRef.current=!1,e.setSessionActive(!1),e.setSessionPermissions([]),e.sessionPermissionsRef.current=[],e.statusRef.current=`disconnected`,e.setStatus(`disconnected`),e.setConnectPhase(null),e.setInputLevel(0),e.setOutputLevel(0)},[e]),n=(0,J.useCallback)(async()=>{e.clearFailure(),e.resetCaptions();try{let t=e.ensureClient(await e.connectionRef.current());(e.statusRef.current===`disconnected`||e.statusRef.current===`error`)&&await t.connect()}catch(t){e.reportFailure(t)}},[e]);return{teardownSession:t,startSession:n,handleSendText:(0,J.useCallback)(t=>{let n=(typeof t==`string`?t:e.textDraft).trim();n&&e.clientRef.current&&e.sessionActive&&e.textAvailable&&(e.clientRef.current.sendText(n),e.setTextDraft(``),e.setCaptions(e=>it(e,n,!0,!1,{forceNew:!0})))},[e]),handleToggleVideo:(0,J.useCallback)(async()=>{if(e.clientRef.current&&e.sessionActive&&e.videoAvailable){if(e.isVideoOn)e.stopVideo();else try{let t=await xt(t=>{e.clientRef.current?.sendVideo(t)});e.videoCaptureRef.current=t,e.setVideoPreview(t.video),e.setVideoFacingMode(t.facingMode()),e.setIsVideoOn(!0)}catch(t){e.reportFailure(t),e.stopVideo()}}},[e]),handleFlipCamera:(0,J.useCallback)(async()=>{let t=e.videoCaptureRef.current;if(t&&e.sessionActive&&e.isVideoOn)try{let n=await t.flip();e.setVideoFacingMode(n),e.setVideoPreview(t.video)}catch(t){e.reportFailure(t)}},[e]),handleToggleMic:(0,J.useCallback)(()=>{if(!e.clientRef.current||!e.sessionActive||!e.voiceAvailable)return;let t=e.clientRef.current.toggleMute();e.isMutedRef.current=t,e.setIsMuted(t)},[e]),handleRestart:(0,J.useCallback)(async()=>{t(),await n()},[n,t])}}function Ct(e){return new de(e.kind,e.error,e.message)}function Y(e){e.gateCallId===void 0&&e.clearActiveTool()}function wt(e,t){e.phase===`cancel`&&e.callId===t.gateCallId?(t.withdrawGate(),t.clearActiveTool()):e.phase===`cancel`||e.phase===`complete`?Y(t):e.phase===`error`?(t.reportFailure(Ct(e.failure)),Y(t)):t.setActiveTool(e.name)}function Tt(e,t){e.type===`done`?(t.clearInterim(),Y(t)):e.type===`tool`&&wt(e.tool,t)}function Et(e){let[t,n]=(0,J.useState)(`disconnected`),[r,i]=(0,J.useState)(null),a=(0,J.useRef)({input:0,output:0}),o=(0,J.useCallback)(e=>{let t=a.current;t.input=typeof e==`function`?e(t.input):e},[]),s=(0,J.useCallback)(e=>{let t=a.current;t.output=typeof e==`function`?e(t.output):e},[]),[c,l]=(0,J.useState)(!1),[u,d]=(0,J.useState)(!1),[p,m]=(0,J.useState)(null),[h,g]=(0,J.useState)($e),[_,v]=(0,J.useState)(null),[y,b]=(0,J.useState)(null),[x,S]=(0,J.useState)(``),[C,ee]=(0,J.useState)(!1),[w,T]=(0,J.useState)([]),[E,D]=(0,J.useState)(!1),[O,k]=(0,J.useState)(null),[A,j]=(0,J.useState)(`user`),M=(0,J.useRef)(null),N=(0,J.useRef)(h),P=(0,J.useRef)(c),F=(0,J.useRef)(w),I=(0,J.useRef)(t);return N.current=h,P.current=c,F.current=w,I.current=t,(0,J.useEffect)(()=>{C&&D(!0)},[C]),{status:t,setStatus:n,connectPhase:r,setConnectPhase:i,levelsRef:a,setInputLevel:o,setOutputLevel:s,isMuted:c,setIsMuted:l,isVideoOn:u,setIsVideoOn:d,activeTool:p,setActiveTool:m,captions:h,setCaptions:g,failure:_,reportFailure:(0,J.useCallback)(t=>{v(f(t,e))},[e]),clearFailure:(0,J.useCallback)(()=>{v(null)},[]),sessionEnded:y,reportSessionEnded:(0,J.useCallback)(e=>{b(e.message)},[]),clearSessionEnded:(0,J.useCallback)(()=>{b(null)},[]),textDraft:x,setTextDraft:S,sessionActive:C,setSessionActive:ee,sessionPermissions:w,setSessionPermissions:T,everConnected:E,videoPreview:O,setVideoPreview:k,videoFacingMode:A,setVideoFacingMode:j,videoCaptureRef:M,captionsRef:N,isMutedRef:P,sessionPermissionsRef:F,statusRef:I,resetCaptions:(0,J.useCallback)(()=>{g($e())},[]),stopVideo:(0,J.useCallback)(()=>{M.current&&=(M.current.stop(),null),k(null),j(`user`),d(!1)},[])}}function Dt(e){let[t,n]=(0,J.useState)(null),r=(0,J.useRef)(t);r.current=t;let i=(0,J.useRef)(null),a=(0,J.useRef)(null),o=(0,J.useCallback)(e=>{i.current?.(e),i.current=null,a.current=null,n(null)},[]);return{gatePrompt:t,gatePromptRef:r,handleLiveTurnEvent:(0,J.useCallback)(t=>{e.setCaptions(e=>ct(e,t)),Tt(t,{gateCallId:r.current?.callId,withdrawGate:()=>{o(`withdrawn`)},clearInterim:()=>{e.setCaptions(e=>gt(e))},clearActiveTool:()=>{e.setActiveTool(null)},reportFailure:e.reportFailure,setActiveTool:e.setActiveTool})},[e,o]),waitForGateDecision:(0,J.useCallback)(e=>new Promise((t,r)=>{n(e),i.current=t,a.current=r}),[]),resolveGateDecision:(0,J.useCallback)(e=>{o(e)},[o]),cancelGateDecision:(0,J.useCallback)(()=>{a.current?.(new H(`cancelled`,`live session ended with a gate open`)),i.current=null,a.current=null,n(null)},[])}}async function Ot(e){let{executeToolOnRelay:t,name:n,toolArgs:r,callId:i,operationId:a}=e,o=e.sessionPermissions,s=e.pageTools&&Object.hasOwn(e.pageTools,n)?e.pageTools[n]:void 0,c=await t({callId:i,operationId:a}),l=new Set;for(;c.status!==`settled`;){if(c.status===`dispatched`){if(l.has(c.grantId))return;l.add(c.grantId);let e=c.grantId,n=c.arguments,r=s?await Promise.resolve().then(()=>s(n,{callId:i,operationId:a})).catch(()=>void 0):void 0;c=await t({callId:i,operationId:a,grantId:e,...r?{output:r.output}:{unanswered:!0}});continue}let{gate:u}=c;if(u.kind===`page`){await t({callId:i,operationId:a,decision:`deny`});return}let d=await e.waitForGateDecision({callId:i,toolName:n,input:u.preparedArguments??r,gate:u});if(d===`withdrawn`)return;let f=oe({toolName:n,gate:u,sessionPermissions:o,resolution:d});if(f.decision===`deny`){await t({callId:i,operationId:a,decision:`deny`});return}o=f.sessionPermissions,e.setSessionPermissions(f.sessionPermissions),c=await t({callId:i,decision:`approve`,operationId:a,...f.secret===void 0?{}:{secret:f.secret}})}}function kt(e,t){t.setStatus(e),e===`listening`||e===`ready`?(t.setSessionActive(!0),t.clearFailure(),t.clearSessionEnded()):(e===`disconnected`||e===`error`)&&(t.setSessionActive(!1),t.videoCaptureRef.current&&(t.videoCaptureRef.current.stop(),t.videoCaptureRef.current=null),t.setVideoPreview(null),t.setVideoFacingMode(`user`),t.setIsVideoOn(!1))}function At(e,t,n,r){r.setCaptions(r=>it(r,e,t,n?.interim))}async function jt(e,t,n,r,i){r.setActiveTool(e),r.clearFailure();let a=i.current;if(!a)r.reportFailure(new H(`request`,`live tool call with no session client`));else try{await Ot({pageTools:r.pageTools,executeToolOnRelay:e=>a.executeToolOnRelay(e),name:e,toolArgs:t,callId:n.callId,operationId:n.operationId,sessionPermissions:r.sessionPermissionsRef.current,setSessionPermissions:e=>{r.sessionPermissionsRef.current=e,r.setSessionPermissions(e)},waitForGateDecision:r.waitForGateDecision})}catch(e){r.reportFailure(e)}finally{r.gatePromptRef.current||r.setActiveTool(null)}}function Mt(e){let t=(0,J.useRef)(null),n=(0,J.useRef)(e);return n.current=e,{clientRef:t,ensureClient:(0,J.useCallback)(e=>{if(t.current)return t.current;let r=n.current,i=new Qe({...e,slots:r.slots,context:r.context,voiceIngress:r.voiceAvailable,onConnectPhase:e=>{r.setConnectPhase(e)},onStatusChange:e=>{kt(e,n.current)},onTranscript:(e,t,r)=>{At(e,t,r,n.current)},onTurnEvent:e=>{e.type!==`unsupported`&&(e.type===`malformed`?n.current.reportFailure(e.error):n.current.handleLiveTurnEvent(e))},onTrace:e=>{n.current.traces.push(e)},onVolumeLevel:(e,t)=>{let r=n.current;t?r.setInputLevel(r.isMutedRef.current?0:e):r.setOutputLevel(e)},onError:e=>{n.current.reportFailure(e)},onSessionEnded:e=>{n.current.reportSessionEnded(e)},onToolCall:(e,r,i)=>jt(e,r,i,n.current,t)});return t.current=i,i},[]),clearClient:(0,J.useCallback)(()=>{t.current&&=(t.current.disconnect(),null)},[])}}function Nt(e,t,n,r){let[i,a]=(0,J.useState)(!1),[o,s]=(0,J.useState)(!1),c=(0,J.useRef)(!1),l=(0,J.useCallback)(t=>{c.current=t.video&&r,a(!0),s(!1),e.startSession()},[e,r]);(0,J.useEffect)(()=>{n&&c.current&&(c.current=!1,e.handleToggleVideo())},[e,n]);let u=(0,J.useCallback)(()=>{c.current=!1,e.teardownSession(),s(!0)},[e]),[d,f]=(0,J.useState)([]),p=(0,J.useCallback)(async()=>{let n=t.current.turns;f(e=>et(e,n)),s(!1),await e.handleRestart()},[e,t]),m=(0,J.useRef)(e.teardownSession);return m.current=e.teardownSession,(0,J.useEffect)(()=>()=>{m.current()},[]),{callStarted:i,ended:o,pastCalls:d,startCall:l,handleEnd:u,handleRestart:p}}function Pt(e,t,n={}){let r=Et(e.labels),i=Dt({setCaptions:r.setCaptions,setActiveTool:r.setActiveTool,reportFailure:r.reportFailure}),a=(0,J.useRef)(t);a.current=t;let o=U(e.live.ingress,`audio`),s=U(e.live.ingress,`video`),c=U(e.live.ingress,`text`),l=(0,J.useMemo)(()=>Ie({status:r.status,connectPhase:r.connectPhase,toolName:r.activeTool,isMuted:r.isMuted,voiceEnabled:o}),[r.activeTool,r.connectPhase,r.isMuted,r.status,o]),u=(0,J.useMemo)(p,[]),{clientRef:d,ensureClient:f,clearClient:m}=Mt({slots:n.slots,context:n.context,pageTools:n.pageTools,voiceAvailable:o,traces:u,handleLiveTurnEvent:i.handleLiveTurnEvent,waitForGateDecision:i.waitForGateDecision,gatePromptRef:i.gatePromptRef,isMutedRef:r.isMutedRef,sessionPermissionsRef:r.sessionPermissionsRef,videoCaptureRef:r.videoCaptureRef,setConnectPhase:r.setConnectPhase,setStatus:r.setStatus,setSessionActive:r.setSessionActive,reportFailure:r.reportFailure,clearFailure:r.clearFailure,reportSessionEnded:r.reportSessionEnded,clearSessionEnded:r.clearSessionEnded,setCaptions:r.setCaptions,setInputLevel:r.setInputLevel,setOutputLevel:r.setOutputLevel,setActiveTool:r.setActiveTool,setSessionPermissions:r.setSessionPermissions,setVideoPreview:r.setVideoPreview,setVideoFacingMode:r.setVideoFacingMode,setIsVideoOn:r.setIsVideoOn}),h=St({clientRef:d,videoCaptureRef:r.videoCaptureRef,connectionRef:a,statusRef:r.statusRef,isMutedRef:r.isMutedRef,sessionPermissionsRef:r.sessionPermissionsRef,ensureClient:f,clearClient:m,cancelGateDecision:i.cancelGateDecision,stopVideo:r.stopVideo,resetCaptions:r.resetCaptions,sessionActive:r.sessionActive,textAvailable:c,videoAvailable:s,voiceAvailable:o,isVideoOn:r.isVideoOn,textDraft:r.textDraft,setTextDraft:r.setTextDraft,setCaptions:r.setCaptions,reportFailure:r.reportFailure,clearFailure:r.clearFailure,setIsMuted:r.setIsMuted,setSessionActive:r.setSessionActive,setSessionPermissions:r.setSessionPermissions,setStatus:r.setStatus,setConnectPhase:r.setConnectPhase,setInputLevel:r.setInputLevel,setOutputLevel:r.setOutputLevel,setVideoPreview:r.setVideoPreview,setVideoFacingMode:r.setVideoFacingMode,setIsVideoOn:r.setIsVideoOn}),{callStarted:g,ended:_,pastCalls:v,startCall:y,handleEnd:b,handleRestart:x}=Nt(h,r.captionsRef,r.sessionActive,s),S=JSON.stringify(n.context);(0,J.useEffect)(()=>{d.current?.setContext(S===void 0?void 0:JSON.parse(S))},[d,S]);let C=JSON.stringify(n.slots);return(0,J.useEffect)(()=>{d.current?.setSlots(C===void 0?void 0:JSON.parse(C))},[d,C]),_t(e.tools.page,n.pageTools),{handle:e.identity.handle,traces:u,callStarted:g,pastCalls:v,captions:r.captions,failure:r.failure,sessionEnded:r.sessionEnded,levelsRef:r.levelsRef,isMuted:r.isMuted,isVideoOn:r.isVideoOn,sessionActive:r.sessionActive,liveState:l,activeTool:r.activeTool,status:r.status,textAvailable:c,textDraft:r.textDraft,toolActive:r.activeTool!==null||i.gatePrompt!==null,videoAvailable:s,videoFacingMode:r.videoFacingMode,videoPreview:r.videoPreview,voiceAvailable:o,canRestart:!r.sessionActive&&r.status!==`connecting`&&(r.everConnected||_||r.failure!==null),gatePrompt:i.gatePrompt,setTextDraft:r.setTextDraft,handleEnd:b,startCall:y,handleRestart:x,handleSendText:h.handleSendText,handleToggleMic:h.handleToggleMic,handleFlipCamera:h.handleFlipCamera,handleToggleVideo:h.handleToggleVideo,resolveGateDecision:i.resolveGateDecision}}var X=t(),Ft={0:`--spacing-0`,.5:`--spacing-0-5`,1:`--spacing-1`,1.5:`--spacing-1-5`,2:`--spacing-2`,3:`--spacing-3`,4:`--spacing-4`,5:`--spacing-5`,6:`--spacing-6`,8:`--spacing-8`,10:`--spacing-10`},Z={baseFlex:{k1xSpc:`x78zum5`,kGNEyG:`x6s0dn4`,kjj79g:`x1qughib`,$$css:!0},baseGrid:{k1xSpc:`xrvj5dj`,kumcoG:`x134kloy`,kGNEyG:`x6s0dn4`,$$css:!0},vertical:{kXwgrk:`xdt5ytf`,kGNEyG:`x1qjc9v5`,$$css:!0},startSlot:{k1xSpc:`x78zum5`,kGNEyG:`x6s0dn4`,$$css:!0},centerSlot:{k1xSpc:`x78zum5`,kGNEyG:`x6s0dn4`,kjj79g:`xl56j7k`,k7Eaqz:`xeuugli`,$$css:!0},endSlot:{k1xSpc:`x78zum5`,kGNEyG:`x6s0dn4`,kjj79g:`x13a6bvl`,$$css:!0},startOnly:{kUk6DE:`x845mor`,$$css:!0},endOnly:{keTefX:`xvc5jky`,$$css:!0}},It={base:{kAzted:`x1gdqauq`,$$css:!0}},Q={gap:e=>[{kOIVth:e==null?e:`x1pidvrl`,$$css:!0},{"--x-gap":(e=>typeof e==`number`?e+`px`:e??void 0)(e)}],tabIndicatorBottom:e=>[{"--_tab-indicator-bottom":e==null?e:`xbrl7fg`,$$css:!0},{"--x---_tab-indicator-bottom":e??void 0}]},Lt={sm:2,md:2,lg:2},Rt={sm:a[`--spacing-2`],md:a[`--spacing-2`],lg:a[`--spacing-2`]},$={sm:`calc(var(--container-padding-inline-start, ${a[`--spacing-4`]}) - ${a[`--spacing-2`]})`,md:`calc(var(--container-padding-inline-start, ${a[`--spacing-4`]}) - ${a[`--spacing-2`]})`,lg:`calc(var(--container-padding-inline-start, ${a[`--spacing-4`]}) - ${a[`--spacing-2`]})`};function zt({startContent:e,centerContent:t,endContent:i,label:s,size:c=`md`,gap:l=1,orientation:u=`horizontal`,variant:d=`transparent`,dividers:f,xstyle:p,className:m,style:h,ref:g,onKeyDown:_,onFocus:b,onBlur:S,role:C,"aria-label":w,"aria-orientation":T,...E}){let D=t!=null,O=e!=null,k=i!=null,A=f?.includes(`bottom`)??!1,j=a[Ft[l]],{listRef:M,handleKeyDown:N,handleFocus:P}=y({itemSelector:`button, input, [tabindex]`,boundarySelector:`[role="toolbar"], [popover]`,orientation:u,hasRovingTabIndex:!0,hasCaretGuard:!0}),{hintElement:F,onKeyDown:I,onFocus:L,onBlur:R}=o({orientation:u}),z=(0,J.useCallback)(e=>{_?.(e),!e.defaultPrevented&&(I(e),N(e))},[_,I,N]),B=(0,J.useCallback)(e=>{b?.(e),!e.defaultPrevented&&(L(e),P(e))},[b,L,P]),te=(0,J.useCallback)(e=>{S?.(e),!e.defaultPrevented&&R(e)},[S,R]);return(0,X.jsx)(ee,{value:c,children:(0,X.jsx)(ye,{ref:g,variant:d,paddingBlock:Lt[c],dividers:f,xstyle:p,className:m,style:h,children:(0,X.jsxs)(`div`,{ref:M,role:`toolbar`,"aria-label":s,"aria-orientation":u,onKeyDown:z,onFocus:B,onBlur:te,...v(r(`toolbar`,{size:c}),n(D?Z.baseGrid:Z.baseFlex,u===`vertical`&&Z.vertical,It.base,Q.gap(j),A&&Q.tabIndicatorBottom(`calc(-1 * (${Rt[c]} + 1px))`))),...E,children:[D?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{...n(Z.startSlot,x.inset($[c]),Q.gap(j)),children:e}),(0,X.jsx)(`div`,{...n(Z.centerSlot,Q.gap(j)),children:t}),(0,X.jsx)(`div`,{...n(Z.endSlot,x.inset($[c]),Q.gap(j)),children:i})]}):(0,X.jsxs)(X.Fragment,{children:[O&&(0,X.jsx)(`div`,{...n(Z.startSlot,!k&&Z.startOnly,x.inset($[c]),Q.gap(j)),children:e}),k&&(0,X.jsx)(`div`,{...n(Z.endSlot,!O&&Z.endOnly,x.inset($[c]),Q.gap(j)),children:i})]}),F]})})})}zt.displayName=`Toolbar`;function Bt(e){return(0,X.jsx)(M,{children:(0,X.jsx)(Vt,{...e})})}function Vt({handle:e,captions:t,pastCalls:n,draftText:r,onDraftTextChange:i,onSubmit:a,isDisabled:o,showComposer:s=!0,leading:c}){let u=j(),f=u(`@theorem.agent.handle`,{handle:e}),{blocks:p,callStarts:m}=mt(n,t),h=u(`@theorem.live.new_session`),g=Object.fromEntries(m.map(e=>[e,h])),_=s?(0,X.jsx)(be,{handle:e,draftText:r,onDraftTextChange:i,onSubmit:a,isDisabled:o}):null;return(0,X.jsxs)(l,{height:`100%`,children:[c,(0,X.jsx)(d,{size:`fill`,children:p.length>0?(0,X.jsx)(D,{label:u(`@theorem.panel.captions.name`),children:(0,X.jsx)(xe,{blocks:p,dividers:g,handle:f,streaming:ht(t)})}):(0,X.jsx)(l,{height:`100%`,vAlign:`center`,padding:4,children:(0,X.jsx)(ve,{icon:(0,X.jsx)(b,{icon:Ne,size:`lg`,color:`secondary`}),title:u(`@theorem.panel.captions.empty.title`),description:u(`@theorem.panel.captions.empty.description`),isCompact:!0})})}),_]})}var Ht=class{readyState=0;binaryType=`arraybuffer`;onopen=null;onmessage=null;onclose=null;onerror=null;outbound=new EventTarget;closeSession;queued=[];listening=!1;constructor(e,t,n){queueMicrotask(()=>{this.open(e,t,n)})}send(e){if(this.readyState!==1)throw new H(`network`,`Live connection is closed`);this.listening?this.outbound.dispatchEvent(new MessageEvent(`message`,{data:e})):this.queued.push(e)}close(){this.readyState!==3&&(this.readyState=3,this.queued=[],this.outbound.dispatchEvent(new Event(`close`)),this.closeSession?.(),this.emit(`onclose`,new CloseEvent(`close`)))}emit(e,t){let n=this[e];n?.(t)}async open(e,t,n){if(this.readyState===3)return;this.readyState=1,this.emit(`onopen`,new Event(`open`));let r;try{let i=await _(),a=n?.(i);r=i.studioTraces.route(e=>this.receive({type:`trace`,record:e}));let{scope:o,profile:s}=await i.studioScope(e.profile,e.customTools,e.structured,t);if(!t.providers?.vault)throw new H(`auth`,`Fill the vault slot this model names.`);let[c]=this.queued.splice(0,1);if(typeof c!=`string`)throw new H(`request`,`A live call must open with its open message`);let l=await o.runSession({...await(a?(await a.boundary).prepareLiveOpen(i.parseLiveOpenMessage(c)):Promise.resolve(i.liveSessionOpen(i.parseLiveOpenMessage(c)))),profile:s.id,metadata:r.metadata,signal:t.signal},{execution:t.execution??a?.execution,pageExecution:t.pageExecution??a?.pageExecution,vault:t.providers.vault,fetch:t.providers.fetch,wait:t.providers.wait,openWebSocket:t.providers.openWebSocket});if(this.closeSession=()=>l.close(`client disconnected`),this.readyState!==1){await this.closeSession(),r.close();return}await this.attach(i.attachStudioLiveSession,l,s.id,r,s.labels,a?{pageResult:a.pageResult,beforeEvent:async e=>{(e.type===`done`||e.type===`provider_checkpoint`)&&e.providerState&&await(await a.boundary).recordCheckpoint(e.providerState)}}:{})}catch(t){r?.close(),this.receive({type:`error`,...fe(t,e.profile.labels,pe)}),this.close()}}async attach(e,t,n,r,i,a={}){let o=e({send:e=>{typeof e==`string`&&this.receive(JSON.parse(e))},close:()=>this.close(),addEventListener:this.outbound.addEventListener.bind(this.outbound)},t,n,crypto.randomUUID(),r,i,{...a,clientEvents:pe});this.closeSession=void 0,this.listening=!0;for(let e of this.queued.splice(0))this.outbound.dispatchEvent(new MessageEvent(`message`,{data:e}));await o}receive(e){this.readyState===1&&this.emit(`onmessage`,new MessageEvent(`message`,{data:JSON.stringify(e)}))}};function Ut(e,t){let n,r=t.execution?void 0:e=>n??=e.browserExecution();return{createSocket:()=>new Ht(e,t,r)}}var Wt=720,Gt=320;function Kt({theme:e,mode:t,labels:n,...r}){return(0,X.jsx)(g,{theme:e,mode:t,children:(0,X.jsx)(M,{labels:n,children:(0,X.jsx)(qt,{...r})})})}function qt({iface:e,connection:t,trace:n,slots:r,context:i,pageTools:a}){let o=j(),u=Pt(e,t,{slots:r,context:i,pageTools:a}),d=(0,J.useRef)(null),f=F(e,u.traces,n),p=E(d,!0),m={name:o(`@theorem.panel.captions.name`),show:o(`@theorem.panel.captions.show`),hide:o(`@theorem.panel.captions.hide`),resize:o(`@theorem.panel.captions.resize`)},h=(0,X.jsx)(T,{labels:m,icon:(0,X.jsx)(b,{icon:Se}),panelId:p.id,open:p.open,onToggle:p.toggle});return u.callStarted?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(I,{inspector:f,children:(0,X.jsx)(c,{ref:d,height:`fill`,header:(0,X.jsx)(w,{children:f.toggle}),content:(0,X.jsx)(s,{padding:0,children:(0,X.jsx)(c,{height:`fill`,end:(0,X.jsx)(O,{id:p.id,labels:m,resizable:p.resizable,open:p.open,children:(0,X.jsx)(Qt,{model:u})}),content:(0,X.jsx)(s,{padding:0,children:(0,X.jsx)(l,{height:`100%`,paddingInline:3,paddingBlockEnd:4,children:(0,X.jsx)(Yt,{model:u,captionsToggle:h})})})})})})}),(0,X.jsx)(rn,{prompt:u.gatePrompt,agent:o(`@theorem.agent.handle`,{handle:u.handle}),onResolve:u.resolveGateDecision})]}):(0,X.jsx)(I,{inspector:f,children:(0,X.jsx)(c,{ref:d,height:`fill`,header:(0,X.jsx)(w,{children:f.toggle}),content:(0,X.jsx)(s,{padding:0,children:(0,X.jsx)(Jt,{model:u})})})})}function Jt({model:e}){let t=j();return(0,X.jsx)(l,{minHeight:`100%`,vAlign:`center`,gap:8,paddingInline:3,children:(0,X.jsx)(R,{axis:`horizontal`,width:`100%`,children:(0,X.jsxs)(l,{width:`100%`,maxWidth:De,gap:8,children:[(0,X.jsxs)(l,{gap:1,children:[(0,X.jsx)(k,{type:`large`,as:`h2`,children:t(`@theorem.agent.handle`,{handle:e.handle})}),(0,X.jsx)(k,{type:`display-2`,as:`h1`,children:t(`@theorem.live.greeting`)})]}),(0,X.jsxs)(u,{gap:2,wrap:`wrap`,children:[(0,X.jsx)(S,{label:t(e.voiceAvailable?`@theorem.live.start_voice_call`:`@theorem.live.start_call`),variant:`primary`,icon:(0,X.jsx)(b,{icon:Me}),onClick:()=>e.startCall({video:!1})}),e.videoAvailable?(0,X.jsx)(S,{label:t(`@theorem.live.start_video_call`),variant:`secondary`,icon:(0,X.jsx)(b,{icon:Fe}),onClick:()=>e.startCall({video:!0})}):null]})]})})})}function Yt({model:e,captionsToggle:t}){let n=j(),r=Xt();return(0,X.jsx)(l,{ref:r,height:`100%`,hAlign:`center`,children:(0,X.jsxs)(l,{width:`100%`,maxWidth:Wt,height:`100%`,gap:3,children:[(0,X.jsxs)(l,{gap:.5,children:[(0,X.jsx)(k,{type:`label`,color:`secondary`,children:n(`@theorem.agent.handle`,{handle:e.handle})}),(0,X.jsx)(k,{size:`sm`,color:`secondary`,children:A(n,e.liveState,e.activeTool)})]}),e.failure?(0,X.jsx)(L,{status:`error`,role:`alert`,title:e.failure.error}):null,e.sessionEnded?(0,X.jsx)(L,{status:`info`,role:`status`,title:e.sessionEnded}):null,(0,X.jsx)(d,{size:`fill`,children:(0,X.jsx)(l,{height:`100%`,vAlign:`end`,children:(0,X.jsx)(l,{width:`100%`,height:Gt,style:{color:`var(--color-icon-primary)`},"aria-hidden":`true`,children:(0,X.jsx)(B,{status:e.status,levelsRef:e.levelsRef,toolActive:e.toolActive,variant:`hero`})})})}),(0,X.jsx)(Zt,{model:e,captionsToggle:t})]})})}function Xt(){let e=(0,J.useRef)(null);return(0,J.useLayoutEffect)(()=>{let t=e.current;if(!t||globalThis.matchMedia?.(`(prefers-reduced-motion: reduce)`).matches)return;let n=getComputedStyle(t),r=Number.parseFloat(n.getPropertyValue(`--duration-medium`))||410;t.animate([{opacity:0,transform:`translateY(8px)`},{opacity:1,transform:`none`}],{duration:r,easing:n.getPropertyValue(`--ease-standard`).trim()||`ease-out`})},[]),e}function Zt({model:e,captionsToggle:t}){let n=j(),r=!e.sessionActive,i=[];return e.voiceAvailable&&i.push((0,X.jsx)(we,{label:n(`@theorem.live.microphone`),tooltip:n(e.isMuted?`@theorem.live.unmute`:`@theorem.live.mute`),isIconOnly:!0,isPressed:!e.isMuted,isDisabled:r,icon:(0,X.jsx)(b,{icon:m}),pressedIcon:(0,X.jsx)(b,{icon:Ae}),onPressedChange:e.handleToggleMic},`mic`)),e.videoAvailable&&(i.push((0,X.jsx)(we,{label:n(`@theorem.live.camera`),tooltip:n(e.isVideoOn?`@theorem.live.camera_off`:`@theorem.live.camera_on`),isIconOnly:!0,isPressed:e.isVideoOn,isDisabled:r,icon:(0,X.jsx)(b,{icon:Fe}),pressedIcon:(0,X.jsx)(b,{icon:Pe}),onPressedChange:()=>{e.handleToggleVideo()}},`video`)),e.isVideoOn&&i.push((0,X.jsx)(C,{label:n(`@theorem.live.flip_camera`),tooltip:n(`@theorem.live.flip_camera`),variant:`ghost`,isDisabled:r,icon:(0,X.jsx)(b,{icon:ke}),onClick:()=>{e.handleFlipCamera()}},`flip`))),i.push((0,X.jsx)(J.Fragment,{children:t},`captions`),e.canRestart?(0,X.jsx)(C,{label:n(`@theorem.live.start_call`),tooltip:n(`@theorem.live.start_call`),variant:`primary`,icon:(0,X.jsx)(b,{icon:Me}),onClick:()=>{e.handleRestart()}},`call`):(0,X.jsx)(C,{label:n(`@theorem.live.end_call`),tooltip:n(`@theorem.live.end_call`),variant:`destructive`,isDisabled:r,icon:(0,X.jsx)(b,{icon:je}),onClick:e.handleEnd},`call`)),(0,X.jsx)(zt,{label:n(`@theorem.live.controls`),dividers:[`top`],centerContent:(0,X.jsx)(u,{gap:2,vAlign:`center`,children:i})})}function Qt({model:e}){return(0,X.jsx)(Bt,{handle:e.handle,captions:e.captions,pastCalls:e.pastCalls,draftText:e.textDraft,onDraftTextChange:e.setTextDraft,onSubmit:e.handleSendText,isDisabled:!e.sessionActive,showComposer:e.textAvailable,leading:e.videoPreview?(0,X.jsx)($t,{video:e.videoPreview,facingMode:e.videoFacingMode}):null})}function $t({video:e,facingMode:t}){let n=j(),r=(0,J.useRef)(null);return(0,J.useEffect)(()=>{let t=r.current;if(t)return Object.assign(e.style,{width:`100%`,height:`100%`,objectFit:`cover`,display:`block`}),t.replaceChildren(e),()=>{e.parentElement===t&&t.removeChild(e)}},[e]),(0,J.useEffect)(()=>{e.style.transform=t===`user`?`scaleX(-1)`:``},[e,t]),(0,X.jsx)(te,{ratio:4/3,fit:`cover`,children:(0,X.jsx)(`div`,{ref:r,"aria-label":n(`@theorem.live.camera_preview`),role:`img`})})}var en=4,tn=432,nn={background:`transparent`,boxShadow:`none`};function rn({prompt:e,agent:t,onResolve:n}){return(0,X.jsx)(N,{isOpen:e!==null,purpose:`required`,width:tn,padding:en,style:nn,onOpenChange:e=>{e||n({action:`deny`})},children:e?e.gate.kind===`auth`?(0,X.jsx)(re,{gate:e.gate,toolName:e.gate.tool,onAuthenticated:e=>{n({action:`auth`,secret:e})}}):(0,X.jsx)(ne,{gate:e.gate,toolName:e.gate.tool,agent:t,input:e.input,onDecision:e=>{n({action:e})}}):null})}function an({runtime:e,...t}){let{payload:n}=t;return(0,X.jsx)(sn,{...t,connect:()=>e?Ut(n,e):z(n)})}function on({endpoint:e,...t}){return(0,X.jsx)(sn,{...t,connect:()=>({createSocket:()=>new WebSocket(e.replace(/^http/,`ws`))})})}function sn({payload:e,note:t,connect:n,trace:r,slots:i,context:a}){let o=(0,J.useMemo)(()=>h(e),[e]),s=(0,J.useMemo)(()=>ae(e),[e]);return o.type===`live`?(0,X.jsx)(Kt,{labels:ie,iface:o,connection:()=>(t(),n()),trace:r,slots:i,context:a,pageTools:s}):null}export{on as ProjectLive,an as StudioLive};
|