@theoremjs/studio 0.3.4-next.403.g5de27f3 → 0.3.4-next.407.gd93ec2c

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/browser-engine.d.ts +1 -1
  2. package/browser-engine.js +1 -1
  3. package/browser-transport.d.ts +12 -0
  4. package/browser-transport.js +26 -7
  5. package/browser.d.ts +1 -1
  6. package/browser.js +1 -1
  7. package/mod.d.ts +2 -1
  8. package/mod.js +2 -1
  9. package/package.json +4 -4
  10. package/page/assets/{Banner-CLcFr8r9.js → Banner-B1Vat7i_.js} +2 -2
  11. package/page/assets/{ContextMenu-CArbXxnu.js → ContextMenu-BreVLY9J.js} +2 -2
  12. package/page/assets/{ToolResultCharts-DG0GfEe-.js → ToolResultCharts-BV2tbzow.js} +1 -1
  13. package/page/assets/{TraceInspector-DlcrrHNa.js → TraceInspector-B8NufbVX.js} +1 -1
  14. package/page/assets/{TraceOverview-BRgK49q4.js → TraceOverview-DoQOfiAe.js} +2 -2
  15. package/page/assets/{browser-engine-yDBh7tWN.js → browser-engine-BvsLwtiv.js} +6 -6
  16. package/page/assets/browser-transport-DxpDmXGb.js +47 -0
  17. package/page/assets/{export-agent-DuPZHGrj.js → export-agent-D2Vo-OSL.js} +3 -3
  18. package/page/assets/{guardrail-tester-xtRSrTXh.js → guardrail-tester-CuqamClw.js} +2 -2
  19. package/page/assets/{index-BVTCzZhh.js → index-C3mDKoGG.js} +69 -69
  20. package/page/assets/{live-messages-CaI0Oqem.js → live-messages-BZGmMo_v.js} +1 -1
  21. package/page/assets/{reader-CaGeZoFz.js → reader-paEmSrWc.js} +4 -4
  22. package/page/assets/{studio-code-pane-_XzNjN6P.js → studio-code-pane-B9bG0xzf.js} +1 -1
  23. package/page/assets/{studio-console-Da8ZVuKx.js → studio-console-1qIWsDtV.js} +3 -3
  24. package/page/assets/studio-decision-BdJR3HSN.js +1 -0
  25. package/page/assets/{studio-embedding-BaWl7liT.js → studio-embedding-CFzitRLj.js} +1 -1
  26. package/page/assets/studio-host-console-BzpDE2TK.js +2 -0
  27. package/page/assets/{studio-live-ON74y8sM.js → studio-live-BucphGSr.js} +2 -2
  28. package/page/assets/{studio-map-W8XbAypV.js → studio-map-BfUMbnZK.js} +1 -1
  29. package/page/assets/studio-trace-replay-C5cBxYG_.js +2 -0
  30. package/page/assets/turn-client-BZUECwPn.js +2 -0
  31. package/page/assets/{use-one-call-BD3tlw64.js → use-one-call-BVmuHLSm.js} +1 -1
  32. package/page/index.html +6 -6
  33. package/replay.d.ts +97 -0
  34. package/replay.js +387 -0
  35. package/server/draft-handler.js +2 -1
  36. package/transport.d.ts +5 -1
  37. package/transport.js +7 -2
  38. package/ui/inspector-context.d.ts +1 -1
  39. package/ui/lib/send-when-ready.d.ts +7 -0
  40. package/ui/lib/send-when-ready.js +14 -0
  41. package/ui/studio-connection.d.ts +1 -1
  42. package/ui/studio-runner.d.ts +4 -1
  43. package/ui/studio-runner.js +3 -2
  44. package/ui/studio-screen.js +111 -11
  45. package/ui/studio-trace-replay.d.ts +23 -0
  46. package/ui/studio-trace-replay.js +216 -0
  47. package/page/assets/browser-transport-B0GPqGzb.js +0 -47
  48. package/page/assets/studio-decision-CHaFsz_1.js +0 -1
  49. package/page/assets/studio-host-console-BuPmNkLs.js +0 -2
  50. package/page/assets/turn-client-BBi2anJM.js +0 -2
@@ -1,5 +1,5 @@
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{M as f,U as p,_ as m,k as h,o as g,t as _}from"./browser-transport-B0GPqGzb.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{a as w,d as te,l as T,p as E,u as D}from"./SidePanel-OYp0bLNO.js";import{t as O}from"./Text-BsiAsowd.js";import{a as k,n as A,t as j}from"./labels-provider-BqgbdxdT.js";import{t as M}from"./Dialog-BDUExlk_.js";import{t as N}from"./createReactComponent-CZwsv6DD.js";import{a as P,i as F,t as I}from"./Banner-CLcFr8r9.js";import{t as L}from"./Center-nHS1JSux.js";import{Mr as R}from"./tool-schema-CgpwKFX7.js";import{c as z}from"./host-patterns-C9RMP16Q.js";import{Mn as B,fn as ne,pn as re}from"./shaped-data-0GUF7Al3.js";import{g as ie,r as ae,t as oe,x as se}from"./reader-CaGeZoFz.js";import{i as V}from"./live-ingress-lDUGPwth.js";import{_ as ce,i as le}from"./turn-client-BBi2anJM.js";import{r as ue,t as de}from"./live-messages-CaI0Oqem.js";import{t as fe}from"./EmptyState-C8W4JKBZ.js";import"./PaneState-C8jetBGI.js";import{t as pe}from"./Section-DJ97F7QE.js";import{L as me,N as he,P as ge,X as _e,Y as ve,a as ye,b as be,dt as xe,et as Se,ft as Ce,i as H,kt as we,m as Te,rt as Ee,ut as De,v as Oe,y as ke}from"./index-BVTCzZhh.js";var Ae=N(`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`}]]),je=N(`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`}]]),Me=N(`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`}]]),U=N(`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=N(`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=N(`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`}]]),W=N(`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 Fe(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 Ie(e){return!(e.isMuted||!e.socketOpen||e.modelPlaying&&e.rms<e.bargeInRmsWhileSpeaking)}function Le(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 Re(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 ze(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 Be=`mic-capture-processor`;function Ve(){return new URL(`data:text/javascript;base64,LyoqCiAqIEF1ZGlvV29ya2xldCBwcm9jZXNzb3IgdGhhdCBmb3J3YXJkcyBtb25vIG1pYyBmcmFtZXMgdG8gdGhlIG1haW4gdGhyZWFkLgogKiBQbGFpbiBKUzogaXQgcnVucyBpbiB0aGUgQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGUgYXMgaXRzIG93biBtb2R1bGUsIGxvYWRlZAogKiBieSBVUkwgKHNlZSBgLi4vbWljLWNhcHR1cmUudHNgKSwgc28gaXQgaW1wb3J0cyBub3RoaW5nIGFuZCBzaGlwcyBhcyBpcy4KICovCnJlZ2lzdGVyUHJvY2Vzc29yKAogICdtaWMtY2FwdHVyZS1wcm9jZXNzb3InLAogIGNsYXNzIE1pY0NhcHR1cmVQcm9jZXNzb3IgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3IgewogICAgcHJvY2VzcyhpbnB1dHMpIHsKICAgICAgY29uc3QgY2hhbm5lbCA9IGlucHV0c1swXVswXTsKICAgICAgY29uc3QgY29weSA9IG5ldyBGbG9hdDMyQXJyYXkoY2hhbm5lbCk7CiAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZShjb3B5LCBbY29weS5idWZmZXJdKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfSwKKTsK`,``+import.meta.url)}function He(e,t,n=16e3){if(t===n)return Ue(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]=We(i>0?n/i:0),o++,s=t}return a}function Ue(e){let t=new Int16Array(e.length);for(let n=0;n<e.length;n++)t[n]=We(e[n]??0);return t}function We(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 z(`internal`,R(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=De(e.inputFloat32),n=e.hasPlaybackNodes||e.status===`speaking`;return Ie({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 z(`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 z(`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 z(`timeout`,`live connect timed out`))},2e4),this.ws.onmessage=e=>{this.enqueueServerMessage(e.data)},this.ws.onclose=()=>{this.opening?this.failOpen(new z(`network`,`live socket closed before ready`)):this.handleDrop()},this.ws.onerror=()=>{!this.opening&&this.providerState&&!this.sessionOver?this.handleDrop():this.failOpen(new z(`network`,`live socket error`))}}catch(e){this.failOpen(new z(`internal`,R(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=ze(e);this.failSession(new z(t?`auth`:`internal`,R(e),{cause:e,copy:{key:t?`voice.permission`:`voice.unavailable`}}))}finally{this.micActivating=!1}}}sendMicFrame(e,t){let n=He(e,t,16e3),r=re(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?.(xe(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(Ve()),!0),this.micWorklet=new AudioWorkletNode(this.audioContext,Be),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:le(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=ue(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(se(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?.(se(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`:Re(e.tool,t);break;case`done`:this.handleDoneTurnEvent(e)}}handleEvidenceTurnEvent(e){let t=Le(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 z(`request`,`live session is not connected`);let n=de.safeParse({...e,type:`executeTool`});if(!n.success||n.data.type!==`executeTool`)throw new z(`request`,B(`error.request`));let r=n.data;if(this.pendingExecuteResults.has(r.operationId))throw new z(`request`,B(`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=ne(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`?ce(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(`
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{G as f,P as p,j as m,s as h,t as g,y as _}from"./browser-transport-DxpDmXGb.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{a as w,d as te,l as T,p as E,u as D}from"./SidePanel-OYp0bLNO.js";import{t as O}from"./Text-BsiAsowd.js";import{a as k,n as A,t as j}from"./labels-provider-BqgbdxdT.js";import{t as M}from"./Dialog-BDUExlk_.js";import{t as N}from"./createReactComponent-CZwsv6DD.js";import{a as P,i as F,t as I}from"./Banner-B1Vat7i_.js";import{t as L}from"./Center-nHS1JSux.js";import{Mr as R}from"./tool-schema-CgpwKFX7.js";import{c as z}from"./host-patterns-C9RMP16Q.js";import{Mn as B,fn as ne,pn as re}from"./shaped-data-0GUF7Al3.js";import{S as ie,g as ae,r as oe,t as se}from"./reader-paEmSrWc.js";import{i as V}from"./live-ingress-lDUGPwth.js";import{i as ce,v as le}from"./turn-client-BZUECwPn.js";import{r as ue,t as de}from"./live-messages-BZGmMo_v.js";import{t as fe}from"./EmptyState-C8W4JKBZ.js";import"./PaneState-C8jetBGI.js";import{t as pe}from"./Section-DJ97F7QE.js";import{$ as me,B as he,C as ge,I as _e,L as ve,Nt as ye,Q as be,S as xe,a as H,g as Se,ht as Ce,mt as we,o as Te,ot as Ee,pt as De,rt as Oe,x as ke}from"./index-C3mDKoGG.js";var Ae=N(`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`}]]),je=N(`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`}]]),Me=N(`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`}]]),U=N(`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=N(`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=N(`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`}]]),W=N(`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 Fe(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 Ie(e){return!(e.isMuted||!e.socketOpen||e.modelPlaying&&e.rms<e.bargeInRmsWhileSpeaking)}function Le(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 Re(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 ze(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 Be=`mic-capture-processor`;function Ve(){return new URL(`data:text/javascript;base64,LyoqCiAqIEF1ZGlvV29ya2xldCBwcm9jZXNzb3IgdGhhdCBmb3J3YXJkcyBtb25vIG1pYyBmcmFtZXMgdG8gdGhlIG1haW4gdGhyZWFkLgogKiBQbGFpbiBKUzogaXQgcnVucyBpbiB0aGUgQXVkaW9Xb3JrbGV0R2xvYmFsU2NvcGUgYXMgaXRzIG93biBtb2R1bGUsIGxvYWRlZAogKiBieSBVUkwgKHNlZSBgLi4vbWljLWNhcHR1cmUudHNgKSwgc28gaXQgaW1wb3J0cyBub3RoaW5nIGFuZCBzaGlwcyBhcyBpcy4KICovCnJlZ2lzdGVyUHJvY2Vzc29yKAogICdtaWMtY2FwdHVyZS1wcm9jZXNzb3InLAogIGNsYXNzIE1pY0NhcHR1cmVQcm9jZXNzb3IgZXh0ZW5kcyBBdWRpb1dvcmtsZXRQcm9jZXNzb3IgewogICAgcHJvY2VzcyhpbnB1dHMpIHsKICAgICAgY29uc3QgY2hhbm5lbCA9IGlucHV0c1swXVswXTsKICAgICAgY29uc3QgY29weSA9IG5ldyBGbG9hdDMyQXJyYXkoY2hhbm5lbCk7CiAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZShjb3B5LCBbY29weS5idWZmZXJdKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfSwKKTsK`,``+import.meta.url)}function He(e,t,n=16e3){if(t===n)return Ue(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]=We(i>0?n/i:0),o++,s=t}return a}function Ue(e){let t=new Int16Array(e.length);for(let n=0;n<e.length;n++)t[n]=We(e[n]??0);return t}function We(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 z(`internal`,R(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=De(e.inputFloat32),n=e.hasPlaybackNodes||e.status===`speaking`;return Ie({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 z(`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 z(`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 z(`timeout`,`live connect timed out`))},2e4),this.ws.onmessage=e=>{this.enqueueServerMessage(e.data)},this.ws.onclose=()=>{this.opening?this.failOpen(new z(`network`,`live socket closed before ready`)):this.handleDrop()},this.ws.onerror=()=>{!this.opening&&this.providerState&&!this.sessionOver?this.handleDrop():this.failOpen(new z(`network`,`live socket error`))}}catch(e){this.failOpen(new z(`internal`,R(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=ze(e);this.failSession(new z(t?`auth`:`internal`,R(e),{cause:e,copy:{key:t?`voice.permission`:`voice.unavailable`}}))}finally{this.micActivating=!1}}}sendMicFrame(e,t){let n=He(e,t,16e3),r=re(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?.(we(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(Ve()),!0),this.micWorklet=new AudioWorkletNode(this.audioContext,Be),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:ce(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=ue(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(ie(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?.(ie(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`:Re(e.tool,t);break;case`done`:this.handleDoneTurnEvent(e)}}handleEvidenceTurnEvent(e){let t=Le(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 z(`request`,`live session is not connected`);let n=de.safeParse({...e,type:`executeTool`});if(!n.success||n.data.type!==`executeTool`)throw new z(`request`,B(`error.request`));let r=n.data;if(this.pendingExecuteResults.has(r.operationId))throw new z(`request`,B(`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=ne(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`?le(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
2
  `),r=e?.join(`
3
3
  `);(0,J.useEffect)(()=>{r!==void 0&&Ee(r?r.split(`
4
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 z(`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 ie(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,te]=(0,J.useState)([]),[T,E]=(0,J.useState)(!1),[D,O]=(0,J.useState)(null),[k,A]=(0,J.useState)(`user`),j=(0,J.useRef)(null),M=(0,J.useRef)(h),N=(0,J.useRef)(c),P=(0,J.useRef)(w),F=(0,J.useRef)(t);return M.current=h,N.current=c,P.current=w,F.current=t,(0,J.useEffect)(()=>{C&&E(!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:te,everConnected:T,videoPreview:D,setVideoPreview:O,videoFacingMode:k,setVideoFacingMode:A,videoCaptureRef:j,captionsRef:M,isMutedRef:N,sessionPermissionsRef:P,statusRef:F,resetCaptions:(0,J.useCallback)(()=>{g($e())},[]),stopVideo:(0,J.useCallback)(()=>{j.current&&=(j.current.stop(),null),O(null),A(`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 z(`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=Se({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 z(`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=V(e.live.ingress,`audio`),s=V(e.live.ingress,`video`),c=V(e.live.ingress,`text`),l=(0,J.useMemo)(()=>Fe({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)(h,[]),{clientRef:d,ensureClient:f,clearClient:p}=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}),m=St({clientRef:d,videoCaptureRef:r.videoCaptureRef,connectionRef:a,statusRef:r.statusRef,isMutedRef:r.isMutedRef,sessionPermissionsRef:r.sessionPermissionsRef,ensureClient:f,clearClient:p,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(m,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:m.handleSendText,handleToggleMic:m.handleToggleMic,handleFlipCamera:m.handleFlipCamera,handleToggleVideo:m.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":te,...T}){let E=t!=null,D=e!=null,O=i!=null,k=f?.includes(`bottom`)??!1,A=a[Ft[l]],{listRef:j,handleKeyDown:M,handleFocus:N}=y({itemSelector:`button, input, [tabindex]`,boundarySelector:`[role="toolbar"], [popover]`,orientation:u,hasRovingTabIndex:!0,hasCaretGuard:!0}),{hintElement:P,onKeyDown:F,onFocus:I,onBlur:L}=o({orientation:u}),R=(0,J.useCallback)(e=>{_?.(e),!e.defaultPrevented&&(F(e),M(e))},[_,F,M]),z=(0,J.useCallback)(e=>{b?.(e),!e.defaultPrevented&&(I(e),N(e))},[b,I,N]),B=(0,J.useCallback)(e=>{S?.(e),!e.defaultPrevented&&L(e)},[S,L]);return(0,X.jsx)(ee,{value:c,children:(0,X.jsx)(pe,{ref:g,variant:d,paddingBlock:Lt[c],dividers:f,xstyle:p,className:m,style:h,children:(0,X.jsxs)(`div`,{ref:j,role:`toolbar`,"aria-label":s,"aria-orientation":u,onKeyDown:R,onFocus:z,onBlur:B,...v(r(`toolbar`,{size:c}),n(E?Z.baseGrid:Z.baseFlex,u===`vertical`&&Z.vertical,It.base,Q.gap(A),k&&Q.tabIndicatorBottom(`calc(-1 * (${Rt[c]} + 1px))`))),...T,children:[E?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{...n(Z.startSlot,x.inset($[c]),Q.gap(A)),children:e}),(0,X.jsx)(`div`,{...n(Z.centerSlot,Q.gap(A)),children:t}),(0,X.jsx)(`div`,{...n(Z.endSlot,x.inset($[c]),Q.gap(A)),children:i})]}):(0,X.jsxs)(X.Fragment,{children:[D&&(0,X.jsx)(`div`,{...n(Z.startSlot,!O&&Z.startOnly,x.inset($[c]),Q.gap(A)),children:e}),O&&(0,X.jsx)(`div`,{...n(Z.endSlot,!D&&Z.endOnly,x.inset($[c]),Q.gap(A)),children:i})]}),P]})})})}zt.displayName=`Toolbar`;function Bt(e){return(0,X.jsx)(j,{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=A(),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)(ge,{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)(w,{label:u(`@theorem.panel.captions.name`),children:(0,X.jsx)(Oe,{blocks:p,dividers:g,handle:f,streaming:ht(t)})}):(0,X.jsx)(l,{height:`100%`,vAlign:`center`,padding:4,children:(0,X.jsx)(fe,{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 z(`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 z(`auth`,`Fill the vault slot this model names.`);let[c]=this.queued.splice(0,1);if(typeof c!=`string`)throw new z(`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`,...ae(t,e.profile.labels,oe)}),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:oe});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)(j,{labels:n,children:(0,X.jsx)(qt,{...r})})})}function qt({iface:e,connection:t,trace:n,slots:r,context:i,pageTools:a}){let o=A(),u=Pt(e,t,{slots:r,context:i,pageTools:a}),d=(0,J.useRef)(null),f=P(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)(te,{labels:m,icon:(0,X.jsx)(b,{icon:we}),panelId:p.id,open:p.open,onToggle:p.toggle});return u.callStarted?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(F,{inspector:f,children:(0,X.jsx)(c,{ref:d,height:`fill`,header:(0,X.jsx)(D,{children:f.toggle}),content:(0,X.jsx)(s,{padding:0,children:(0,X.jsx)(c,{height:`fill`,end:(0,X.jsx)(T,{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)(F,{inspector:f,children:(0,X.jsx)(c,{ref:d,height:`fill`,header:(0,X.jsx)(D,{children:f.toggle}),content:(0,X.jsx)(s,{padding:0,children:(0,X.jsx)(Jt,{model:u})})})})}function Jt({model:e}){let t=A();return(0,X.jsx)(l,{minHeight:`100%`,vAlign:`center`,gap:8,paddingInline:3,children:(0,X.jsx)(L,{axis:`horizontal`,width:`100%`,children:(0,X.jsxs)(l,{width:`100%`,maxWidth:Te,gap:8,children:[(0,X.jsxs)(l,{gap:1,children:[(0,X.jsx)(O,{type:`large`,as:`h2`,children:t(`@theorem.agent.handle`,{handle:e.handle})}),(0,X.jsx)(O,{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:U}),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:W}),onClick:()=>e.startCall({video:!0})}):null]})]})})})}function Yt({model:e,captionsToggle:t}){let n=A(),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)(O,{type:`label`,color:`secondary`,children:n(`@theorem.agent.handle`,{handle:e.handle})}),(0,X.jsx)(O,{size:`sm`,color:`secondary`,children:k(n,e.liveState,e.activeTool)})]}),e.failure?(0,X.jsx)(I,{status:`error`,role:`alert`,title:e.failure.error}):null,e.sessionEnded?(0,X.jsx)(I,{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)(me,{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=A(),r=!e.sessionActive,i=[];return e.voiceAvailable&&i.push((0,X.jsx)(H,{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:p}),pressedIcon:(0,X.jsx)(b,{icon:je}),onPressedChange:e.handleToggleMic},`mic`)),e.videoAvailable&&(i.push((0,X.jsx)(H,{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:W}),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:Ae}),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:U}),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:Me}),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=A(),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)(he,{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)(M,{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)(be,{gate:e.gate,toolName:e.gate.tool,onAuthenticated:e=>{n({action:`auth`,secret:e})}}):(0,X.jsx)(ke,{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):ve(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)(()=>m(e),[e]),s=(0,J.useMemo)(()=>_e(e),[e]);return o.type===`live`?(0,X.jsx)(Kt,{labels:ye,iface:o,connection:()=>(t(),n()),trace:r,slots:i,context:a,pageTools:s}):null}export{on as ProjectLive,an as StudioLive};
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 z(`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 ae(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),[f,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,te]=(0,J.useState)([]),[T,E]=(0,J.useState)(!1),[D,O]=(0,J.useState)(null),[k,A]=(0,J.useState)(`user`),j=(0,J.useRef)(null),M=(0,J.useRef)(h),N=(0,J.useRef)(c),P=(0,J.useRef)(w),F=(0,J.useRef)(t);return M.current=h,N.current=c,P.current=w,F.current=t,(0,J.useEffect)(()=>{C&&E(!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:f,setActiveTool:m,captions:h,setCaptions:g,failure:_,reportFailure:(0,J.useCallback)(t=>{v(p(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:te,everConnected:T,videoPreview:D,setVideoPreview:O,videoFacingMode:k,setVideoFacingMode:A,videoCaptureRef:j,captionsRef:M,isMutedRef:N,sessionPermissionsRef:P,statusRef:F,resetCaptions:(0,J.useCallback)(()=>{g($e())},[]),stopVideo:(0,J.useCallback)(()=>{j.current&&=(j.current.stop(),null),O(null),A(`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 z(`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 z(`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=V(e.live.ingress,`audio`),s=V(e.live.ingress,`video`),c=V(e.live.ingress,`text`),l=(0,J.useMemo)(()=>Fe({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)(m,[]),{clientRef:d,ensureClient:f,clearClient:p}=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:p,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":te,...T}){let E=t!=null,D=e!=null,O=i!=null,k=f?.includes(`bottom`)??!1,A=a[Ft[l]],{listRef:j,handleKeyDown:M,handleFocus:N}=y({itemSelector:`button, input, [tabindex]`,boundarySelector:`[role="toolbar"], [popover]`,orientation:u,hasRovingTabIndex:!0,hasCaretGuard:!0}),{hintElement:P,onKeyDown:F,onFocus:I,onBlur:L}=o({orientation:u}),R=(0,J.useCallback)(e=>{_?.(e),!e.defaultPrevented&&(F(e),M(e))},[_,F,M]),z=(0,J.useCallback)(e=>{b?.(e),!e.defaultPrevented&&(I(e),N(e))},[b,I,N]),B=(0,J.useCallback)(e=>{S?.(e),!e.defaultPrevented&&L(e)},[S,L]);return(0,X.jsx)(ee,{value:c,children:(0,X.jsx)(pe,{ref:g,variant:d,paddingBlock:Lt[c],dividers:f,xstyle:p,className:m,style:h,children:(0,X.jsxs)(`div`,{ref:j,role:`toolbar`,"aria-label":s,"aria-orientation":u,onKeyDown:R,onFocus:z,onBlur:B,...v(r(`toolbar`,{size:c}),n(E?Z.baseGrid:Z.baseFlex,u===`vertical`&&Z.vertical,It.base,Q.gap(A),k&&Q.tabIndicatorBottom(`calc(-1 * (${Rt[c]} + 1px))`))),...T,children:[E?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(`div`,{...n(Z.startSlot,x.inset($[c]),Q.gap(A)),children:e}),(0,X.jsx)(`div`,{...n(Z.centerSlot,Q.gap(A)),children:t}),(0,X.jsx)(`div`,{...n(Z.endSlot,x.inset($[c]),Q.gap(A)),children:i})]}):(0,X.jsxs)(X.Fragment,{children:[D&&(0,X.jsx)(`div`,{...n(Z.startSlot,!O&&Z.startOnly,x.inset($[c]),Q.gap(A)),children:e}),O&&(0,X.jsx)(`div`,{...n(Z.endSlot,!D&&Z.endOnly,x.inset($[c]),Q.gap(A)),children:i})]}),P]})})})}zt.displayName=`Toolbar`;function Bt(e){return(0,X.jsx)(j,{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=A(),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)(ve,{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)(w,{label:u(`@theorem.panel.captions.name`),children:(0,X.jsx)(ke,{blocks:p,dividers:g,handle:f,streaming:ht(t)})}):(0,X.jsx)(l,{height:`100%`,vAlign:`center`,padding:4,children:(0,X.jsx)(fe,{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 z(`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 g(),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 z(`auth`,`Fill the vault slot this model names.`);let[c]=this.queued.splice(0,1);if(typeof c!=`string`)throw new z(`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`,...oe(t,e.profile.labels,se)}),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:se});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)(h,{theme:e,mode:t,children:(0,X.jsx)(j,{labels:n,children:(0,X.jsx)(qt,{...r})})})}function qt({iface:e,connection:t,trace:n,slots:r,context:i,pageTools:a}){let o=A(),u=Pt(e,t,{slots:r,context:i,pageTools:a}),d=(0,J.useRef)(null),f=P(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)(te,{labels:m,icon:(0,X.jsx)(b,{icon:ye}),panelId:p.id,open:p.open,onToggle:p.toggle});return u.callStarted?(0,X.jsxs)(X.Fragment,{children:[(0,X.jsx)(F,{inspector:f,children:(0,X.jsx)(c,{ref:d,height:`fill`,header:(0,X.jsx)(D,{children:f.toggle}),content:(0,X.jsx)(s,{padding:0,children:(0,X.jsx)(c,{height:`fill`,end:(0,X.jsx)(T,{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)(F,{inspector:f,children:(0,X.jsx)(c,{ref:d,height:`fill`,header:(0,X.jsx)(D,{children:f.toggle}),content:(0,X.jsx)(s,{padding:0,children:(0,X.jsx)(Jt,{model:u})})})})}function Jt({model:e}){let t=A();return(0,X.jsx)(l,{minHeight:`100%`,vAlign:`center`,gap:8,paddingInline:3,children:(0,X.jsx)(L,{axis:`horizontal`,width:`100%`,children:(0,X.jsxs)(l,{width:`100%`,maxWidth:Se,gap:8,children:[(0,X.jsxs)(l,{gap:1,children:[(0,X.jsx)(O,{type:`large`,as:`h2`,children:t(`@theorem.agent.handle`,{handle:e.handle})}),(0,X.jsx)(O,{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:U}),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:W}),onClick:()=>e.startCall({video:!0})}):null]})]})})})}function Yt({model:e,captionsToggle:t}){let n=A(),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)(O,{type:`label`,color:`secondary`,children:n(`@theorem.agent.handle`,{handle:e.handle})}),(0,X.jsx)(O,{size:`sm`,color:`secondary`,children:k(n,e.liveState,e.activeTool)})]}),e.failure?(0,X.jsx)(I,{status:`error`,role:`alert`,title:e.failure.error}):null,e.sessionEnded?(0,X.jsx)(I,{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)(he,{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=A(),r=!e.sessionActive,i=[];return e.voiceAvailable&&i.push((0,X.jsx)(H,{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:f}),pressedIcon:(0,X.jsx)(b,{icon:je}),onPressedChange:e.handleToggleMic},`mic`)),e.videoAvailable&&(i.push((0,X.jsx)(H,{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:W}),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:Ae}),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:U}),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:Me}),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=A(),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)(_e,{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)(M,{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)(ge,{gate:e.gate,toolName:e.gate.tool,onAuthenticated:e=>{n({action:`auth`,secret:e})}}):(0,X.jsx)(xe,{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):be(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)(()=>_(e),[e]),s=(0,J.useMemo)(()=>me(e),[e]);return o.type===`live`?(0,X.jsx)(Kt,{labels:Te,iface:o,connection:()=>(t(),n()),trace:r,slots:i,context:a,pageTools:s}):null}export{on as ProjectLive,an as StudioLive};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,u as n}from"./themeProps-3IqahpCr.js";import{g as r}from"./fieldParts-Cs6Amprh.js";import{t as i}from"./Icon-ZfFwTt8n.js";import{r as a,t as o}from"./IconButton-CG5klqF1.js";import{t as s}from"./Text-BsiAsowd.js";import{t as c}from"./createReactComponent-CZwsv6DD.js";import{n as l,t as u}from"./ScrollableArea-C8AVuqnt.js";import{n as d,t as f}from"./Center-nHS1JSux.js";import{t as p}from"./IconEye-BB5aY-wQ.js";import{t as m}from"./IconSearch-BTx66a40.js";import{r as h,s as g,t as _}from"./tree-BxX70aqA.js";import{P as v,i as y}from"./workspace-Bc---F49.js";import{t as b}from"./EmptyState-C8W4JKBZ.js";import{t as x}from"./ContextMenu-CArbXxnu.js";import{B as S,Ct as C,Ft as w,J as T,Pt as E,R as D,St as O,V as k,_t as A,bt as j,d as M,n as N,u as P,vt as F,xt as I,yt as L,z as R}from"./index-BVTCzZhh.js";var z=c(`outline`,`arrows-maximize`,`ArrowsMaximize`,[[`path`,{d:`M16 4l4 0l0 4`,key:`svg-0`}],[`path`,{d:`M14 10l6 -6`,key:`svg-1`}],[`path`,{d:`M8 20l-4 0l0 -4`,key:`svg-2`}],[`path`,{d:`M4 20l6 -6`,key:`svg-3`}],[`path`,{d:`M16 20l4 0l0 -4`,key:`svg-4`}],[`path`,{d:`M14 14l6 6`,key:`svg-5`}],[`path`,{d:`M8 4l-4 0l0 4`,key:`svg-6`}],[`path`,{d:`M4 4l6 6`,key:`svg-7`}]]),B=c(`outline`,`arrows-minimize`,`ArrowsMinimize`,[[`path`,{d:`M5 9l4 0l0 -4`,key:`svg-0`}],[`path`,{d:`M3 3l6 6`,key:`svg-1`}],[`path`,{d:`M5 15l4 0l0 4`,key:`svg-2`}],[`path`,{d:`M3 21l6 -6`,key:`svg-3`}],[`path`,{d:`M19 9l-4 0l0 -4`,key:`svg-4`}],[`path`,{d:`M15 9l6 -6`,key:`svg-5`}],[`path`,{d:`M19 15l-4 0l0 4`,key:`svg-6`}],[`path`,{d:`M15 15l6 6`,key:`svg-7`}]]),V=c(`outline`,`focus-2`,`Focus2`,[[`path`,{d:`M11.5 12a.5 .5 0 1 0 1 0a.5 .5 0 1 0 -1 0`,fill:`currentColor`,key:`svg-0`}],[`path`,{d:`M5 12a7 7 0 1 0 14 0a7 7 0 1 0 -14 0`,key:`svg-1`}],[`path`,{d:`M12 3l0 2`,key:`svg-2`}],[`path`,{d:`M3 12l2 0`,key:`svg-3`}],[`path`,{d:`M12 19l0 2`,key:`svg-4`}],[`path`,{d:`M19 12l2 0`,key:`svg-5`}]]),H=c(`outline`,`layout-grid`,`LayoutGrid`,[[`path`,{d:`M4 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-0`}],[`path`,{d:`M14 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-1`}],[`path`,{d:`M4 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-2`}],[`path`,{d:`M14 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-3`}]]);function U(e,t,n){let r=e=>{let r=t.flatMap(({from:t,to:n})=>t===e.id?[n]:n===e.id?[t]:[]).flatMap(e=>n.get(e)??[]);return r.length===0?1/0:r.reduce((e,t)=>e+t,0)/r.length},i=new Map(e.map(e=>[e.id,r(e)])),a=e=>i.get(e.id)??1/0;return[...e].sort((e,t)=>a(e)===a(t)?0:a(e)-a(t))}function W(e,t,n){return t===`models`?e.modelBindings.map(e=>e.modelId||`New model`).join(`, `):t===`tools`?String(e.tools.allow.filter(e=>n.has(e)).length):t===`outputs`?e.outputs.mode:``}function G(e,t=[]){let n=[],r=new Map(e.agents.map(e=>[e.key,y(e.key)])),i=new Map(e.toolSpecs.map(e=>[e.key,g(e.key)])),a=v(e),o=e.agents.map((e,t)=>{let{agentId:n,profileType:r,handle:o}=e.identity,s=r||`text`;return{id:y(e.key),kind:`agent`,label:n||`New agent`,note:o?`${s} · ${o}`:s,opens:y(e.key),type:s,rows:(a.agents[t]?.children??[]).map(t=>({id:t.id,label:t.label,note:W(e,t.ref.facet,i),opens:t.id,type:t.ref.facet}))}}),s=new Set(o.flatMap(e=>e.rows??[]).map(e=>e.id)),c=(e,t)=>{let n=y(e,t);return s.has(n)?n:y(e)},l=new Map,u=new Map(e.providers.map(e=>[e.id,e.definition])),d=new Map;for(let t of e.agents){let e=c(t.key,`models`);for(let i of t.modelBindings){let a=`model:${i.provider}:${i.apiId}:${i.modelId}`,o=h(i.provider);l.has(o)||l.set(o,{id:o,kind:`provider`,label:i.provider,note:``,opens:u.has(i.provider)?o:y(t.key,_(i.key))});let s=y(t.key,_(i.key)),c=d.get(a);c?c.holds?.push(s):(d.set(a,{id:a,kind:`model`,label:i.modelId||`New model`,note:i.apiId,type:u.get(i.provider),opens:s,holds:[s]}),n.push({from:o,to:a,kind:`serves`})),n.some(t=>t.from===a&&t.to===e)||n.push({from:a,to:e,kind:`runs`});let f=i.compactWith?r.get(i.compactWith):void 0,p=n.some(t=>t.kind===`summarised`&&t.from===e);f&&f!==y(t.key)&&!p&&n.push({from:e,to:f,kind:`summarised`})}for(let e of t.tools.allow){let r=i.get(e);r&&n.push({from:c(t.key,`tools`),to:r,kind:`allows`})}}let f=e.toolSpecs.map(e=>{let t=g(e.key),i=e.toolType===`agent`?r.get(e.agentKey??``):void 0;return i&&n.push({from:t,to:i,kind:`asks`}),{id:t,kind:`tool`,label:e.toolName||`New tool`,note:e.description,opens:t,type:e.toolType}}),p=t.map(t=>{let{setting:i,facet:a}=t,o=`shared:${i.file}:${i.name}`,s=t.agents.filter(e=>r.has(e)),l=i.tools.flatMap(t=>{let n=e.toolSpecs.find(e=>e.toolName===t);return n?[g(n.key)]:[]});for(let e of s)n.push({from:o,to:a?c(e,a):y(e),kind:`sets`});for(let e of l)n.push({from:o,to:e,kind:`sets`});return{id:o,kind:`shared`,label:i.label,note:`${i.name} · ${i.file}:${String(i.line)}`,opens:T(t)??l[0],type:a}}),m=new Map(o.flatMap((e,t)=>[e.id,...(e.rows??[]).map(e=>e.id)].map(e=>[e,t])));for(let e of d.values())[...d.values()].some(t=>t!==e&&t.label===e.label)&&e.note&&(e.long=`${e.label} · ${e.note}`);let b=U([...d.values()],n,m),x=new Map(b.map((e,t)=>[e.id,t])),S=(...e)=>e.filter(e=>e.nodes.length>0);return{columns:[S({label:`Providers`,nodes:U([...l.values()],n,x)}),S({label:`Shared settings`,nodes:U(p,n,m)},{label:`Models`,nodes:b}),S({label:`Profiles`,nodes:o}),S({label:`Tools`,nodes:U(f,n,m)})].filter(e=>e.length>0),links:n}}function K(e){let t=e.columns.flat().flatMap(e=>e.nodes);return new Map(t.flatMap(e=>[e.id,...(e.rows??[]).map(e=>e.id)].map(t=>[t,e])))}function q(e){let t=K(e);return e.links.flatMap(e=>{let n=t.get(e.from)?.id,r=t.get(e.to)?.id;return n!==void 0&&r!==void 0?[{link:e,from:n,to:r}]:[]})}function ee(e,t){let n=t.trim().toLowerCase();return n===``?[]:e.columns.flat().flatMap(e=>e.nodes).filter(e=>[e.label,e.long??``,e.note].some(e=>e.toLowerCase().includes(n))).map(e=>e.id)}function te(e,t){let n=typeof t==`string`?[t]:t,r=q(e),i=(e,t)=>{let i=new Set(n),a=[...n];for(let n=a.pop();n!==void 0;n=a.pop())for(let o of r)o[e]!==n||i.has(o[t])||(i.add(o[t]),a.push(o[t]));return i},a=new Set([...i(`to`,`from`),...i(`from`,`to`)]),o=e.columns.map(e=>e.map(e=>({...e,nodes:e.nodes.filter(e=>a.has(e.id))})).filter(e=>e.nodes.length>0)).filter(e=>e.length>0),s=new Set(r.filter(({from:e,to:t})=>a.has(e)&&a.has(t)).map(({link:e})=>e));return{columns:o,links:e.links.filter(e=>s.has(e))}}var ne={serves:[`Serves`,`Served by`],sets:[`Sets`,`Set by`],runs:[`Runs`,`Runs on`],allows:[`Allows`,`Allowed by`],asks:[`Asks`,`Asked by`],summarised:[`Summarised by`,`Summarises for`]};function re(e,t){let n=K(e),r=new Map;for(let{link:i,from:a,to:o}of q(e)){if(a!==t&&o!==t)continue;let e=ne[i.kind][a===t?0:1],s=n.get(a===t?o:a)?.label;s!==void 0&&r.set(e,[...r.get(e)??[],s])}return[...r].map(([e,t])=>`${e} ${t.join(`, `)}.`).join(` `)}function ie(e){return e.kind===`tool`||e.kind===`shared`?2:1}var ae=24,J=8,Y=16;function oe(e,t,n){let r=new Map,i=(e,t)=>`${e}:${String(t)}`;return q(e).flatMap(({link:e})=>{let[a,o]=[t(e.from),t(e.to)];if(a===void 0||o===void 0||Math.abs(a-o)<n)return[];let s=a<o?1:-1;for(let t of[i(e.from,s),i(e.to,-s)])r.set(t,(r.get(t)??0)+1);return[{link:e,way:s}]}).map(({link:e,way:t})=>{let[n,a]=[i(e.from,t),i(e.to,-t)],o=(r.get(n)??0)>=(r.get(a)??0);return{link:e,way:t,leaves:o,hub:o?n:a}})}function se(e,t,n={}){let{node:r,card:i,columnGap:a,rowGap:o,heading:s,groupGap:c,padding:l,lineGap:u}=t,{moved:d={},widths:f={},detail:p=!1}=n,m=new Map;e.columns.forEach((e,t)=>{for(let n of e)for(let e of n.nodes)if(!Object.hasOwn(d,e.id))for(let n of[e.id,...(e.rows??[]).map(e=>e.id)])m.set(n,t)});let h=t=>{let n={},a=[],u=[],m=new Map,h=0,g=0;return e.columns.forEach((e,_)=>{let v=t[_]??l,y=l;e.forEach((e,t)=>{t>0&&(y+=c),a.push({label:e.label,x:v,y}),u.push({id:`heading:${_}:${t}`,x:v,y,width:r.width,height:s}),y+=s;for(let t of e.nodes){let e=p?t.rows??[]:[],a=e.length>0||t.note!==``,s=p&&(e.length>0||ie(t)===1)?i.head:r.height,c=p&&!a?i.row:s,l=e.length>0?i.head+e.length*i.row+i.foot:c,_=Math.min(f[t.id]??r.width,r.width),b=Object.hasOwn(d,t.id)?d[t.id]:void 0,x=b?{x:Math.max(b.x,0),y:Math.max(b.y,0)}:{x:v,y};n[t.id]={...x,height:l},u.push({id:t.id,...x,width:_,height:l});let S={left:x.x,right:x.x+_,y:x.y+(p?i.row:c)/2};m.set(t.id,S);for(let[e,n]of(t.rows??[]).entries())m.set(n.id,p?{...S,y:x.y+i.head+e*i.row+i.row/2}:S);h=Math.max(h,x.x+r.width),g=Math.max(g,x.y+l),y+=l+o}y-=o})}),{nodes:n,headings:a,boxes:u,ports:m,right:h,bottom:g}},g=(e,t,n)=>{let{way:i,leaves:a}=e,o={x:i>0?t.right+u:t.left-u,y:t.y},s={x:i>0?n.left-u:n.right+u,y:n.y},c=i>0?Math.max(t.left+r.width,t.right)+u:o.x,l=i>0?s.x:Math.max(n.left+r.width,n.right)+u,d=a?l:c,f=a?-i:i;return{start:o,end:s,side:d,into:f,room:Math.abs(l-c),strip:`${String(d)}:${String(f)}`}},_=t=>{let n=new Map(oe(e,e=>t.get(e)?.left,r.width).map(e=>[e.link,e])),i=new Map;for(let e of n.values()){let n=t.get(e.link.from),r=t.get(e.link.to);if(!n||!r||n.y===r.y)continue;let{strip:a}=g(e,n,r),o=i.get(a)??new Map,s=e.leaves?e.link.to:e.link.from,c=o.get(e.hub)??{y:e.leaves?n.y:r.y,joins:[],beside:s};c.joins.push(e.leaves?r.y:n.y),i.set(a,o.set(e.hub,c))}let a=new Map,o=new Map;for(let[e,t]of i){let n=e=>e.reduce((e,t)=>e+t,0)/e.length,r=[...t.values()],i=n(r.flatMap(e=>e.joins))>=n(r.map(e=>e.y)),s=[];for(let[n,r]of[...t].sort(([,e],[,t])=>i?e.y-t.y:t.y-e.y)){let t=Math.min(r.y,...r.joins)-J,i=Math.max(r.y,...r.joins)+J,o=s.findIndex(e=>e.every(e=>i<e.low||t>e.high)),c=o<0?s.length:o;s[c]=[...s[c]??[],{low:t,high:i}],a.set(`${e}:${n}`,c)}let[c]=r;c&&o.set(e,{count:s.length,beside:c.beside,into:Number(e.split(`:`)[1])})}return{spans:n,rails:a,held:o}},v=e.columns.map((e,t)=>l+t*(r.width+a)),y=e.columns.map(()=>0);for(let{count:e,beside:t,into:n}of _(h(v).ports).held.values()){let r=m.get(t);if(r===void 0)continue;let i=n>0?r:r-1;i>=0&&i<y.length&&(y[i]=(y[i]??0)+e+1)}let b=[l];for(let[e,t]of y.entries())b.push((b[e]??l)+r.width+Math.max(a,t*Y));let x=h(b),{nodes:S,headings:w,boxes:T,ports:E}=x,{right:D,bottom:k}=x,{spans:A,rails:j}=_(E),M=a/2,N=Math.max(o/2,u),P=[],F=new Map,I=Math.max(a,...y.map(e=>e*Y)),L=q(e).flatMap(({link:e,from:t,to:n})=>{let i=E.get(e.from),o=E.get(e.to);if(!i||!o)return[];let s=T.filter(e=>e.id!==t&&e.id!==n);if(Math.abs(i.left-o.left)<r.width){let r=i.right+u,a=o.right+u,c=s.filter(e=>e.y<Math.max(i.y,o.y)&&e.y+e.height>Math.min(i.y,o.y)&&e.x<Math.max(r,a)+M&&e.x+e.width>Math.min(i.left,o.left)),l=Math.max(r,a,...c.map(e=>e.x+e.width))+M;return D=Math.max(D,l),[{link:e,from:t,to:n,d:O({x:r,y:i.y},{x:a,y:o.y},l).d}]}let c=A.get(e);if(!c)return[];let{way:l,leaves:d,hub:f}=c,{start:p,end:m,side:h,into:_,room:v,strip:y}=g(c,i,o),b=h+_*Math.min((1+(j.get(`${y}:${f}`)??0))*Y,Math.max(v-Y,0)),x=v<32?O(p,m):C(p,m,b,J),S=(e,t)=>t>e.y-N&&t<e.y+e.height+N,w=Math.abs(m.x-p.x)<I+a?[]:s.filter(e=>Array.from({length:23},(e,t)=>x.at((t+1)/ae)).some(t=>t.x>e.x&&t.x<e.x+e.width&&S(e,t.y)));if(w.length===0)return[{link:e,from:t,to:n,d:x.d}];let[L,R]=[Math.min(p.x,m.x),Math.max(p.x,m.x)],z=e=>{let t=[...w];for(;;){let n=e<0?Math.min(...t.map(e=>e.y))-N:Math.max(...t.map(e=>e.y+e.height))+N,r=[...s,...P].filter(e=>!t.includes(e)&&e.x<R&&e.x+e.width>L&&S(e,n));if(r.length===0)return n;t.push(...r)}},B=e=>Math.abs(i.y-e)+Math.abs(o.y-e),V=`${f}:${y}`,H=F.get(V)??(()=>{let[e,t]=[z(-1),z(1)],n=e>=0&&B(e)<=B(t)?e:t;return P.push({id:``,x:L,y:n-J+N,width:R-L,height:2*(J-N)}),F.set(V,n),n})();k=Math.max(k,H);let U=d?p.x+l*Y:b,W=d?b:m.x-l*Y,G={x:(U+W)/2,y:H};return[{link:e,from:t,to:n,d:C(p,G,U,J).d+C(G,m,W,J).d.replace(/^M \S+ \S+/,``)}]});return{width:Math.max((b[Math.max(e.columns.length-1,0)]??l)+r.width,D)+l,height:Math.max(k,l)+l,nodes:S,headings:w,lines:L}}var X=e(n(),1),ce={tokens:{},detail:{},expanded:!1},Z=e=>e===void 0?`${D}.map`:`${D}.map.project:${e}`;function le(e){if(!R(e))return{};let t={};for(let[n,r]of Object.entries(e))R(r)&&typeof r.x==`number`&&typeof r.y==`number`&&(t[n]={x:r.x,y:r.y});return t}function ue(e){try{let t=JSON.parse(S()?.getItem(Z(e))??`null`);return R(t)?{tokens:le(t.tokens),detail:le(t.detail),expanded:t.expanded===!0,...typeof t.family==`string`?{family:t.family}:{}}:ce}catch{return ce}}function de(e,t){let{tokens:n,detail:r,expanded:i,family:a}=t,o=Object.keys(n).length===0&&Object.keys(r).length===0&&!i&&a===void 0;try{o?S()?.removeItem(Z(e)):S()?.setItem(Z(e),JSON.stringify(t))}catch{}}function fe(e){for(let t=e.parentElement;t;t=t.parentElement){let{overflowX:e,overflowY:n}=getComputedStyle(t);if(/auto|scroll/.test(`${e} ${n}`))return t}}function pe(e,t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();return{left:n.left-r.left+t.scrollLeft,top:n.top-r.top+t.scrollTop}}function me(e,t){let n=0,r=120,i=()=>{--r;let a=fe(e);if(a&&a.scrollWidth>a.clientWidth){let{left:e,top:n}=t(a);if(a.scrollTo({left:e,top:n,behavior:`instant`}),Math.abs(a.scrollLeft-e)<1&&Math.abs(a.scrollTop-n)<1)return}r>0&&(n=requestAnimationFrame(i))};return i(),()=>{cancelAnimationFrame(n)}}var he=e=>e.button===0&&e.pointerType!==`touch`;function ge(e,t,n){let{pointerId:r,clientX:i,clientY:a}=e,o=e=>{e.pointerId===r&&t(e.clientX-i,e.clientY-a)},s=e=>{e.pointerId===r&&(globalThis.removeEventListener(`pointermove`,o),globalThis.removeEventListener(`pointerup`,s),globalThis.removeEventListener(`pointercancel`,s),n(e.type===`pointerup`))};globalThis.addEventListener(`pointermove`,o),globalThis.addEventListener(`pointerup`,s),globalThis.addEventListener(`pointercancel`,s)}function _e(e){let[t,n]=(0,X.useState)(!1);return{panning:t,pan:t=>{if(!he(t)||t.target.closest(e))return;let r=fe(t.currentTarget);if(!r)return;let{scrollLeft:i,scrollTop:a}=r;n(!0),ge(t,(e,t)=>{r.scrollTo({left:i-e,top:a-t,behavior:`instant`})},()=>{n(!1)})}}}var Q=t(),ve={node:{width:240,height:24},card:{head:60,row:28,foot:4},columnGap:96,rowGap:6,heading:24,groupGap:16,padding:24,lineGap:8},ye={...ve,node:{width:240,height:84}},be=28;function xe(e){return e.length>be?`${e.slice(0,27)}…`:e}function Se({kind:e,type:t,note:n}){return(e===`agent`?j(t):void 0)||(e===`tool`?I(t??``):e===`model`&&t===`typesafe`?P:e===`model`?M(n)??N.modelBinding:e===`provider`?w:e===`shared`&&t&&Object.hasOwn(N,t)?N[t]:e===`agent`?L.text:E)}function Ce(e){return Object.hasOwn(N,e)?N[e]:E}function $(e,t){return e.kind===`agent`?t===e.id||t.startsWith(`${e.id}/`):e.kind===`model`?e.holds?.includes(t)??!1:e.kind===`tool`&&t===e.id}var we=4,Te=24,Ee={ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0},ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1}};function De(e){let t=k()?.name,[n,r]=(0,X.useState)(()=>ue(t)),i=e=>{r(e),de(t,e)},{expanded:a}=n,o=e.columns.flat().some(e=>e.nodes.some(e=>e.id===n.family))?n.family:void 0,s=(0,X.useMemo)(()=>o===void 0?e:te(e,o),[e,o]),[c,l]=(0,X.useState)({}),u=a?`detail`:`tokens`;return{expanded:a,family:o,map:s,moved:o===void 0?n[u]:c,put(e,t){o===void 0?t?i({...n,[u]:e}):r({...n,[u]:e}):l(e)},showFamily(e){l({});let{tokens:t,detail:r}=n;i({tokens:t,detail:r,expanded:a,...e===void 0?{}:{family:e}})},expand(){i({...n,expanded:!a})}}}function Oe(e,t,n){let r=(0,X.useRef)(!1),[i,a]=(0,X.useState)();return{dragging:i,draggable:i=>({onPointerDown:o=>{r.current=!1;let s=e.nodes[i];if(!s||!he(o))return;let c;ge(o,(e,r)=>{!c&&Math.hypot(e,r)<we||(c||a(i),c={...t,[i]:{x:Math.max(s.x+e,0),y:Math.max(s.y+r,0)}},n(c,!1))},e=>{c&&(r.current=e,globalThis.setTimeout(()=>{r.current=!1},0),a(void 0),n(c,!0))})},onClickCapture:e=>{r.current&&(r.current=!1,e.stopPropagation(),e.preventDefault())},onKeyDown:r=>{let a=r.altKey?Ee[r.key]:void 0,o=e.nodes[i];if(!a||!o)return;r.preventDefault();let s=Math.max(o.x+a.x*Te,0),c=Math.max(o.y+a.y*Te,0);n({...t,[i]:{x:s,y:c}},!0)}})}}function ke(e){let[t,n]=(0,X.useState)(),[r,i]=(0,X.useMemo)(()=>{let n=new Set,r=new Set;if(t===void 0)return[n,r];n.add(t);for(let{link:i,from:a,to:o}of e.lines)if([i.from,i.to,a,o].includes(t)){r.add(i);for(let e of[i.from,i.to,a,o])n.add(e)}return[n,r]},[e,t]);return{lit:t,on:r,onLines:i,lights:e=>({onPointerEnter:()=>{n(e)},onPointerLeave:()=>{n(void 0)},onFocus:()=>{n(e)},onBlur:()=>{n(void 0)}})}}function Ae(e,t,n){let r=(0,X.useRef)(n.place);r.current=n.place;let{sizes:i}=n;(0,X.useEffect)(()=>{let n=e.current;if(!n)return;let a=r.current,o=t===void 0?a:void 0;return me(n,e=>{let t=o!==void 0&&(o.x+i.node.width>e.clientWidth||o.y+o.height>e.clientHeight),{left:r,top:a}=pe(n,e);return{left:r+(t?o.x-i.padding:0),top:a+(t?o.y-i.padding-i.heading:0)}})},[e,t,i])}function je(e,t,n){let{family:r,expanded:i,isMoved:a,showFamily:o,expand:s,tidy:c}=n,l=[];e&&e.id!==r&&l.push({label:`Show only its family`,icon:V,onClick:()=>{o(e.id)}});let u=e?.opens;u!==void 0&&l.push({label:`Open`,icon:d,onClick:()=>{t(u)}}),e&&l.push({type:`divider`});let f={label:`Show everything`,icon:p,onClick:()=>{o(void 0)}};return[...l,...r===void 0?[]:[f],{label:i?`Collapse`:`Expand`,icon:i?B:z,onClick:s},{label:`Tidy`,icon:H,isDisabled:!a,onClick:c}]}function Me({actions:e,query:t,onQuery:n,onClose:s}){let{family:c,expanded:u,isMoved:d,showFamily:f,expand:h,tidy:g}=e;return(0,Q.jsxs)(`div`,{className:`studio-map-tools`,children:[(0,Q.jsx)(l,{label:`Search the map`,isLabelHidden:!0,size:`sm`,width:200,placeholder:`Search`,startIcon:m,hasClear:!0,value:t,onChange:n}),c!==void 0&&(0,Q.jsx)(a,{label:`Show everything`,variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(i,{icon:p,size:`sm`}),onClick:()=>{f(void 0)}}),d&&(0,Q.jsx)(a,{label:`Tidy`,variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(i,{icon:H,size:`sm`}),onClick:g}),(0,Q.jsx)(o,{label:u?`Collapse`:`Expand`,variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(i,{icon:u?B:z,size:`sm`}),tooltip:u?`Show each node as a token`:`Show sections and descriptions`,onClick:h}),(0,Q.jsx)(o,{label:`Close map`,variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(i,{icon:r,size:`sm`}),tooltip:`Close the map`,onClick:s})]})}function Ne({node:e,on:t,isFound:n,isDragging:r}){let i=t.has(e.id)||(e.rows??[]).some(e=>t.has(e.id));return{"data-map-node":e.id,"data-on":i?``:void 0,"data-found":n?``:void 0,"data-dragging":r?``:void 0}}function Pe(e){let{node:t,place:n,joins:r,selected:i,onOpen:a,lights:o,drag:s}=e,{opens:c}=t,l=$(t,i);return(0,Q.jsx)(A,{id:t.id,label:xe(t.long??t.label),icon:Se(t),x:n.x,y:n.y+n.height/2,color:l?`blue`:void 0,description:[t.note,r].filter(Boolean).join(`. `)||void 0,onOpen:c===void 0?void 0:()=>{a(c)},title:(t.long??t.label).length>be?t.long??t.label:void 0,"aria-current":l?`true`:void 0,...Ne(e),...o(t.id),...s})}function Fe(e){let{node:t,place:n,joins:r,selected:a,on:o,onOpen:c,lights:l,drag:u}=e,{opens:d}=t,f=t.rows??[],p={left:n.x,top:n.y,height:n.height},m=(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`span`,{className:`studio-map-name`,children:[(0,Q.jsx)(i,{icon:Se(t),size:`sm`}),(0,Q.jsx)(s,{type:`supporting`,color:`inherit`,weight:`medium`,maxLines:1,hasTruncateTooltip:!1,children:t.label})]}),t.note&&(0,Q.jsx)(s,{type:`supporting`,maxLines:f.length>0?1:ie(t),hasTruncateTooltip:!1,className:`studio-map-note`,children:t.note})]}),h={type:`button`,title:t.note||void 0,"aria-description":r||void 0,disabled:d===void 0,onClick:()=>{d!==void 0&&c(d)},...l(t.id)};return f.length===0?(0,Q.jsx)(`button`,{...h,...u,...Ne(e),className:`studio-map-node`,"data-map-token":t.id,style:p,"aria-current":$(t,a)?`true`:void 0,children:m}):(0,Q.jsxs)(`div`,{className:`studio-map-card`,"data-map-token":t.id,style:p,"data-open":$(t,a)?``:void 0,...Ne(e),...u,children:[(0,Q.jsx)(`button`,{...h,className:`studio-map-head`,"aria-current":a===t.id?`true`:void 0,children:m}),f.map(e=>(0,Q.jsxs)(`button`,{type:`button`,className:`studio-map-row`,"aria-current":a===e.id?`true`:void 0,"data-on":o.has(e.id)?``:void 0,onClick:()=>{c(e.opens)},...l(e.id),children:[(0,Q.jsx)(i,{icon:Ce(e.type),size:`sm`}),(0,Q.jsx)(s,{type:`supporting`,color:`inherit`,weight:`medium`,maxLines:1,hasTruncateTooltip:!1,children:e.label}),e.note&&(0,Q.jsx)(s,{type:`supporting`,maxLines:1,justify:`end`,hasTruncateTooltip:!1,className:`studio-map-row-note`,children:e.note})]},e.id))]})}function Ie({workspace:e,shared:t,selected:n,onOpen:r,onClose:a}){let{expanded:o,family:c,map:l,moved:d,put:p,showFamily:h,expand:g}=De((0,X.useMemo)(()=>G(e,t),[e,t])),[_,v]=(0,X.useState)(``),y=(0,X.useMemo)(()=>ee(l,_),[l,_]),S=(0,X.useMemo)(()=>_.trim()===``?l:te(l,y),[l,_,y]),C=_.trim()!==``&&y.length===0,w=(0,X.useRef)(null),T=o?ye:ve,E=(0,X.useMemo)(()=>({map:S,expanded:o}),[S,o]),D=F(w,E),O=(0,X.useMemo)(()=>se(S,T,{moved:d,widths:D,detail:o}),[S,T,o,d,D]),k=S.columns.flat().flatMap(e=>e.nodes),A=k.find(e=>$(e,n))?.id;Ae(w,c,{place:A===void 0?void 0:O.nodes[A],sizes:T});let{dragging:j,draggable:M}=Oe(O,d,p),{panning:N,pan:P}=_e(`[data-map-node]`),{lit:I,on:L,onLines:R,lights:z}=ke(O),B={family:c,expanded:o,isMoved:k.some(e=>Object.hasOwn(d,e.id)),showFamily:h,expand:g,tidy:()=>{p({},!0)}},[V,H]=(0,X.useState)(),U=je(k.find(e=>e.id===V),r,B),W=o?Fe:Pe,K=k.find(e=>$(e,n))?.id,q=e=>R.has(e.link)?2:+(e.from===K||e.to===K),ne=[...O.lines].sort((e,t)=>q(e)-q(t));return(0,Q.jsxs)(`div`,{className:`studio-map-frame`,role:`none`,onKeyDown:e=>{e.key===`Escape`&&c!==void 0&&(e.target.closest(`[role="menu"]`)||(e.stopPropagation(),h(void 0)))},children:[(0,Q.jsx)(u,{className:`studio-map-scroll`,axis:`both`,role:`region`,label:`Map`,height:`100%`,overscroll:`allow`,children:(0,Q.jsx)(x,{items:U,label:`Map actions`,"data-map-field":``,children:(0,Q.jsxs)(`div`,{ref:w,className:`studio-map`,"data-lit":I===void 0||j!==void 0?void 0:``,"data-panning":N?``:void 0,onPointerDown:P,onContextMenuCapture:e=>{H(e.target.closest(`[data-map-node]`)?.dataset.mapNode)},style:{"--map-width":`${String(O.width)}px`,"--map-height":`${String(O.height)}px`,"--map-slot":`${String(T.node.width)}px`,"--map-line":`${String(T.card.row)}px`},children:[(0,Q.jsx)(`svg`,{className:`studio-map-lines`,width:O.width,height:O.height,"aria-hidden":`true`,children:ne.map(({link:e,from:t,to:n,d:r})=>(0,Q.jsx)(`path`,{className:`map-line`,d:r,"data-kind":e.kind,"data-on":R.has(e)?``:void 0,"data-open":t===K||n===K?``:void 0},`${e.kind}:${e.from}:${e.to}`))}),O.headings.map(({label:e,x:t,y:n})=>(0,Q.jsx)(`div`,{className:`studio-map-heading`,style:{left:t,top:n},children:(0,Q.jsx)(s,{type:`supporting`,color:`secondary`,weight:`semibold`,children:e})},e)),k.map(e=>{let t=O.nodes[e.id];return t&&(0,Q.jsx)(W,{node:e,place:t,joins:re(S,e.id),selected:n,on:L,isFound:y.includes(e.id),isDragging:j===e.id,onOpen:r,lights:z,drag:M(e.id)},e.id)})]})})}),C&&(0,Q.jsx)(f,{className:`studio-map-nothing`,children:(0,Q.jsx)(b,{headingLevel:2,icon:(0,Q.jsx)(i,{icon:m,size:`lg`}),title:`Nothing matches`})}),(0,Q.jsx)(Me,{actions:B,query:_,onQuery:v,onClose:a})]})}export{Ie as StudioMap};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,u as n}from"./themeProps-3IqahpCr.js";import{g as r}from"./fieldParts-Cs6Amprh.js";import{t as i}from"./Icon-ZfFwTt8n.js";import{r as a,t as o}from"./IconButton-CG5klqF1.js";import{t as s}from"./Text-BsiAsowd.js";import{t as c}from"./createReactComponent-CZwsv6DD.js";import{n as l,t as u}from"./ScrollableArea-C8AVuqnt.js";import{n as d,t as f}from"./Center-nHS1JSux.js";import{t as p}from"./IconEye-BB5aY-wQ.js";import{t as m}from"./IconSearch-BTx66a40.js";import{r as h,s as g,t as _}from"./tree-BxX70aqA.js";import{P as v,i as y}from"./workspace-Bc---F49.js";import{t as b}from"./EmptyState-C8W4JKBZ.js";import{t as x}from"./ContextMenu-BreVLY9J.js";import{Bt as S,Ct as C,Et as w,H as T,St as E,Tt as D,U as O,V as k,W as A,Z as j,bt as M,f as N,p as P,r as F,wt as I,xt as L,zt as R}from"./index-C3mDKoGG.js";var z=c(`outline`,`arrows-maximize`,`ArrowsMaximize`,[[`path`,{d:`M16 4l4 0l0 4`,key:`svg-0`}],[`path`,{d:`M14 10l6 -6`,key:`svg-1`}],[`path`,{d:`M8 20l-4 0l0 -4`,key:`svg-2`}],[`path`,{d:`M4 20l6 -6`,key:`svg-3`}],[`path`,{d:`M16 20l4 0l0 -4`,key:`svg-4`}],[`path`,{d:`M14 14l6 6`,key:`svg-5`}],[`path`,{d:`M8 4l-4 0l0 4`,key:`svg-6`}],[`path`,{d:`M4 4l6 6`,key:`svg-7`}]]),B=c(`outline`,`arrows-minimize`,`ArrowsMinimize`,[[`path`,{d:`M5 9l4 0l0 -4`,key:`svg-0`}],[`path`,{d:`M3 3l6 6`,key:`svg-1`}],[`path`,{d:`M5 15l4 0l0 4`,key:`svg-2`}],[`path`,{d:`M3 21l6 -6`,key:`svg-3`}],[`path`,{d:`M19 9l-4 0l0 -4`,key:`svg-4`}],[`path`,{d:`M15 9l6 -6`,key:`svg-5`}],[`path`,{d:`M19 15l-4 0l0 4`,key:`svg-6`}],[`path`,{d:`M15 15l6 6`,key:`svg-7`}]]),V=c(`outline`,`focus-2`,`Focus2`,[[`path`,{d:`M11.5 12a.5 .5 0 1 0 1 0a.5 .5 0 1 0 -1 0`,fill:`currentColor`,key:`svg-0`}],[`path`,{d:`M5 12a7 7 0 1 0 14 0a7 7 0 1 0 -14 0`,key:`svg-1`}],[`path`,{d:`M12 3l0 2`,key:`svg-2`}],[`path`,{d:`M3 12l2 0`,key:`svg-3`}],[`path`,{d:`M12 19l0 2`,key:`svg-4`}],[`path`,{d:`M19 12l2 0`,key:`svg-5`}]]),H=c(`outline`,`layout-grid`,`LayoutGrid`,[[`path`,{d:`M4 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-0`}],[`path`,{d:`M14 5a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-1`}],[`path`,{d:`M4 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-2`}],[`path`,{d:`M14 15a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v4a1 1 0 0 1 -1 1h-4a1 1 0 0 1 -1 -1l0 -4`,key:`svg-3`}]]);function U(e,t,n){let r=e=>{let r=t.flatMap(({from:t,to:n})=>t===e.id?[n]:n===e.id?[t]:[]).flatMap(e=>n.get(e)??[]);return r.length===0?1/0:r.reduce((e,t)=>e+t,0)/r.length},i=new Map(e.map(e=>[e.id,r(e)])),a=e=>i.get(e.id)??1/0;return[...e].sort((e,t)=>a(e)===a(t)?0:a(e)-a(t))}function W(e,t,n){return t===`models`?e.modelBindings.map(e=>e.modelId||`New model`).join(`, `):t===`tools`?String(e.tools.allow.filter(e=>n.has(e)).length):t===`outputs`?e.outputs.mode:``}function G(e,t=[]){let n=[],r=new Map(e.agents.map(e=>[e.key,y(e.key)])),i=new Map(e.toolSpecs.map(e=>[e.key,g(e.key)])),a=v(e),o=e.agents.map((e,t)=>{let{agentId:n,profileType:r,handle:o}=e.identity,s=r||`text`;return{id:y(e.key),kind:`agent`,label:n||`New agent`,note:o?`${s} · ${o}`:s,opens:y(e.key),type:s,rows:(a.agents[t]?.children??[]).map(t=>({id:t.id,label:t.label,note:W(e,t.ref.facet,i),opens:t.id,type:t.ref.facet}))}}),s=new Set(o.flatMap(e=>e.rows??[]).map(e=>e.id)),c=(e,t)=>{let n=y(e,t);return s.has(n)?n:y(e)},l=new Map,u=new Map(e.providers.map(e=>[e.id,e.definition])),d=new Map;for(let t of e.agents){let e=c(t.key,`models`);for(let i of t.modelBindings){let a=`model:${i.provider}:${i.apiId}:${i.modelId}`,o=h(i.provider);l.has(o)||l.set(o,{id:o,kind:`provider`,label:i.provider,note:``,opens:u.has(i.provider)?o:y(t.key,_(i.key))});let s=y(t.key,_(i.key)),c=d.get(a);c?c.holds?.push(s):(d.set(a,{id:a,kind:`model`,label:i.modelId||`New model`,note:i.apiId,type:u.get(i.provider),opens:s,holds:[s]}),n.push({from:o,to:a,kind:`serves`})),n.some(t=>t.from===a&&t.to===e)||n.push({from:a,to:e,kind:`runs`});let f=i.compactWith?r.get(i.compactWith):void 0,p=n.some(t=>t.kind===`summarised`&&t.from===e);f&&f!==y(t.key)&&!p&&n.push({from:e,to:f,kind:`summarised`})}for(let e of t.tools.allow){let r=i.get(e);r&&n.push({from:c(t.key,`tools`),to:r,kind:`allows`})}}let f=e.toolSpecs.map(e=>{let t=g(e.key),i=e.toolType===`agent`?r.get(e.agentKey??``):void 0;return i&&n.push({from:t,to:i,kind:`asks`}),{id:t,kind:`tool`,label:e.toolName||`New tool`,note:e.description,opens:t,type:e.toolType}}),p=t.map(t=>{let{setting:i,facet:a}=t,o=`shared:${i.file}:${i.name}`,s=t.agents.filter(e=>r.has(e)),l=i.tools.flatMap(t=>{let n=e.toolSpecs.find(e=>e.toolName===t);return n?[g(n.key)]:[]});for(let e of s)n.push({from:o,to:a?c(e,a):y(e),kind:`sets`});for(let e of l)n.push({from:o,to:e,kind:`sets`});return{id:o,kind:`shared`,label:i.label,note:`${i.name} · ${i.file}:${String(i.line)}`,opens:j(t)??l[0],type:a}}),m=new Map(o.flatMap((e,t)=>[e.id,...(e.rows??[]).map(e=>e.id)].map(e=>[e,t])));for(let e of d.values())[...d.values()].some(t=>t!==e&&t.label===e.label)&&e.note&&(e.long=`${e.label} · ${e.note}`);let b=U([...d.values()],n,m),x=new Map(b.map((e,t)=>[e.id,t])),S=(...e)=>e.filter(e=>e.nodes.length>0);return{columns:[S({label:`Providers`,nodes:U([...l.values()],n,x)}),S({label:`Shared settings`,nodes:U(p,n,m)},{label:`Models`,nodes:b}),S({label:`Profiles`,nodes:o}),S({label:`Tools`,nodes:U(f,n,m)})].filter(e=>e.length>0),links:n}}function K(e){let t=e.columns.flat().flatMap(e=>e.nodes);return new Map(t.flatMap(e=>[e.id,...(e.rows??[]).map(e=>e.id)].map(t=>[t,e])))}function q(e){let t=K(e);return e.links.flatMap(e=>{let n=t.get(e.from)?.id,r=t.get(e.to)?.id;return n!==void 0&&r!==void 0?[{link:e,from:n,to:r}]:[]})}function ee(e,t){let n=t.trim().toLowerCase();return n===``?[]:e.columns.flat().flatMap(e=>e.nodes).filter(e=>[e.label,e.long??``,e.note].some(e=>e.toLowerCase().includes(n))).map(e=>e.id)}function te(e,t){let n=typeof t==`string`?[t]:t,r=q(e),i=(e,t)=>{let i=new Set(n),a=[...n];for(let n=a.pop();n!==void 0;n=a.pop())for(let o of r)o[e]!==n||i.has(o[t])||(i.add(o[t]),a.push(o[t]));return i},a=new Set([...i(`to`,`from`),...i(`from`,`to`)]),o=e.columns.map(e=>e.map(e=>({...e,nodes:e.nodes.filter(e=>a.has(e.id))})).filter(e=>e.nodes.length>0)).filter(e=>e.length>0),s=new Set(r.filter(({from:e,to:t})=>a.has(e)&&a.has(t)).map(({link:e})=>e));return{columns:o,links:e.links.filter(e=>s.has(e))}}var ne={serves:[`Serves`,`Served by`],sets:[`Sets`,`Set by`],runs:[`Runs`,`Runs on`],allows:[`Allows`,`Allowed by`],asks:[`Asks`,`Asked by`],summarised:[`Summarised by`,`Summarises for`]};function re(e,t){let n=K(e),r=new Map;for(let{link:i,from:a,to:o}of q(e)){if(a!==t&&o!==t)continue;let e=ne[i.kind][a===t?0:1],s=n.get(a===t?o:a)?.label;s!==void 0&&r.set(e,[...r.get(e)??[],s])}return[...r].map(([e,t])=>`${e} ${t.join(`, `)}.`).join(` `)}function ie(e){return e.kind===`tool`||e.kind===`shared`?2:1}var ae=24,J=8,Y=16;function oe(e,t,n){let r=new Map,i=(e,t)=>`${e}:${String(t)}`;return q(e).flatMap(({link:e})=>{let[a,o]=[t(e.from),t(e.to)];if(a===void 0||o===void 0||Math.abs(a-o)<n)return[];let s=a<o?1:-1;for(let t of[i(e.from,s),i(e.to,-s)])r.set(t,(r.get(t)??0)+1);return[{link:e,way:s}]}).map(({link:e,way:t})=>{let[n,a]=[i(e.from,t),i(e.to,-t)],o=(r.get(n)??0)>=(r.get(a)??0);return{link:e,way:t,leaves:o,hub:o?n:a}})}function se(e,t,n={}){let{node:r,card:i,columnGap:a,rowGap:o,heading:s,groupGap:c,padding:l,lineGap:u}=t,{moved:d={},widths:f={},detail:p=!1}=n,m=new Map;e.columns.forEach((e,t)=>{for(let n of e)for(let e of n.nodes)if(!Object.hasOwn(d,e.id))for(let n of[e.id,...(e.rows??[]).map(e=>e.id)])m.set(n,t)});let h=t=>{let n={},a=[],u=[],m=new Map,h=0,g=0;return e.columns.forEach((e,_)=>{let v=t[_]??l,y=l;e.forEach((e,t)=>{t>0&&(y+=c),a.push({label:e.label,x:v,y}),u.push({id:`heading:${_}:${t}`,x:v,y,width:r.width,height:s}),y+=s;for(let t of e.nodes){let e=p?t.rows??[]:[],a=e.length>0||t.note!==``,s=p&&(e.length>0||ie(t)===1)?i.head:r.height,c=p&&!a?i.row:s,l=e.length>0?i.head+e.length*i.row+i.foot:c,_=Math.min(f[t.id]??r.width,r.width),b=Object.hasOwn(d,t.id)?d[t.id]:void 0,x=b?{x:Math.max(b.x,0),y:Math.max(b.y,0)}:{x:v,y};n[t.id]={...x,height:l},u.push({id:t.id,...x,width:_,height:l});let S={left:x.x,right:x.x+_,y:x.y+(p?i.row:c)/2};m.set(t.id,S);for(let[e,n]of(t.rows??[]).entries())m.set(n.id,p?{...S,y:x.y+i.head+e*i.row+i.row/2}:S);h=Math.max(h,x.x+r.width),g=Math.max(g,x.y+l),y+=l+o}y-=o})}),{nodes:n,headings:a,boxes:u,ports:m,right:h,bottom:g}},g=(e,t,n)=>{let{way:i,leaves:a}=e,o={x:i>0?t.right+u:t.left-u,y:t.y},s={x:i>0?n.left-u:n.right+u,y:n.y},c=i>0?Math.max(t.left+r.width,t.right)+u:o.x,l=i>0?s.x:Math.max(n.left+r.width,n.right)+u,d=a?l:c,f=a?-i:i;return{start:o,end:s,side:d,into:f,room:Math.abs(l-c),strip:`${String(d)}:${String(f)}`}},_=t=>{let n=new Map(oe(e,e=>t.get(e)?.left,r.width).map(e=>[e.link,e])),i=new Map;for(let e of n.values()){let n=t.get(e.link.from),r=t.get(e.link.to);if(!n||!r||n.y===r.y)continue;let{strip:a}=g(e,n,r),o=i.get(a)??new Map,s=e.leaves?e.link.to:e.link.from,c=o.get(e.hub)??{y:e.leaves?n.y:r.y,joins:[],beside:s};c.joins.push(e.leaves?r.y:n.y),i.set(a,o.set(e.hub,c))}let a=new Map,o=new Map;for(let[e,t]of i){let n=e=>e.reduce((e,t)=>e+t,0)/e.length,r=[...t.values()],i=n(r.flatMap(e=>e.joins))>=n(r.map(e=>e.y)),s=[];for(let[n,r]of[...t].sort(([,e],[,t])=>i?e.y-t.y:t.y-e.y)){let t=Math.min(r.y,...r.joins)-J,i=Math.max(r.y,...r.joins)+J,o=s.findIndex(e=>e.every(e=>i<e.low||t>e.high)),c=o<0?s.length:o;s[c]=[...s[c]??[],{low:t,high:i}],a.set(`${e}:${n}`,c)}let[c]=r;c&&o.set(e,{count:s.length,beside:c.beside,into:Number(e.split(`:`)[1])})}return{spans:n,rails:a,held:o}},v=e.columns.map((e,t)=>l+t*(r.width+a)),y=e.columns.map(()=>0);for(let{count:e,beside:t,into:n}of _(h(v).ports).held.values()){let r=m.get(t);if(r===void 0)continue;let i=n>0?r:r-1;i>=0&&i<y.length&&(y[i]=(y[i]??0)+e+1)}let b=[l];for(let[e,t]of y.entries())b.push((b[e]??l)+r.width+Math.max(a,t*Y));let x=h(b),{nodes:S,headings:C,boxes:T,ports:E}=x,{right:O,bottom:k}=x,{spans:A,rails:j}=_(E),M=a/2,N=Math.max(o/2,u),P=[],F=new Map,I=Math.max(a,...y.map(e=>e*Y)),L=q(e).flatMap(({link:e,from:t,to:n})=>{let i=E.get(e.from),o=E.get(e.to);if(!i||!o)return[];let s=T.filter(e=>e.id!==t&&e.id!==n);if(Math.abs(i.left-o.left)<r.width){let r=i.right+u,a=o.right+u,c=s.filter(e=>e.y<Math.max(i.y,o.y)&&e.y+e.height>Math.min(i.y,o.y)&&e.x<Math.max(r,a)+M&&e.x+e.width>Math.min(i.left,o.left)),l=Math.max(r,a,...c.map(e=>e.x+e.width))+M;return O=Math.max(O,l),[{link:e,from:t,to:n,d:D({x:r,y:i.y},{x:a,y:o.y},l).d}]}let c=A.get(e);if(!c)return[];let{way:l,leaves:d,hub:f}=c,{start:p,end:m,side:h,into:_,room:v,strip:y}=g(c,i,o),b=h+_*Math.min((1+(j.get(`${y}:${f}`)??0))*Y,Math.max(v-Y,0)),x=v<32?D(p,m):w(p,m,b,J),S=(e,t)=>t>e.y-N&&t<e.y+e.height+N,C=Math.abs(m.x-p.x)<I+a?[]:s.filter(e=>Array.from({length:23},(e,t)=>x.at((t+1)/ae)).some(t=>t.x>e.x&&t.x<e.x+e.width&&S(e,t.y)));if(C.length===0)return[{link:e,from:t,to:n,d:x.d}];let[L,R]=[Math.min(p.x,m.x),Math.max(p.x,m.x)],z=e=>{let t=[...C];for(;;){let n=e<0?Math.min(...t.map(e=>e.y))-N:Math.max(...t.map(e=>e.y+e.height))+N,r=[...s,...P].filter(e=>!t.includes(e)&&e.x<R&&e.x+e.width>L&&S(e,n));if(r.length===0)return n;t.push(...r)}},B=e=>Math.abs(i.y-e)+Math.abs(o.y-e),V=`${f}:${y}`,H=F.get(V)??(()=>{let[e,t]=[z(-1),z(1)],n=e>=0&&B(e)<=B(t)?e:t;return P.push({id:``,x:L,y:n-J+N,width:R-L,height:2*(J-N)}),F.set(V,n),n})();k=Math.max(k,H);let U=d?p.x+l*Y:b,W=d?b:m.x-l*Y,G={x:(U+W)/2,y:H};return[{link:e,from:t,to:n,d:w(p,G,U,J).d+w(G,m,W,J).d.replace(/^M \S+ \S+/,``)}]});return{width:Math.max((b[Math.max(e.columns.length-1,0)]??l)+r.width,O)+l,height:Math.max(k,l)+l,nodes:S,headings:C,lines:L}}var X=e(n(),1),ce={tokens:{},detail:{},expanded:!1},Z=e=>e===void 0?`${k}.map`:`${k}.map.project:${e}`;function le(e){if(!T(e))return{};let t={};for(let[n,r]of Object.entries(e))T(r)&&typeof r.x==`number`&&typeof r.y==`number`&&(t[n]={x:r.x,y:r.y});return t}function ue(e){try{let t=JSON.parse(O()?.getItem(Z(e))??`null`);return T(t)?{tokens:le(t.tokens),detail:le(t.detail),expanded:t.expanded===!0,...typeof t.family==`string`?{family:t.family}:{}}:ce}catch{return ce}}function de(e,t){let{tokens:n,detail:r,expanded:i,family:a}=t,o=Object.keys(n).length===0&&Object.keys(r).length===0&&!i&&a===void 0;try{o?O()?.removeItem(Z(e)):O()?.setItem(Z(e),JSON.stringify(t))}catch{}}function fe(e){for(let t=e.parentElement;t;t=t.parentElement){let{overflowX:e,overflowY:n}=getComputedStyle(t);if(/auto|scroll/.test(`${e} ${n}`))return t}}function pe(e,t){let n=e.getBoundingClientRect(),r=t.getBoundingClientRect();return{left:n.left-r.left+t.scrollLeft,top:n.top-r.top+t.scrollTop}}function me(e,t){let n=0,r=120,i=()=>{--r;let a=fe(e);if(a&&a.scrollWidth>a.clientWidth){let{left:e,top:n}=t(a);if(a.scrollTo({left:e,top:n,behavior:`instant`}),Math.abs(a.scrollLeft-e)<1&&Math.abs(a.scrollTop-n)<1)return}r>0&&(n=requestAnimationFrame(i))};return i(),()=>{cancelAnimationFrame(n)}}var he=e=>e.button===0&&e.pointerType!==`touch`;function ge(e,t,n){let{pointerId:r,clientX:i,clientY:a}=e,o=e=>{e.pointerId===r&&t(e.clientX-i,e.clientY-a)},s=e=>{e.pointerId===r&&(globalThis.removeEventListener(`pointermove`,o),globalThis.removeEventListener(`pointerup`,s),globalThis.removeEventListener(`pointercancel`,s),n(e.type===`pointerup`))};globalThis.addEventListener(`pointermove`,o),globalThis.addEventListener(`pointerup`,s),globalThis.addEventListener(`pointercancel`,s)}function _e(e){let[t,n]=(0,X.useState)(!1);return{panning:t,pan:t=>{if(!he(t)||t.target.closest(e))return;let r=fe(t.currentTarget);if(!r)return;let{scrollLeft:i,scrollTop:a}=r;n(!0),ge(t,(e,t)=>{r.scrollTo({left:i-e,top:a-t,behavior:`instant`})},()=>{n(!1)})}}}var Q=t(),ve={node:{width:240,height:24},card:{head:60,row:28,foot:4},columnGap:96,rowGap:6,heading:24,groupGap:16,padding:24,lineGap:8},ye={...ve,node:{width:240,height:84}},be=28;function xe(e){return e.length>be?`${e.slice(0,27)}…`:e}function Se({kind:e,type:t,note:n}){return(e===`agent`?C(t):void 0)||(e===`tool`?I(t??``):e===`model`&&t===`typesafe`?N:e===`model`?P(n)??F.modelBinding:e===`provider`?S:e===`shared`&&t&&Object.hasOwn(F,t)?F[t]:e===`agent`?E.text:R)}function Ce(e){return Object.hasOwn(F,e)?F[e]:R}function $(e,t){return e.kind===`agent`?t===e.id||t.startsWith(`${e.id}/`):e.kind===`model`?e.holds?.includes(t)??!1:e.kind===`tool`&&t===e.id}var we=4,Te=24,Ee={ArrowLeft:{x:-1,y:0},ArrowRight:{x:1,y:0},ArrowUp:{x:0,y:-1},ArrowDown:{x:0,y:1}};function De(e){let t=A()?.name,[n,r]=(0,X.useState)(()=>ue(t)),i=e=>{r(e),de(t,e)},{expanded:a}=n,o=e.columns.flat().some(e=>e.nodes.some(e=>e.id===n.family))?n.family:void 0,s=(0,X.useMemo)(()=>o===void 0?e:te(e,o),[e,o]),[c,l]=(0,X.useState)({}),u=a?`detail`:`tokens`;return{expanded:a,family:o,map:s,moved:o===void 0?n[u]:c,put(e,t){o===void 0?t?i({...n,[u]:e}):r({...n,[u]:e}):l(e)},showFamily(e){l({});let{tokens:t,detail:r}=n;i({tokens:t,detail:r,expanded:a,...e===void 0?{}:{family:e}})},expand(){i({...n,expanded:!a})}}}function Oe(e,t,n){let r=(0,X.useRef)(!1),[i,a]=(0,X.useState)();return{dragging:i,draggable:i=>({onPointerDown:o=>{r.current=!1;let s=e.nodes[i];if(!s||!he(o))return;let c;ge(o,(e,r)=>{!c&&Math.hypot(e,r)<we||(c||a(i),c={...t,[i]:{x:Math.max(s.x+e,0),y:Math.max(s.y+r,0)}},n(c,!1))},e=>{c&&(r.current=e,globalThis.setTimeout(()=>{r.current=!1},0),a(void 0),n(c,!0))})},onClickCapture:e=>{r.current&&(r.current=!1,e.stopPropagation(),e.preventDefault())},onKeyDown:r=>{let a=r.altKey?Ee[r.key]:void 0,o=e.nodes[i];if(!a||!o)return;r.preventDefault();let s=Math.max(o.x+a.x*Te,0),c=Math.max(o.y+a.y*Te,0);n({...t,[i]:{x:s,y:c}},!0)}})}}function ke(e){let[t,n]=(0,X.useState)(),[r,i]=(0,X.useMemo)(()=>{let n=new Set,r=new Set;if(t===void 0)return[n,r];n.add(t);for(let{link:i,from:a,to:o}of e.lines)if([i.from,i.to,a,o].includes(t)){r.add(i);for(let e of[i.from,i.to,a,o])n.add(e)}return[n,r]},[e,t]);return{lit:t,on:r,onLines:i,lights:e=>({onPointerEnter:()=>{n(e)},onPointerLeave:()=>{n(void 0)},onFocus:()=>{n(e)},onBlur:()=>{n(void 0)}})}}function Ae(e,t,n){let r=(0,X.useRef)(n.place);r.current=n.place;let{sizes:i}=n;(0,X.useEffect)(()=>{let n=e.current;if(!n)return;let a=r.current,o=t===void 0?a:void 0;return me(n,e=>{let t=o!==void 0&&(o.x+i.node.width>e.clientWidth||o.y+o.height>e.clientHeight),{left:r,top:a}=pe(n,e);return{left:r+(t?o.x-i.padding:0),top:a+(t?o.y-i.padding-i.heading:0)}})},[e,t,i])}function je(e,t,n){let{family:r,expanded:i,isMoved:a,showFamily:o,expand:s,tidy:c}=n,l=[];e&&e.id!==r&&l.push({label:`Show only its family`,icon:V,onClick:()=>{o(e.id)}});let u=e?.opens;u!==void 0&&l.push({label:`Open`,icon:d,onClick:()=>{t(u)}}),e&&l.push({type:`divider`});let f={label:`Show everything`,icon:p,onClick:()=>{o(void 0)}};return[...l,...r===void 0?[]:[f],{label:i?`Collapse`:`Expand`,icon:i?B:z,onClick:s},{label:`Tidy`,icon:H,isDisabled:!a,onClick:c}]}function Me({actions:e,query:t,onQuery:n,onClose:s}){let{family:c,expanded:u,isMoved:d,showFamily:f,expand:h,tidy:g}=e;return(0,Q.jsxs)(`div`,{className:`studio-map-tools`,children:[(0,Q.jsx)(l,{label:`Search the map`,isLabelHidden:!0,size:`sm`,width:200,placeholder:`Search`,startIcon:m,hasClear:!0,value:t,onChange:n}),c!==void 0&&(0,Q.jsx)(a,{label:`Show everything`,variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(i,{icon:p,size:`sm`}),onClick:()=>{f(void 0)}}),d&&(0,Q.jsx)(a,{label:`Tidy`,variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(i,{icon:H,size:`sm`}),onClick:g}),(0,Q.jsx)(o,{label:u?`Collapse`:`Expand`,variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(i,{icon:u?B:z,size:`sm`}),tooltip:u?`Show each node as a token`:`Show sections and descriptions`,onClick:h}),(0,Q.jsx)(o,{label:`Close map`,variant:`ghost`,size:`sm`,icon:(0,Q.jsx)(i,{icon:r,size:`sm`}),tooltip:`Close the map`,onClick:s})]})}function Ne({node:e,on:t,isFound:n,isDragging:r}){let i=t.has(e.id)||(e.rows??[]).some(e=>t.has(e.id));return{"data-map-node":e.id,"data-on":i?``:void 0,"data-found":n?``:void 0,"data-dragging":r?``:void 0}}function Pe(e){let{node:t,place:n,joins:r,selected:i,onOpen:a,lights:o,drag:s}=e,{opens:c}=t,l=$(t,i);return(0,Q.jsx)(M,{id:t.id,label:xe(t.long??t.label),icon:Se(t),x:n.x,y:n.y+n.height/2,color:l?`blue`:void 0,description:[t.note,r].filter(Boolean).join(`. `)||void 0,onOpen:c===void 0?void 0:()=>{a(c)},title:(t.long??t.label).length>be?t.long??t.label:void 0,"aria-current":l?`true`:void 0,...Ne(e),...o(t.id),...s})}function Fe(e){let{node:t,place:n,joins:r,selected:a,on:o,onOpen:c,lights:l,drag:u}=e,{opens:d}=t,f=t.rows??[],p={left:n.x,top:n.y,height:n.height},m=(0,Q.jsxs)(Q.Fragment,{children:[(0,Q.jsxs)(`span`,{className:`studio-map-name`,children:[(0,Q.jsx)(i,{icon:Se(t),size:`sm`}),(0,Q.jsx)(s,{type:`supporting`,color:`inherit`,weight:`medium`,maxLines:1,hasTruncateTooltip:!1,children:t.label})]}),t.note&&(0,Q.jsx)(s,{type:`supporting`,maxLines:f.length>0?1:ie(t),hasTruncateTooltip:!1,className:`studio-map-note`,children:t.note})]}),h={type:`button`,title:t.note||void 0,"aria-description":r||void 0,disabled:d===void 0,onClick:()=>{d!==void 0&&c(d)},...l(t.id)};return f.length===0?(0,Q.jsx)(`button`,{...h,...u,...Ne(e),className:`studio-map-node`,"data-map-token":t.id,style:p,"aria-current":$(t,a)?`true`:void 0,children:m}):(0,Q.jsxs)(`div`,{className:`studio-map-card`,"data-map-token":t.id,style:p,"data-open":$(t,a)?``:void 0,...Ne(e),...u,children:[(0,Q.jsx)(`button`,{...h,className:`studio-map-head`,"aria-current":a===t.id?`true`:void 0,children:m}),f.map(e=>(0,Q.jsxs)(`button`,{type:`button`,className:`studio-map-row`,"aria-current":a===e.id?`true`:void 0,"data-on":o.has(e.id)?``:void 0,onClick:()=>{c(e.opens)},...l(e.id),children:[(0,Q.jsx)(i,{icon:Ce(e.type),size:`sm`}),(0,Q.jsx)(s,{type:`supporting`,color:`inherit`,weight:`medium`,maxLines:1,hasTruncateTooltip:!1,children:e.label}),e.note&&(0,Q.jsx)(s,{type:`supporting`,maxLines:1,justify:`end`,hasTruncateTooltip:!1,className:`studio-map-row-note`,children:e.note})]},e.id))]})}function Ie({workspace:e,shared:t,selected:n,onOpen:r,onClose:a}){let{expanded:o,family:c,map:l,moved:d,put:p,showFamily:h,expand:g}=De((0,X.useMemo)(()=>G(e,t),[e,t])),[_,v]=(0,X.useState)(``),y=(0,X.useMemo)(()=>ee(l,_),[l,_]),S=(0,X.useMemo)(()=>_.trim()===``?l:te(l,y),[l,_,y]),C=_.trim()!==``&&y.length===0,w=(0,X.useRef)(null),T=o?ye:ve,E=(0,X.useMemo)(()=>({map:S,expanded:o}),[S,o]),D=L(w,E),O=(0,X.useMemo)(()=>se(S,T,{moved:d,widths:D,detail:o}),[S,T,o,d,D]),k=S.columns.flat().flatMap(e=>e.nodes),A=k.find(e=>$(e,n))?.id;Ae(w,c,{place:A===void 0?void 0:O.nodes[A],sizes:T});let{dragging:j,draggable:M}=Oe(O,d,p),{panning:N,pan:P}=_e(`[data-map-node]`),{lit:F,on:I,onLines:R,lights:z}=ke(O),B={family:c,expanded:o,isMoved:k.some(e=>Object.hasOwn(d,e.id)),showFamily:h,expand:g,tidy:()=>{p({},!0)}},[V,H]=(0,X.useState)(),U=je(k.find(e=>e.id===V),r,B),W=o?Fe:Pe,K=k.find(e=>$(e,n))?.id,q=e=>R.has(e.link)?2:+(e.from===K||e.to===K),ne=[...O.lines].sort((e,t)=>q(e)-q(t));return(0,Q.jsxs)(`div`,{className:`studio-map-frame`,role:`none`,onKeyDown:e=>{e.key===`Escape`&&c!==void 0&&(e.target.closest(`[role="menu"]`)||(e.stopPropagation(),h(void 0)))},children:[(0,Q.jsx)(u,{className:`studio-map-scroll`,axis:`both`,role:`region`,label:`Map`,height:`100%`,overscroll:`allow`,children:(0,Q.jsx)(x,{items:U,label:`Map actions`,"data-map-field":``,children:(0,Q.jsxs)(`div`,{ref:w,className:`studio-map`,"data-lit":F===void 0||j!==void 0?void 0:``,"data-panning":N?``:void 0,onPointerDown:P,onContextMenuCapture:e=>{H(e.target.closest(`[data-map-node]`)?.dataset.mapNode)},style:{"--map-width":`${String(O.width)}px`,"--map-height":`${String(O.height)}px`,"--map-slot":`${String(T.node.width)}px`,"--map-line":`${String(T.card.row)}px`},children:[(0,Q.jsx)(`svg`,{className:`studio-map-lines`,width:O.width,height:O.height,"aria-hidden":`true`,children:ne.map(({link:e,from:t,to:n,d:r})=>(0,Q.jsx)(`path`,{className:`map-line`,d:r,"data-kind":e.kind,"data-on":R.has(e)?``:void 0,"data-open":t===K||n===K?``:void 0},`${e.kind}:${e.from}:${e.to}`))}),O.headings.map(({label:e,x:t,y:n})=>(0,Q.jsx)(`div`,{className:`studio-map-heading`,style:{left:t,top:n},children:(0,Q.jsx)(s,{type:`supporting`,color:`secondary`,weight:`semibold`,children:e})},e)),k.map(e=>{let t=O.nodes[e.id];return t&&(0,Q.jsx)(W,{node:e,place:t,joins:re(S,e.id),selected:n,on:I,isFound:y.includes(e.id),isDragging:j===e.id,onOpen:r,lights:z,drag:M(e.id)},e.id)})]})})}),C&&(0,Q.jsx)(f,{className:`studio-map-nothing`,children:(0,Q.jsx)(b,{headingLevel:2,icon:(0,Q.jsx)(i,{icon:m,size:`lg`}),title:`Nothing matches`})}),(0,Q.jsx)(Me,{actions:B,query:_,onQuery:v,onClose:a})]})}export{Ie as StudioMap};
@@ -0,0 +1,2 @@
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,u as n}from"./themeProps-3IqahpCr.js";import{n as r,t as i}from"./SegmentedControlItem-BLuJOusN.js";import{t as a}from"./VStack-CkVMcNiK.js";import{n as o,t as s}from"./StackItem-CQviqAfM.js";import{a as c,j as l,o as u,v as d,y as f}from"./browser-transport-DxpDmXGb.js";import{g as p}from"./fieldParts-Cs6Amprh.js";import{t as m}from"./Icon-ZfFwTt8n.js";import{r as h,t as g}from"./IconButton-CG5klqF1.js";import{t as _}from"./Text-BsiAsowd.js";import{t as v}from"./Banner-B1Vat7i_.js";import{c as y}from"./host-patterns-C9RMP16Q.js";import{n as b}from"./trace-record-BjsBbPRl.js";import{n as x}from"./trace-schema-9CdEyG6Q.js";import{_ as S}from"./turn-client-BZUECwPn.js";import{r as C}from"./PaneState-C8jetBGI.js";import{t as w}from"./Section-DJ97F7QE.js";import{$ as T,Mt as ee,Rt as E,_ as D,n as O,o as k,s as A,v as te,y as j}from"./index-C3mDKoGG.js";var M=e=>typeof e==`object`&&!!e&&!Array.isArray(e),N=(e,t)=>e.attributes[t],P=(e,t)=>{let n=N(e,t);return typeof n==`string`?n:void 0};function F(e,t,n){let r=N(t,n);return r===void 0?void 0:b(e,r)}function I(e,t,n){let r=F(e,t,n);return r===void 0?``:typeof r==`string`?r:JSON.stringify(r)}function L(e,t,n){let r=F(e,t,n);return Array.isArray(r)?r.filter(M):[]}var R=e=>Array.isArray(e.parts)?e.parts.filter(M):[],z=e=>BigInt(String(e.startTimeUnixNano)),B=(e,t)=>{let n=z(e)-z(t);return n===0n?0:n<0n?-1:1},ne=e=>`content_sha256`in e||`json_sha256`in e;function V(e){let t=e.arguments;if(M(t))return t;if(typeof t!=`string`)return{};try{let e=JSON.parse(t);return M(e)?e:{}}catch{return{}}}function H(e){if(typeof e.content==`string`){if(e.type===`reasoning`)return{type:`thought`,text:e.content};if(e.type===`text`)return{type:`text`,text:e.content}}}function re(e){let t=[],n=[],r=!1;for(let i of e){let e=R(i),a=e.some(e=>e.type===`text`);for(let i of e){let e=H(i);ne(i)?r=!0:e?t.push(e):i.type===`structured`&&!a?t.push({type:`text`,text:JSON.stringify(i.content)}):i.type===`tool_call`&&typeof i.name==`string`?(n.push(i.name),t.push({type:`tool`,tool:{name:i.name,callId:typeof i.id==`string`?i.id:`replay-${String(n.length)}`,arguments:V(i)}})):(i.type===`blob`||i.type===`uri`)&&(r=!0)}}return{events:t,calls:n,missing:r}}function ie(e,t){for(let n=e;n;n=t.get(n.parentSpanId??``)){let e=P(n,`gen_ai.agent.name`);if(P(n,`gen_ai.operation.name`)===`invoke_agent`&&e)return e}return``}var U=e=>P(e,`gen_ai.operation.name`);function ae(e){let t=new Map(e.spans.map(e=>[e.spanId,e]));return e.spans.filter(e=>U(e)===`chat`).toSorted(B).map(n=>{let r=re(L(e,n,`gen_ai.output.messages`)),i=P(n,`theorem.stop.kind`)??`completed`;return{agent:ie(n,t),...r,events:[...r.events,{type:`done`,stop:{kind:i}}]}})}function oe(e){return e.spans.filter(e=>U(e)===`execute_tool`).toSorted(B).map(t=>({name:P(t,`gen_ai.tool.name`)??``,result:I(e,t,`gen_ai.tool.call.result`),failed:P(t,`theorem.tool.outcome`)===`error`}))}function W(e,t){let n=L(e,t,`gen_ai.input.messages`).findLast(e=>e.role===`user`),r=n?R(n):[];return{text:r.flatMap(e=>e.type===`text`&&typeof e.content==`string`?[e.content]:[]).join(`
2
+ `),attachments:r.filter(e=>e.type===`blob`||e.type===`uri`).length}}function G(e,t){let n=e.spans.filter(e=>U(e)===`execute_tool`).toSorted(B),r=new Set,i=(e,t)=>{let i=n.find(t=>P(t,`gen_ai.tool.call.id`)===e)??n.find(e=>!r.has(e)&&P(e,`gen_ai.tool.name`)===t);return i&&r.add(i),i},a=[];for(let n of L(e,t,`gen_ai.output.messages`))for(let t of R(n)){let n=H(t);if(n)a.push(n);else if(t.type===`tool_call`&&typeof t.name==`string`){let n=typeof t.id==`string`?t.id:`call-${String(a.length)}`;a.push(...K(e,t.name,n,V(t),i))}}let o=I(e,t,`theorem.error.public`);t.status.code===`ERROR`&&a.push({type:`error`,errorKind:`internal`,error:o||t.status.message});let s=P(t,`theorem.stop.kind`)??`completed`;return a.push({type:`done`,stop:{kind:s}}),a}function K(e,t,n,r,i){let a=i(n,t),o={type:`tool`,tool:{name:t,callId:n,arguments:r}};if(!a)return[o];let s=Number(z(a)/1000000n),c=I(e,a,`gen_ai.tool.call.result`);return[o,{type:`tool`,tool:{name:t,callId:n,at:s,...P(a,`theorem.tool.outcome`)===`error`?{phase:`error`,failure:{code:P(a,`theorem.tool.failure.code`)??`failed`,kind:`internal`,message:c}}:{phase:`complete`,output:q(c)}}}]}function q(e){try{return JSON.parse(e)}catch{return e}}var se=e=>e.spans.find(e=>!e.parentSpanId);function ce(e){let t=``,n,r=[];return e.forEach((e,i)=>{let a=se(e);if(!a||U(a)!==`invoke_agent`)return;let o=P(a,`gen_ai.agent.name`)??``;t||=o;let s=ae(e),c=oe(e),l=r.at(-1);if(o!==t&&l){l.calls.push(...s),l.results.push(...c);return}n??=Number(z(a)/1000000n);let u=W(e,a);r.push({...u,calls:s,results:c,blocks:S({text:u.text},G(e,a),{idPrefix:`recorded-${String(i)}`})})}),{agent:t,turns:r,...n===void 0?{}:{recordedAt:n}}}function le(e){if(e.failed)throw Error(e.result);let t=q(e.result);return M(t)?t:{result:t}}var ue=e=>{let t=e%100,n=t>=11&&t<=13?`th`:{1:`st`,2:`nd`,3:`rd`}[e%10]??`th`;return`${String(e)}${n}`};function de(e,t,n){if(!e)return`The profile asked the model a ${ue(t+1)} time this turn; the recording answered ${String(t)}.`;if(e.missing)return`The recording does not hold all of this reply.`;let r=new Set((n.wireTools??[]).map(e=>e.name)),i=e.calls.find(e=>!r.has(e));return i&&`The recording calls ${i}, which the profile no longer offers.`}function fe(e,t,n){let r=0,i=new Map,a=new Map,o=t=>{let n=a.get(t);if(!n){n=new Map;for(let r of e.turns[t]?.results??[])n.set(r.name,[...n.get(r.name)??[],r]);a.set(t,n)}return n},s=t=>({async*complete(a){let o=e.turns[r]?.calls.filter(e=>e.agent===t)??[],s=`${String(r)} ${t}`,c=i.get(s)??0;i.set(s,c+1);let l=de(o[c],o.length,a);if(l)throw n({turn:r,call:c+1,reason:l}),new y(`request`,`Replay stopped: ${l}`);yield*o[c]?.events??[]}}),c=e=>()=>{let t=o(r).get(e)?.shift();if(!t)throw Error(`The recording has no further result for ${e}.`);return le(t)},l=new Set(e.turns.flatMap(e=>e.results.map(e=>e.name)));return{provider:n=>s(n.id===t?e.agent:n.id),toolHandlers:Object.fromEntries([...l].map(e=>[e,c(e)])),startTurn:e=>{r=e}}}function J(e){return e.map(e=>{if(e.type===`agent`)return e;let{name:t,description:n,category:r,access:i,permission:a,loadTier:o,paths:s}=e;return{type:`function`,name:t,description:n,category:r,access:i,permission:a,loadTier:o,paths:s,inputSchema:e.inputSchema,outputSchema:e.outputSchema,...e.labels?{labels:e.labels}:{}}})}function pe(e){return{...e,customTools:J(e.customTools),...e.dependencies?{dependencies:e.dependencies.map(e=>({...e,customTools:J(e.customTools)}))}:{}}}function Y(e){return e.turns.flatMap(e=>e.blocks)}function X(e){let t;try{t=JSON.parse(e)}catch{throw new y(`request`,`This file is not JSON.`)}let n=Array.isArray(t)?t:[t];return n.map((e,t)=>{let r=x.safeParse(e);if(r.success)return r.data;let i=n.length>1?` (record ${String(t+1)})`:``;throw new y(`request`,`This file is not a Theorem trace${i}.`)})}var Z=e(n(),1),Q=t();function me(e,t,n){return t?u(e,t,{conversationKey:A(),blocks:n}):d(e,n)}var $=e=>`turn ${String(e+1)}`;function he(e,t,n){let r=()=>Promise.reject(Error(`A recorded conversation cannot change. Replay it, then continue live.`));return{describe:()=>Promise.resolve(f(e)),turn:r,invoke:r,steer:r,rewind:r,conversation:()=>Promise.resolve({transcript:t}),traces:n}}function ge({onOpen:e}){let[t,n]=(0,Z.useState)(),[r,i]=(0,Z.useState)(!1);return(0,Q.jsx)(C,{icon:(0,Q.jsx)(m,{icon:E,size:`lg`,color:`secondary`}),title:`Open a trace`,description:`See how a conversation went, then replay it through this profile as it is now. A replay answers from the recording, so it needs no keys.`,children:(0,Q.jsxs)(a,{gap:2,children:[(0,Q.jsx)(j,{label:`Trace file`,isLabelHidden:!0,mode:`dropzone`,accept:`application/json,.json`,isLoading:r,placeholder:`Drop a trace (.json) or choose a file`,value:null,changeAction:async t=>{let r=Array.isArray(t)?t[0]:t;if(r){i(!0);try{e({name:r.name,records:X(await r.text())}),n(void 0)}catch(e){n(e instanceof Error?e.message:String(e))}finally{i(!1)}}},onChange:()=>void 0}),t?(0,Q.jsx)(v,{status:`error`,title:t}):null]})})}function _e({status:e,turns:t,onContinue:n,onLive:r}){let[i,o]=(0,Z.useState)(!1),[s,c]=(0,Z.useState)(),l=e=>(0,Q.jsx)(h,{label:`Continue live`,variant:`secondary`,size:`sm`,isLoading:i,onClick:async()=>{o(!0),c(void 0);try{await r(e)}catch(e){c(e instanceof Error?e.message:String(e)),o(!1)}}}),u=(()=>{switch(e.kind){case`running`:return(0,Q.jsx)(v,{status:`info`,title:`Replaying ${$(e.turn)} of ${String(t)}`});case`waiting`:return(0,Q.jsx)(v,{status:`info`,title:`${$(e.turn-1)} waits on you`,description:`Answer it in the conversation, then continue the replay.`,endContent:(0,Q.jsx)(h,{label:`Continue replay`,variant:`secondary`,size:`sm`,onClick:()=>{n(e.turn)}})});case`missing`:return(0,Q.jsx)(v,{status:`warning`,title:`Replay stopped before ${$(e.turn)}`,description:`It was sent with files, and a trace never holds a file's bytes. Continue live to send it again with yours.`,endContent:l(e.turn)});case`diverged`:{let{turn:t,call:n,reason:r}=e.divergence;return(0,Q.jsx)(v,{status:`warning`,title:`Replay stopped at ${$(t)}, model call ${String(n)}`,description:r,endContent:l(t)})}case`failed`:return(0,Q.jsx)(v,{status:`error`,title:`Replay stopped at ${$(e.turn)}`,description:e.message,endContent:l(e.turn)});case`done`:return(0,Q.jsx)(v,{status:`success`,title:`Replayed ${String(t)} ${t===1?`turn`:`turns`}`,description:`Every model call this profile made was one the recording answered.`})}})();return(0,Q.jsxs)(a,{gap:1,children:[u,s?(0,Q.jsx)(v,{status:`error`,title:s}):null]})}function ve({payload:e,script:t,liveTools:n,trace:r,runtime:i,onLive:o}){let u=(0,Z.useRef)(null),d=(0,Z.useRef)(void 0),[f,p]=(0,Z.useState)({kind:`running`,turn:0}),[m]=(0,Z.useState)(l),h=(0,Z.useMemo)(()=>fe(t,e.profile.id,e=>{d.current??=e}),[t,e.profile.id]),g=(0,Z.useMemo)(()=>n?e:pe(e),[n,e]),_=(0,Z.useMemo)(()=>n?T(e):void 0,[n,e]),v=(0,Z.useMemo)(()=>c(g,{mode:`byok`,provider:h.provider,...n?{}:{toolHandlers:h.toolHandlers}},{conversationKey:A(),traces:m}),[g,h,n,m]),[y,b]=(0,Z.useState)(0);return(0,Z.useEffect)(()=>{let e=new AbortController,{signal:n}=e;return(async()=>{for(let e=y;e<t.turns.length;e+=1){if(n.aborted)return;let{text:r,attachments:i}=t.turns[e];if(i>0)return p({kind:`missing`,turn:e});h.startTurn(e),p({kind:`running`,turn:e});try{let t=e===0?await O(u,r,n):await u.current?.send(r)??null;if(n.aborted)return;if(d.current)return p({kind:`diverged`,divergence:d.current});if(!t)return h.startTurn(e-1),p({kind:`waiting`,turn:e})}catch(t){let n=t instanceof Error?t.message:String(t);return p({kind:`failed`,turn:e,message:n})}}p({kind:`done`})})(),()=>{e.abort(),u.current?.stop()}},[y,h,t]),(0,Q.jsxs)(a,{height:`100%`,children:[(0,Q.jsx)(w,{variant:`transparent`,paddingInline:3,paddingBlock:2,children:(0,Q.jsx)(_e,{status:f,turns:t.turns.length,onContinue:b,onLive:async n=>{o({...await me(e,i,t.turns.slice(0,n).flatMap(e=>e.blocks)),text:t.turns[n]?.text??``})}})}),(0,Q.jsx)(s,{size:`fill`,children:(0,Q.jsx)(D,{detectCodeLanguage:!0,labels:k,transport:v,trace:r,composer:!1,chatRef:u,pageTools:_})})]})}var ye=e=>e.recordedAt===void 0?void 0:new Intl.DateTimeFormat(void 0,{dateStyle:`medium`,timeStyle:`short`}).format(e.recordedAt);function be({payload:e,opened:t,trace:n,runtime:c,onClose:u,onLive:d}){let f=(0,Z.useMemo)(()=>ce(t.records),[t.records]),[y,b]=(0,Z.useState)(`recorded`),[x,S]=(0,Z.useState)(0),[C,T]=(0,Z.useState)(!1),E=(0,Z.useMemo)(()=>{let n=l();for(let e of t.records)n.push(e);return he(e,Y(f),n)},[e,t.records,f]),O=f.turns.length,A=[f.agent||`No agent`,`${String(O)} ${O===1?`turn`:`turns`}`,ye(f)].filter(Boolean),j=()=>{S(e=>e+1),b(`replayed`)};return(0,Q.jsxs)(a,{height:`100%`,children:[(0,Q.jsx)(w,{variant:`transparent`,paddingInline:3,paddingBlock:2,children:(0,Q.jsxs)(a,{gap:2,children:[(0,Q.jsxs)(o,{gap:2,vAlign:`center`,children:[(0,Q.jsx)(s,{size:`fill`,children:(0,Q.jsxs)(a,{gap:0,children:[(0,Q.jsx)(_,{type:`label`,maxLines:1,children:t.name}),(0,Q.jsx)(_,{type:`supporting`,color:`secondary`,maxLines:1,children:A.join(` · `)})]})}),x>0?(0,Q.jsxs)(r,{label:`Show`,size:`sm`,value:y,onChange:e=>{b(e===`replayed`?`replayed`:`recorded`)},children:[(0,Q.jsx)(i,{value:`recorded`,label:`Recorded`}),(0,Q.jsx)(i,{value:`replayed`,label:`Replayed`})]}):null,(0,Q.jsx)(te,{label:`Live tools`,size:`sm`,value:C,onChange:e=>{T(e),x>0&&j()}}),(0,Q.jsx)(h,{label:x>0?`Replay again`:`Replay`,variant:`primary`,size:`sm`,icon:(0,Q.jsx)(m,{icon:ee,size:`sm`}),isDisabled:O===0,onClick:j}),(0,Q.jsx)(g,{label:`Close trace`,variant:`ghost`,tooltip:`Close trace`,icon:(0,Q.jsx)(m,{icon:p,size:`sm`}),onClick:u})]}),f.agent&&f.agent!==e.profile.id?(0,Q.jsx)(v,{status:`info`,title:`Recorded with ${f.agent}; a replay runs through ${e.profile.id}.`}):null,O===0?(0,Q.jsx)(v,{status:`info`,title:`This trace holds no conversation to replay.`}):null]})}),(0,Q.jsx)(s,{size:`fill`,children:y===`replayed`&&x>0?(0,Q.jsx)(ve,{payload:e,script:f,liveTools:C,trace:n,runtime:c,onLive:d},x):(0,Q.jsx)(D,{detectCodeLanguage:!0,labels:k,transport:E,trace:n,composer:!1,conversation:`recorded`,conversationView:{transcript:Y(f)}},t.name)})]})}function xe({payload:e,trace:t,runtime:n,onClose:r,onLive:i}){let[a,o]=(0,Z.useState)();return a?(0,Q.jsx)(be,{payload:e,opened:a,trace:t,runtime:n,onClose:r,onLive:i}):(0,Q.jsx)(ge,{onOpen:o})}export{xe as TraceReplay};
@@ -0,0 +1,2 @@
1
+ import{Lt as e,Mn as t}from"./tool-schema-CgpwKFX7.js";import{c as n}from"./host-patterns-C9RMP16Q.js";import{A as r,Mn as i,en as a}from"./shaped-data-0GUF7Al3.js";import{F as o,bt as s}from"./reader-paEmSrWc.js";import{r as c}from"./encode-files-DZ4tVtEQ.js";function l(e,t){let r=typeof t==`string`?t.trim():``;if(!r)throw new n(`request`,`A typed credential must be a non-empty string`);if(e===`bearer`)return{type:`bearer`,token:r};if(e===`api_key`)return{type:`api_key`,key:r};throw new n(`request`,`A '${e}' sign-in takes no typed credential; the host's callback saves it`)}function ee(e,t){if(!e)throw new n(`request`,`a typed credential answers only a sign-in gate`);return{slot:e.slot,credential:l(e.authType,t)}}var u=18e5;function te(e,t){let r=t??u;if(!Number.isFinite(r)||r<=0)throw new n(`config`,`${e} gateTtlMs must be a positive number of milliseconds; got ${r}.`);return r}function ne(e,t,n){return t-e>=n}var d=[`approve`,`deny`,`abandon`];function f(e,t=!1){return e.decision===`approve`?{granted:!0,...e.edited?{edited:e.edited}:{},...t?{signIn:t}:{}}:{granted:!1,cause:e.decision===`deny`?`declined`:`abandoned`,...t?{signIn:t}:{}}}function p(e,t,n){return n!==`session_consent`||e.includes(t)?[...e]:[...e,t]}function re(e,t,r){let{callId:i,decision:a,input:o,secret:s,page:c}=e;if((o!==void 0||s!==void 0||c!==void 0)&&a!==`approve`)throw new n(`request`,`only an approval takes edited input, a secret, or a page answer (call ${i})`);if(a!==`approve`)return{resume:f({decision:a},t.auth!==void 0),input:t.arguments,sessionPermissions:[...r]};let l=s===void 0?void 0:ee(t.auth,s);return{resume:{...f(o===void 0?{decision:a}:{decision:a,edited:{from:t.arguments}},t.auth!==void 0),...t.gateKind?{gateKind:t.gateKind}:{}},input:o??t.arguments,sessionPermissions:p(r,t.name,t.permission),...l?{typed:l}:{},...c?{page:c}:{}}}var m={'"':`"`,"\\":`\\`,"/":`/`,b:`\b`,f:`\f`,n:`
2
+ `,r:`\r`,t:` `};function h(e,t){let n=``,r=t+1;for(;r<e.length;){let t=e.charAt(r);if(t===`"`)return{text:n,end:r+1};if(t!==`\\`){n+=t,r++;continue}if(r+1>=e.length)break;let i=e.charAt(r+1);if(i===`u`){let t=e.slice(r+2,r+6);if(t.length<4)break;if(/^[0-9a-fA-F]{4}$/.test(t)){n+=String.fromCharCode(Number.parseInt(t,16)),r+=6;continue}}n+=m[i]??i,r+=2}return{text:n}}function g(e,t){let n=t;for(;/\s/.test(e.charAt(n));)n++;return n}function ie(e,t){if(e.charAt(t)===`"`){let n=h(e,t);return n.end===void 0?void 0:_(e,t,n.end)}let n=0;for(let r=t;r<e.length;r++){let i=e.charAt(r);if(i===`"`){let t=h(e,r).end;if(t===void 0)return;r=t-1}else if(i===`{`||i===`[`)n++;else if(i===`}`||i===`]`){if(n===0)return _(e,t,r);if(n--,n===0)return _(e,t,r+1)}else if(i===`,`&&n===0)return _(e,t,r)}}function _(e,t,n){try{return{value:JSON.parse(e.slice(t,n)),end:n}}catch{return}}function v(e){let t={},n=g(e,0);if(e.charAt(n)!==`{`)return t;for(n++;;){if(n=g(e,n),e.charAt(n)===`,`&&(n=g(e,n+1)),e.charAt(n)!==`"`)return t;let r=h(e,n);if(r.end===void 0||(n=g(e,r.end),e.charAt(n)!==`:`)||(n=g(e,n+1),n>=e.length))return t;let i=ie(e,n);if(!i)return e.charAt(n)===`"`&&(t[r.text]=h(e,n).text),t;t[r.text]=i.value,n=i.end}}function y(e,t){if(t.phase===void 0)return{name:t.name,callId:t.callId,...t.operationId?{operationId:t.operationId}:{},arguments:t.arguments,...t.reasoning?{reasoning:t.reasoning}:{},...t.stepId?{stepId:t.stepId}:{},artifacts:[]};if(e===void 0)throw new n(`bad_response`,`Tool event '${t.phase}' for call '${t.callId}' arrived before the call.`);if(e.callId!==t.callId||e.name!==t.name)throw new n(`bad_response`,i(`error.bad_response`));switch(t.phase){case`running`:{let{endedAt:n,outputDraft:r,...i}=e;return{...i,state:t,startedAt:t.at,...t.edited?{edited:t.edited}:{},...t.activity?{activity:t.activity}:{}}}case`complete`:return{...b(e),state:t,endedAt:t.at,...t.activityPast?{activityPast:t.activityPast}:{}};case`error`:return{...b(e),state:t,endedAt:t.at,...t.activityPast?{activityPast:t.activityPast}:{}};case`cancel`:case`gate`:return{...b(e),state:t,endedAt:t.at};case`draft`:return{...e,outputDraft:(e.outputDraft??``)+t.text};case`artifact`:return{...e,artifacts:[...e.artifacts,t.artifact]};case`dispatch`:case`progress`:case`trace`:case`warning`:return e}}function b(e){let{outputDraft:t,...n}=e;return n}function x(e,t){return{arguments:{},artifacts:[],...e,name:t.name,callId:t.callId,draft:(e?.draft??``)+t.text}}function ae(e){let t=new Map;for(let n of e){if(n.type===`tool_draft`){t.set(n.callId,x(t.get(n.callId),n));continue}if(n.type!==`tool`)continue;let{tool:e}=n,r=e.operationId??e.callId;e.phase===void 0&&t.get(e.callId)?.draft!==void 0&&t.delete(e.callId),t.set(r,y(t.get(r),e))}return[...t.values()]}function S(e){return(e.state?.phase===`gate`?e.state.gate.preparedArguments:void 0)??e.edited?.to??e.arguments}function C(e,t){return e.type!==`tool`||e.tool.callId!==t?!1:e.tool.phase===`complete`||e.tool.phase===`error`}var w={avif:`image/avif`,gif:`image/gif`,heic:`image/heic`,heif:`image/heif`,jpeg:`image/jpeg`,jpg:`image/jpeg`,png:`image/png`,svg:`image/svg+xml`,webp:`image/webp`,mp4:`video/mp4`,webm:`video/webm`,mov:`video/quicktime`,ogv:`video/ogg`,mp3:`audio/mpeg`,m4a:`audio/mp4`,ogg:`audio/ogg`,wav:`audio/wav`};function oe(e){let t=e.split(`/`).pop()??e,n=t.lastIndexOf(`.`);return n<=0||n===t.length-1?void 0:w[t.slice(n+1).toLowerCase()]}function se(e){let t=e.trim();if(t.length===0)return;let n;try{n=new URL(t)}catch{return}if(n.protocol!==`http:`&&n.protocol!==`https:`)return;let r=oe(n.pathname);if(r)return{url:n.href,mimeType:r}}var ce=/^(.*)\/thumb(\/.+\/([^/]+))\/(\d+)px-\3(?:\.[a-z0-9]+)?$/i;function le(e){let t=new URL(e),n=t.hostname.split(`.`).slice(-2).join(`.`);for(let e of[...t.searchParams.keys()])e.startsWith(`utm_`)&&t.searchParams.delete(e);let r=ce.exec(t.pathname);return{key:`${n}${r?`${r[1]}${r[2]}`:t.pathname}${t.search}`,width:r?Number(r[4]):1/0}}function ue(e){let t=new Map,n=[],r=e=>{if(typeof e==`string`){let r=se(e);if(!r)return;let i=le(r.url),a=t.get(i.key);if(!a){t.set(i.key,{index:n.length,largest:i.width,smallest:i.width}),n.push(r);return}let o=n[a.index];i.width>a.largest?(a.largest=i.width,n[a.index]={...o,url:r.url,previewUrl:o.previewUrl??o.url}):i.width<a.smallest&&(a.smallest=i.width,n[a.index]={...o,previewUrl:r.url})}else if(Array.isArray(e))for(let t of e)r(t);else if(typeof e==`object`&&e)for(let t of Object.values(e))r(t)};return r(e),n}var T=0;function E(e){return e===`user`?`user-${globalThis.crypto.randomUUID()}`:(T+=1,`${e}-${String(T)}`)}function de(e,t){return e?.kind===t}function D(e,t,n,r){let i=e.at(-1);de(i,t)?i.text+=n:e.push({id:E(r),kind:t,text:n})}function O(e,t){let n=e.at(-1),r=n?.kind===`text`||n?.kind===`thought`;e.splice(r?e.length-1:e.length,0,t)}function k(e,t){return e.find(e=>e.kind===`tool`&&e.id===t)}function A(e,t){let n=`tool-${t.operationId??t.callId}`,r=k(e,n),i=y(r?.tool,t);if(r){r.tool=i;return}let a=t.phase===void 0?k(e,`tool-${t.callId}`):void 0;a?.tool.draft===void 0?e.push({id:n,kind:`tool`,tool:i}):(a.id=n,a.tool=i)}function j(e,t){let n=`tool-${t.callId}`,r=k(e,n),i=x(r?.tool,t);r?r.tool=i:e.push({id:n,kind:`tool`,tool:i})}function M(e){return e.findLast(e=>e.kind===`structured`&&e.draft!==void 0)}function N(e,t,n){let r=M(e),i=(r?.draft??``)+t;r?(r.draft=i,r.value=v(i)):e.push({id:E(n),kind:`structured`,value:v(i),draft:i})}function P(e,t,n){let r=M(e);r?(r.value=t,delete r.draft):e.push({id:E(n),kind:`structured`,value:t})}function F(e,t){return e.type===t.type?e.placeId&&t.placeId?e.placeId===t.placeId:e.uri===t.uri:!1}function I(e,t,n){let r=e.find(e=>e.kind===`citation`&&e.callId===t.callId),i=r?[...r.sources]:[];for(let e of t.sources)i.some(t=>F(t,e))||i.push(e);r?r.sources=i:e.push({id:E(n),kind:`citation`,sources:i,...t.callId===void 0?{}:{callId:t.callId}})}function L(e,t,n,r){if(t.phase===`complete`&&t.output!==void 0)for(let i of ue(t.output))r.has(i.url)||(r.add(i.url),e.push({id:E(n),kind:`media`,mimeType:i.mimeType,url:i.url,...i.previewUrl?{previewUrl:i.previewUrl}:{}}))}function R(e,t=`user`){let n=[],r=e.text?.trim();r&&n.push({id:E(t),kind:`user-text`,text:r});for(let r of e.attachments??[])n.push({id:E(t),kind:`user-attachment`,name:r.name,mimeType:r.mimeType,sizeBytes:r.sizeBytes,...r.data===void 0?{}:{data:r.data}});for(let r of e.voice??[])n.push({id:E(t),kind:`user-voice`,name:r.name,mimeType:r.mimeType,sizeBytes:r.sizeBytes,...r.data===void 0?{}:{data:r.data}});return n}function z(e,n={}){let r=n.idPrefix??`turn`,i=n.showThoughts??!0;T=0;let a=[],o=new Set;for(let n of t(e))switch(n.type){case`thought`:i&&n.text&&D(a,`thought`,n.text,r);break;case`text`:n.text&&D(a,`text`,n.text,r);break;case`tool_draft`:j(a,n);break;case`tool`:A(a,n.tool),L(a,n.tool,r,o);break;case`structured_draft`:N(a,n.text,r);break;case`structured`:P(a,n.structured,r);break;case`media`:n.media&&a.push({id:E(r),kind:`media`,mimeType:n.media.mimeType,data:n.media.data});break;case`grounding`:a.push({id:E(r),kind:`grounding`,grounding:n.grounding});break;case`citation`:I(a,n,r);break;case`evidence`:a.push({id:E(r),kind:`evidence`,evidence:n.evidence});break;case`guardrail`:O(a,{id:E(r),kind:`guardrail`,guardrail:n.guardrail});break;case`error`:n.error&&a.push({id:E(r),kind:`error`,message:n.error});break;case`done`:a.push({id:E(r),kind:`turn-done`,stop:n.stop,tokens:n.tokens,interactionId:n.interactionId,compaction:n.compaction!==void 0})}return a}function B(e,t,n={}){return[...R(e,`user`),...z(t,n)]}function V(e){if(!e)return a;let{detect:t,patterns:n}=e;if(!n)return t;let r=Object.fromEntries(Object.entries(n).map(([e,{theorem:t}])=>[e,{theorem:t,matchers:[]}]));return{...t,sources:r}}function H(e,t){if(e.text===void 0)return e;let n=r(e.text,`user`,V(t));return{...e,text:n.text??e.text}}function U(e,t,n){let r=o(e,t);if(!r.ok)return{ok:!1,issues:r.issues};let i=H(t,n);return{ok:!0,draft:i,blocks:R(i)}}function W(e,t){if(t)return e.models[t]}function G(e){return!!(e.allowModelSelect&&Object.keys(e.models).length>=2)}function K(e,t){let n=W(e,t);return n?.allowEffortSelect?Object.keys(n.efforts??{}).length>=2:!1}function q(e,t){let n=W(e,t);if(!n?.efforts)return;let r=n.defaultEffort?.trim();return r&&n.efforts[r]?r:Object.keys(n.efforts)[0]}function fe(e){return G(e)?Object.entries(e.models).map(([e,t])=>({id:e,label:t.apiId})):[]}function pe(e,t){if(!K(e,t))return[];let n=W(e,t);return n?.efforts?Object.entries(n.efforts).map(([e,t])=>({alias:e,level:t})):[]}function me(e){let t=new Set;for(let n of e)if(n.type===`tool`&&n.tool.phase===`complete`)for(let e of s(n.tool.output)??[])t.add(e);return[...t]}function he(t){let n=e(t,e=>e.type===`done`&&e.tools!==void 0);return n?.type===`done`?n.tools:void 0}function J(e){return e?.streaming?.streamThoughts!==!1}function Y(e){return e.defaultModel??Object.keys(e.models)[0]}function ge(e,t,n){let r=t.model!==void 0&&Object.hasOwn(e.models,t.model)&&(n===void 0||t.model!==Y(n))?t.model:Y(e),i=r===void 0?void 0:e.models[r]?.efforts;return{model:r,effort:r===t.model&&t.effort!==void 0&&i!==void 0&&Object.hasOwn(i,t.effort)&&(n===void 0||t.effort!==q(n,r))?t.effort:q(e,r)}}function X(e){if(!e.operationId)throw new n(`request`,i(`session.gate_expired`));return e.operationId}function _e(e,t){return t.selectedModel??Y(e)}function ve(e,t,n){if(!n||!Object.hasOwn(e.models,n))return;let r=e.models[n];if(r.allowEffortSelect)return t.selectedEffort??r.defaultEffort}function Z(e,t){let n=_e(e,t),r=e.allowModelSelect?n:void 0,i=ve(e,t,n);return{...r?{model:r}:{},...i?{effort:i}:{}}}function ye(e,t,n){return{name:n.name,input:n.input,...n.gateKind?{gateKind:n.gateKind}:{},sessionPermissions:n.sessionPermissions??t.sessionPermissions,...t.toolSnapshot?{snapshot:t.toolSnapshot}:{},...t.promotedToolIds.length?{promoted:[...t.promotedToolIds]}:{},...Z(e,t)}}function Q(e){return{...e.conversation?{conversation:e.conversation}:{},...e.turnId?{turnId:e.turnId}:{}}}function be(e,t,n,r={}){let i=(r.walkAway?.calls??[]).map(e=>({callId:e.callId,operationId:X(e)}));return{...Q(r),...Z(e,t),input:n,...i.length?{abandon:i}:{},replay:{sessionPermissions:t.sessionPermissions}}}function xe(e,t,n,r={}){return{...Q(r),gateId:n.gateId,operationId:n.operationId,decision:n.decision,...n.secret===void 0?{}:{secret:n.secret},...n.page===void 0?{}:{page:n.page},replay:ye(e,t,{...n,gateKind:n.gateKind??(t.gatedTool?.callId===n.gateId?t.gatedTool.gateKind:void 0)})}}function $(e,t){return U(e.inputs,t,e.guardrails)}function Se(e,t,n,r=[]){return $(e,{...t.trim()?{text:t}:{},...n.length?{attachments:c(n)}:{},...r.length?{voice:c(r)}:{}})}function Ce(e,t){return z(t,{showThoughts:J(e.outputs)})}export{d as C,f as D,te as E,p as O,ae as S,ne as T,B as _,Se as a,C as b,J as c,q as d,K as f,U as g,G as h,X as i,me as l,fe as m,be as n,$ as o,pe as p,Ce as r,ge as s,xe as t,he as u,z as v,re as w,S as x,y};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,u as n}from"./themeProps-3IqahpCr.js";import{t as r}from"./VStack-CkVMcNiK.js";import{n as i}from"./StackItem-CQviqAfM.js";import{H as a,M as o,c as s,l as c}from"./browser-transport-B0GPqGzb.js";import{t as l}from"./Icon-ZfFwTt8n.js";import{t as u}from"./IconButton-CG5klqF1.js";import{t as d}from"./Text-BsiAsowd.js";import{n as f,o as p}from"./labels-provider-BqgbdxdT.js";import{n as m}from"./Card-Ghe4ozhC.js";import{t as h}from"./Tooltip-CTEuMRLe.js";import{n as g,t as _}from"./arrive-DvbqpeRS.js";import{d as v}from"./reader-CaGeZoFz.js";import{_ as y,b,v as x,x as S}from"./studio-console-Da8ZVuKx.js";import{c as C,i as w}from"./trace-patterns-CS99kExN.js";import{t as T}from"./CardWall-CBRLdDZW.js";var E=e(n(),1),D=t(),O=`var(--duration-medium) var(--ease-standard)`,k=12;function A(){let e=m();return(0,E.useMemo)(()=>({percent:new Intl.NumberFormat(e,{style:`percent`,maximumFractionDigits:0}),decimal:new Intl.NumberFormat(e,{maximumFractionDigits:2}),usd:new Intl.NumberFormat(e,{style:`currency`,currency:`USD`,maximumSignificantDigits:2})}),[e])}function j(e){return C(e?`clear`:`shade2`)}function M({value:e,isLead:t}){return(0,D.jsx)(`div`,{style:{height:k,width:`${String(Math.max(e,.01)*100)}%`,borderRadius:4,background:j(t),transition:`width ${O}`}})}function N({title:e,aside:t,detail:n,answer:a}){let o=f(),s=A(),c=Object.entries(a.probabilities).sort(([,e],[,t])=>t-e);return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:a.choice,note:o(`@theorem.decision.confidence`,{percent:s.percent.format(a.confidence)}),children:(0,D.jsx)(r,{gap:2,role:`list`,children:c.map(([e,t])=>(0,D.jsxs)(r,{gap:1,role:`listitem`,"aria-label":o(`@theorem.decision.option`,{label:e,percent:s.percent.format(t)}),children:[(0,D.jsxs)(i,{gap:2,hAlign:`between`,"aria-hidden":!0,children:[(0,D.jsx)(d,{type:`supporting`,color:`secondary`,maxLines:1,children:e}),(0,D.jsx)(d,{type:`supporting`,hasTabularNumbers:!0,children:s.percent.format(t)})]}),(0,D.jsx)(M,{value:t,isLead:e===a.choice})]},e))})})}var P=56;function F(e){let t=e.split(/[:—–]\s/)[0]?.trim()??``;return t&&t.length<=32&&t!==e?t:e}function I({title:e,aside:t,detail:n,answer:i,labels:a}){let o=f(),s=A(),c=a.length,l=Math.min(c-1,Math.max(0,Math.round(i.score)));return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:a[l]===void 0?s.decimal.format(i.score):F(a[l]),note:[o(`@theorem.decision.score_of`,{score:s.decimal.format(i.score),max:s.decimal.format(c-1)}),o(`@theorem.decision.confidence`,{percent:s.percent.format(i.confidence)})].join(` · `),children:(0,D.jsxs)(r,{gap:1,children:[(0,D.jsxs)(`div`,{"aria-hidden":!0,style:{position:`relative`,display:`flex`,alignItems:`flex-end`,gap:4,height:P},children:[a.map((e,t)=>(0,D.jsx)(`div`,{style:{flex:1,height:`${String(Math.max(.04,i.probabilities[String(t)]??0)*100)}%`,borderRadius:4,background:j(t===l),transition:`height ${O}`}},`${String(t)}:${e}`)),(0,D.jsx)(`div`,{style:{position:`absolute`,insetBlock:-4,left:`${String((i.score+.5)/c*100)}%`,width:0,borderInlineStart:`1.5px dashed var(--color-text-secondary)`,transition:`left ${O}`}})]}),(0,D.jsx)(`div`,{style:{display:`flex`,gap:4},children:a.map((e,t)=>(0,D.jsx)(`div`,{style:{flex:1,minWidth:0},title:e,children:(0,D.jsx)(d,{type:`supporting`,color:`secondary`,maxLines:1,children:F(e)})},`${String(t)}:${e}`))}),(0,D.jsx)(`span`,{style:{position:`absolute`,width:1,height:1,overflow:`hidden`,clipPath:`inset(50%)`},children:a.map((e,t)=>o(`@theorem.decision.option`,{label:e,percent:s.percent.format(i.probabilities[String(t)]??0)})).join(`; `)})]})})}function L({title:e,aside:t,detail:n,answer:r}){let i=A();return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:i.decimal.format(r.noul)})}var R=72,z=168;function B(e){let[t,n]=(0,E.useState)(null);return(0,E.useEffect)(()=>{let t=new Image;t.onload=()=>{n({width:t.naturalWidth,height:t.naturalHeight})},t.src=e},[e]),t}function V(e,t){let n=e.style.color;e.style.color=`var(${t})`;let r=getComputedStyle(e).color;return e.style.color=n,r}function H({source:e,box:t,caption:n}){let r=f(),i=b(e),a=B(i),[o,l]=(0,E.useState)(null);if(!a)return null;let u=x(t),d=a.width*(t.right-t.left)/(a.height*(t.bottom-t.top)),p=r(`@theorem.decision.open_box`);return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(h,{content:p,children:(0,D.jsx)(c,{label:p,padding:0,onClick:e=>{let n={outline:V(e.currentTarget,`--color-accent`),shade:V(e.currentTarget,`--color-overlay`)};S(i,t,n).then(l)},children:(0,D.jsx)(`div`,{role:`img`,"aria-label":r(`@theorem.decision.box_in`),style:{position:`relative`,overflow:`hidden`,aspectRatio:String(d),height:z,maxWidth:`100%`,borderRadius:4},children:(0,D.jsx)(`img`,{src:i,alt:``,style:{position:`absolute`,width:`${String(u.width)}%`,height:`${String(u.height)}%`,left:`${String(u.left)}%`,top:`${String(u.top)}%`,maxWidth:`none`}})})})}),(0,D.jsx)(s,{isOpen:o!==null,onOpenChange:e=>{e||l(null)},media:{src:o??i,alt:r(`@theorem.decision.box_marked`),caption:n},hasZoom:!0})]})}function U({title:e,aside:t,detail:n,answer:r,field:i,asked:a}){let o=f(),s=a&&y(a.images,a.state,i),c=A(),{top:l,bottom:u,left:d,right:p}=r.box,m=o(`@theorem.decision.box_edges`,{left:c.percent.format(d),top:c.percent.format(l),right:c.percent.format(p),bottom:c.percent.format(u)});return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:m,note:o(`@theorem.decision.confidence`,{percent:c.percent.format(r.confidence)}),children:s?(0,D.jsx)(H,{source:s,box:r.box,caption:`${e}: ${m}`}):(0,D.jsx)(`div`,{"aria-hidden":!0,style:{position:`relative`,height:R,borderRadius:4,border:`1px solid var(--color-border)`},children:(0,D.jsx)(`div`,{style:{position:`absolute`,insetInlineStart:`${String(d*100)}%`,insetBlockStart:`${String(l*100)}%`,width:`${String((p-d)*100)}%`,height:`${String((u-l)*100)}%`,borderRadius:2,background:j(!0),transition:`all ${O}`}})})})}function W({question:e,answer:t,asked:n,onQuestion:r,detail:i}){let o=f(),s=`${e.id} · ${o(`@theorem.decision.type.${e.type}`)}`;if(!t)return null;let c=o(`@theorem.decision.edit_question`,{question:e.id}),d={title:s,detail:i,aside:r?(0,D.jsx)(u,{label:c,tooltip:c,size:`sm`,variant:`ghost`,icon:(0,D.jsx)(l,{icon:a,size:`xsm`,color:`secondary`}),onClick:()=>{r(e.id)}}):void 0};return t.type===`choice`?(0,D.jsx)(N,{...d,answer:t}):t.type===`score`?(0,D.jsx)(I,{...d,answer:t,labels:e.labels}):t.type===`noul`?(0,D.jsx)(L,{...d,answer:t}):(0,D.jsx)(U,{...d,answer:t,field:e.field,asked:n})}function G({model:e,usage:t,elapsedMs:n,isStale:i,tokens:a,children:o}){let s=f(),c=A();return(0,D.jsx)(g,{children:(0,D.jsxs)(r,{gap:3,style:{opacity:i?.5:1,transition:`opacity ${O}`},"aria-busy":i,children:[o,(0,D.jsx)(_,{children:(0,D.jsx)(d,{type:`supporting`,color:`secondary`,hasTabularNumbers:!0,children:p(s,c.usd,{model:e,usage:t,elapsedMs:n,tokens:a})})})]},n??0)})}function K({iface:e,result:t,elapsedMs:n,isStale:r,asked:i,onQuestion:a,questionText:o}){let s=f();return(0,D.jsx)(G,{model:t.model,usage:t.usage,elapsedMs:n,isStale:r,tokens:e=>s(`@theorem.decision.tokens`,{count:e}),children:(0,D.jsx)(T,{minWidth:260,children:e.questions.map(e=>(0,D.jsx)(_,{children:(0,D.jsx)(W,{question:e,answer:t.answers[e.id],asked:i,onQuestion:a,detail:o?.[e.id]})},e.id))})})}var q={status:`idle`,result:null,elapsedMs:null,startedAt:null,failure:null};function J(e,t){for(let n of t??[])e.traces?.push(n)}function Y(e,t,n){let[r,i]=(0,E.useState)(q),a=(0,E.useRef)(null);(0,E.useEffect)(()=>()=>a.current?.abort(),[]);let s=(0,E.useCallback)(()=>{a.current?.abort(),a.current=null,i(e=>e.status===t?{...e,status:e.result?`done`:`idle`,startedAt:null}:e)},[t]),c=(0,E.useCallback)(async(...r)=>{a.current?.abort();let s=new AbortController;a.current=s,i(e=>({status:t,result:e.result,elapsedMs:e.elapsedMs,startedAt:Date.now(),failure:null}));let c=performance.now();try{let t=await n(e,s.signal,...r);if(s.signal.aborted)return;J(e,t.traces),i({status:`done`,result:t.result,elapsedMs:performance.now()-c,startedAt:null,failure:null})}catch(t){if(s.signal.aborted)return;J(e,v(t)),i(e=>({...e,status:`error`,startedAt:null,failure:o(t)}))}finally{a.current===s&&(a.current=null)}},[e,t,n]);return{...r,call:c,cancel:s}}export{A as a,K as i,G as n,M as r,Y as t};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{c as t,u as n}from"./themeProps-3IqahpCr.js";import{t as r}from"./VStack-CkVMcNiK.js";import{n as i}from"./StackItem-CQviqAfM.js";import{P as a,W as o,l as s,u as c}from"./browser-transport-DxpDmXGb.js";import{t as l}from"./Icon-ZfFwTt8n.js";import{t as u}from"./IconButton-CG5klqF1.js";import{t as d}from"./Text-BsiAsowd.js";import{n as f,o as p}from"./labels-provider-BqgbdxdT.js";import{n as m}from"./Card-Ghe4ozhC.js";import{t as h}from"./Tooltip-CTEuMRLe.js";import{n as g,t as _}from"./arrive-DvbqpeRS.js";import{d as v}from"./reader-paEmSrWc.js";import{_ as y,b,v as x,x as S}from"./studio-console-1qIWsDtV.js";import{c as C,i as w}from"./trace-patterns-CS99kExN.js";import{t as T}from"./CardWall-CBRLdDZW.js";var E=e(n(),1),D=t(),O=`var(--duration-medium) var(--ease-standard)`,k=12;function A(){let e=m();return(0,E.useMemo)(()=>({percent:new Intl.NumberFormat(e,{style:`percent`,maximumFractionDigits:0}),decimal:new Intl.NumberFormat(e,{maximumFractionDigits:2}),usd:new Intl.NumberFormat(e,{style:`currency`,currency:`USD`,maximumSignificantDigits:2})}),[e])}function j(e){return C(e?`clear`:`shade2`)}function M({value:e,isLead:t}){return(0,D.jsx)(`div`,{style:{height:k,width:`${String(Math.max(e,.01)*100)}%`,borderRadius:4,background:j(t),transition:`width ${O}`}})}function N({title:e,aside:t,detail:n,answer:a}){let o=f(),s=A(),c=Object.entries(a.probabilities).sort(([,e],[,t])=>t-e);return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:a.choice,note:o(`@theorem.decision.confidence`,{percent:s.percent.format(a.confidence)}),children:(0,D.jsx)(r,{gap:2,role:`list`,children:c.map(([e,t])=>(0,D.jsxs)(r,{gap:1,role:`listitem`,"aria-label":o(`@theorem.decision.option`,{label:e,percent:s.percent.format(t)}),children:[(0,D.jsxs)(i,{gap:2,hAlign:`between`,"aria-hidden":!0,children:[(0,D.jsx)(d,{type:`supporting`,color:`secondary`,maxLines:1,children:e}),(0,D.jsx)(d,{type:`supporting`,hasTabularNumbers:!0,children:s.percent.format(t)})]}),(0,D.jsx)(M,{value:t,isLead:e===a.choice})]},e))})})}var P=56;function F(e){let t=e.split(/[:—–]\s/)[0]?.trim()??``;return t&&t.length<=32&&t!==e?t:e}function I({title:e,aside:t,detail:n,answer:i,labels:a}){let o=f(),s=A(),c=a.length,l=Math.min(c-1,Math.max(0,Math.round(i.score)));return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:a[l]===void 0?s.decimal.format(i.score):F(a[l]),note:[o(`@theorem.decision.score_of`,{score:s.decimal.format(i.score),max:s.decimal.format(c-1)}),o(`@theorem.decision.confidence`,{percent:s.percent.format(i.confidence)})].join(` · `),children:(0,D.jsxs)(r,{gap:1,children:[(0,D.jsxs)(`div`,{"aria-hidden":!0,style:{position:`relative`,display:`flex`,alignItems:`flex-end`,gap:4,height:P},children:[a.map((e,t)=>(0,D.jsx)(`div`,{style:{flex:1,height:`${String(Math.max(.04,i.probabilities[String(t)]??0)*100)}%`,borderRadius:4,background:j(t===l),transition:`height ${O}`}},`${String(t)}:${e}`)),(0,D.jsx)(`div`,{style:{position:`absolute`,insetBlock:-4,left:`${String((i.score+.5)/c*100)}%`,width:0,borderInlineStart:`1.5px dashed var(--color-text-secondary)`,transition:`left ${O}`}})]}),(0,D.jsx)(`div`,{style:{display:`flex`,gap:4},children:a.map((e,t)=>(0,D.jsx)(`div`,{style:{flex:1,minWidth:0},title:e,children:(0,D.jsx)(d,{type:`supporting`,color:`secondary`,maxLines:1,children:F(e)})},`${String(t)}:${e}`))}),(0,D.jsx)(`span`,{style:{position:`absolute`,width:1,height:1,overflow:`hidden`,clipPath:`inset(50%)`},children:a.map((e,t)=>o(`@theorem.decision.option`,{label:e,percent:s.percent.format(i.probabilities[String(t)]??0)})).join(`; `)})]})})}function L({title:e,aside:t,detail:n,answer:r}){let i=A();return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:i.decimal.format(r.noul)})}var R=72,z=168;function B(e){let[t,n]=(0,E.useState)(null);return(0,E.useEffect)(()=>{let t=new Image;t.onload=()=>{n({width:t.naturalWidth,height:t.naturalHeight})},t.src=e},[e]),t}function V(e,t){let n=e.style.color;e.style.color=`var(${t})`;let r=getComputedStyle(e).color;return e.style.color=n,r}function H({source:e,box:t,caption:n}){let r=f(),i=b(e),a=B(i),[o,l]=(0,E.useState)(null);if(!a)return null;let u=x(t),d=a.width*(t.right-t.left)/(a.height*(t.bottom-t.top)),p=r(`@theorem.decision.open_box`);return(0,D.jsxs)(D.Fragment,{children:[(0,D.jsx)(h,{content:p,children:(0,D.jsx)(c,{label:p,padding:0,onClick:e=>{let n={outline:V(e.currentTarget,`--color-accent`),shade:V(e.currentTarget,`--color-overlay`)};S(i,t,n).then(l)},children:(0,D.jsx)(`div`,{role:`img`,"aria-label":r(`@theorem.decision.box_in`),style:{position:`relative`,overflow:`hidden`,aspectRatio:String(d),height:z,maxWidth:`100%`,borderRadius:4},children:(0,D.jsx)(`img`,{src:i,alt:``,style:{position:`absolute`,width:`${String(u.width)}%`,height:`${String(u.height)}%`,left:`${String(u.left)}%`,top:`${String(u.top)}%`,maxWidth:`none`}})})})}),(0,D.jsx)(s,{isOpen:o!==null,onOpenChange:e=>{e||l(null)},media:{src:o??i,alt:r(`@theorem.decision.box_marked`),caption:n},hasZoom:!0})]})}function U({title:e,aside:t,detail:n,answer:r,field:i,asked:a}){let o=f(),s=a&&y(a.images,a.state,i),c=A(),{top:l,bottom:u,left:d,right:p}=r.box,m=o(`@theorem.decision.box_edges`,{left:c.percent.format(d),top:c.percent.format(l),right:c.percent.format(p),bottom:c.percent.format(u)});return(0,D.jsx)(w,{title:e,aside:t,detail:n,value:m,note:o(`@theorem.decision.confidence`,{percent:c.percent.format(r.confidence)}),children:s?(0,D.jsx)(H,{source:s,box:r.box,caption:`${e}: ${m}`}):(0,D.jsx)(`div`,{"aria-hidden":!0,style:{position:`relative`,height:R,borderRadius:4,border:`1px solid var(--color-border)`},children:(0,D.jsx)(`div`,{style:{position:`absolute`,insetInlineStart:`${String(d*100)}%`,insetBlockStart:`${String(l*100)}%`,width:`${String((p-d)*100)}%`,height:`${String((u-l)*100)}%`,borderRadius:2,background:j(!0),transition:`all ${O}`}})})})}function W({question:e,answer:t,asked:n,onQuestion:r,detail:i}){let a=f(),s=`${e.id} · ${a(`@theorem.decision.type.${e.type}`)}`;if(!t)return null;let c=a(`@theorem.decision.edit_question`,{question:e.id}),d={title:s,detail:i,aside:r?(0,D.jsx)(u,{label:c,tooltip:c,size:`sm`,variant:`ghost`,icon:(0,D.jsx)(l,{icon:o,size:`xsm`,color:`secondary`}),onClick:()=>{r(e.id)}}):void 0};return t.type===`choice`?(0,D.jsx)(N,{...d,answer:t}):t.type===`score`?(0,D.jsx)(I,{...d,answer:t,labels:e.labels}):t.type===`noul`?(0,D.jsx)(L,{...d,answer:t}):(0,D.jsx)(U,{...d,answer:t,field:e.field,asked:n})}function G({model:e,usage:t,elapsedMs:n,isStale:i,tokens:a,children:o}){let s=f(),c=A();return(0,D.jsx)(g,{children:(0,D.jsxs)(r,{gap:3,style:{opacity:i?.5:1,transition:`opacity ${O}`},"aria-busy":i,children:[o,(0,D.jsx)(_,{children:(0,D.jsx)(d,{type:`supporting`,color:`secondary`,hasTabularNumbers:!0,children:p(s,c.usd,{model:e,usage:t,elapsedMs:n,tokens:a})})})]},n??0)})}function K({iface:e,result:t,elapsedMs:n,isStale:r,asked:i,onQuestion:a,questionText:o}){let s=f();return(0,D.jsx)(G,{model:t.model,usage:t.usage,elapsedMs:n,isStale:r,tokens:e=>s(`@theorem.decision.tokens`,{count:e}),children:(0,D.jsx)(T,{minWidth:260,children:e.questions.map(e=>(0,D.jsx)(_,{children:(0,D.jsx)(W,{question:e,answer:t.answers[e.id],asked:i,onQuestion:a,detail:o?.[e.id]})},e.id))})})}var q={status:`idle`,result:null,elapsedMs:null,startedAt:null,failure:null};function J(e,t){for(let n of t??[])e.traces?.push(n)}function Y(e,t,n){let[r,i]=(0,E.useState)(q),o=(0,E.useRef)(null);(0,E.useEffect)(()=>()=>o.current?.abort(),[]);let s=(0,E.useCallback)(()=>{o.current?.abort(),o.current=null,i(e=>e.status===t?{...e,status:e.result?`done`:`idle`,startedAt:null}:e)},[t]),c=(0,E.useCallback)(async(...r)=>{o.current?.abort();let s=new AbortController;o.current=s,i(e=>({status:t,result:e.result,elapsedMs:e.elapsedMs,startedAt:Date.now(),failure:null}));let c=performance.now();try{let t=await n(e,s.signal,...r);if(s.signal.aborted)return;J(e,t.traces),i({status:`done`,result:t.result,elapsedMs:performance.now()-c,startedAt:null,failure:null})}catch(t){if(s.signal.aborted)return;J(e,v(t)),i(e=>({...e,status:`error`,startedAt:null,failure:a(t)}))}finally{o.current===s&&(o.current=null)}},[e,t,n]);return{...r,call:c,cancel:s}}export{A as a,K as i,G as n,M as r,Y as t};
package/page/index.html CHANGED
@@ -10,7 +10,7 @@
10
10
  href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='7' fill='%23000'/%3E%3Cg transform='translate(4 4)' fill='none' stroke='%23fff' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='M4.5 18.5c2 0 3-1.2 4.2-3.4l2.6-5c1-1.9 2.1-3.1 4.2-3.1'/%3E%3Cpath d='M5.5 8.2c1.6-.9 3.2-.4 3.8 1.6l2.3 6.6c.6 1.7 2.1 2.4 3.9 1.7'/%3E%3Ccircle cx='19.5' cy='4.5' r='1.6' fill='%23fff' stroke='none'/%3E%3C/g%3E%3C/svg%3E"
11
11
  />
12
12
  <title>theorem studio</title>
13
- <script type="module" crossorigin src="/studio/assets/index-BVTCzZhh.js"></script>
13
+ <script type="module" crossorigin src="/studio/assets/index-C3mDKoGG.js"></script>
14
14
  <link rel="modulepreload" crossorigin href="/studio/assets/rolldown-runtime-hePW80VL.js">
15
15
  <link rel="modulepreload" crossorigin href="/studio/assets/themeProps-3IqahpCr.js">
16
16
  <link rel="modulepreload" crossorigin href="/studio/assets/tokens.stylex-DkHf0P9C.js">
@@ -43,7 +43,7 @@
43
43
  <link rel="modulepreload" crossorigin href="/studio/assets/SidePanel-OYp0bLNO.js">
44
44
  <link rel="modulepreload" crossorigin href="/studio/assets/IconAlertTriangle-BqAEqqdU.js">
45
45
  <link rel="modulepreload" crossorigin href="/studio/assets/labels-provider-BqgbdxdT.js">
46
- <link rel="modulepreload" crossorigin href="/studio/assets/Banner-CLcFr8r9.js">
46
+ <link rel="modulepreload" crossorigin href="/studio/assets/Banner-B1Vat7i_.js">
47
47
  <link rel="modulepreload" crossorigin href="/studio/assets/arrive-DvbqpeRS.js">
48
48
  <link rel="modulepreload" crossorigin href="/studio/assets/Center-nHS1JSux.js">
49
49
  <link rel="modulepreload" crossorigin href="/studio/assets/IconSearch-BTx66a40.js">
@@ -54,12 +54,12 @@
54
54
  <link rel="modulepreload" crossorigin href="/studio/assets/live-ingress-lDUGPwth.js">
55
55
  <link rel="modulepreload" crossorigin href="/studio/assets/trace-schema-9CdEyG6Q.js">
56
56
  <link rel="modulepreload" crossorigin href="/studio/assets/stub-DpBSP8Ld.js">
57
- <link rel="modulepreload" crossorigin href="/studio/assets/reader-CaGeZoFz.js">
57
+ <link rel="modulepreload" crossorigin href="/studio/assets/reader-paEmSrWc.js">
58
58
  <link rel="modulepreload" crossorigin href="/studio/assets/tree-BxX70aqA.js">
59
59
  <link rel="modulepreload" crossorigin href="/studio/assets/types-BoECJ8mE.js">
60
60
  <link rel="modulepreload" crossorigin href="/studio/assets/useScrollLock-Dyf6PHJt.js">
61
61
  <link rel="modulepreload" crossorigin href="/studio/assets/useContainerReveal-BFy8N_QU.js">
62
- <link rel="modulepreload" crossorigin href="/studio/assets/browser-transport-B0GPqGzb.js">
62
+ <link rel="modulepreload" crossorigin href="/studio/assets/browser-transport-DxpDmXGb.js">
63
63
  <link rel="modulepreload" crossorigin href="/studio/assets/focusReturn-CTppP2k0.js">
64
64
  <link rel="modulepreload" crossorigin href="/studio/assets/chainEventHandlers-C6ttXGfW.js">
65
65
  <link rel="modulepreload" crossorigin href="/studio/assets/Dialog-BDUExlk_.js">
@@ -67,7 +67,7 @@
67
67
  <link rel="modulepreload" crossorigin href="/studio/assets/CheckboxInput-C9kbVyhK.js">
68
68
  <link rel="modulepreload" crossorigin href="/studio/assets/IconEye-BB5aY-wQ.js">
69
69
  <link rel="modulepreload" crossorigin href="/studio/assets/encode-files-DZ4tVtEQ.js">
70
- <link rel="modulepreload" crossorigin href="/studio/assets/turn-client-BBi2anJM.js">
70
+ <link rel="modulepreload" crossorigin href="/studio/assets/turn-client-BZUECwPn.js">
71
71
  <link rel="modulepreload" crossorigin href="/studio/assets/workspace-Bc---F49.js">
72
72
  <link rel="modulepreload" crossorigin href="/studio/assets/lent-keys-C32ems-I.js">
73
73
  <link rel="modulepreload" crossorigin href="/studio/assets/editors-BJX_S59A.js">
@@ -76,7 +76,7 @@
76
76
  <link rel="modulepreload" crossorigin href="/studio/assets/useAdaptivePresentation-BY_zvjIp.js">
77
77
  <link rel="modulepreload" crossorigin href="/studio/assets/Section-DJ97F7QE.js">
78
78
  <link rel="modulepreload" crossorigin href="/studio/assets/CollapsibleGroup-toq0Nedn.js">
79
- <link rel="modulepreload" crossorigin href="/studio/assets/ContextMenu-CArbXxnu.js">
79
+ <link rel="modulepreload" crossorigin href="/studio/assets/ContextMenu-BreVLY9J.js">
80
80
  <link rel="modulepreload" crossorigin href="/studio/assets/BottomSheet-BQPskY35.js">
81
81
  <link rel="stylesheet" crossorigin href="/studio/assets/PaneState-CnxaP3LD.css">
82
82
  <link rel="stylesheet" crossorigin href="/studio/assets/index-Oo9otEIT.css">