@openchambery/web 2.1.6-beta.2 → 2.1.6-beta.4

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 (77) hide show
  1. package/dist/assets/AgentAvatar-CIrVQfPv.js +1 -0
  2. package/dist/assets/{AssistantView-DN6UJr_V.js → AssistantView-D_v2B58U.js} +3 -3
  3. package/dist/assets/{DiagramView-uy1gRM53.js → DiagramView-ButyI3RU.js} +1 -1
  4. package/dist/assets/{FadeInOnReveal-C8mIXT_x.js → FadeInOnReveal-De7I8Yr9.js} +1 -1
  5. package/dist/assets/{Icon-De3bTfBD.js → Icon-DG553vVG.js} +1 -1
  6. package/dist/assets/{ImageLoadingPlaceholder-DVxKuVwD.js → ImageLoadingPlaceholder-q319ZCOp.js} +1 -1
  7. package/dist/assets/{LoadingImage-DZsBpRYx.js → LoadingImage-CJsNGQa7.js} +1 -1
  8. package/dist/assets/{MarkdownRenderer-DNJGHMIC.js → MarkdownRenderer-D4C_jDDb.js} +2 -2
  9. package/dist/assets/MarkdownRendererImpl-BfrArnXH.js +10 -0
  10. package/dist/assets/{MarkstreamRendererImpl-CMMICG0_.js → MarkstreamRendererImpl-DYzxZ0fX.js} +1 -1
  11. package/dist/assets/{MobileDetailNavigation-Bj-m2m5e.js → MobileDetailNavigation-BA3y3Y0I.js} +1 -1
  12. package/dist/assets/{MobileShareBridge-BiYwW7Y0.js → MobileShareBridge-CzDrXfJm.js} +2 -2
  13. package/dist/assets/{MobileTabPageHeader-CputKz03.js → MobileTabPageHeader-DNMIDO6t.js} +1 -1
  14. package/dist/assets/{MultiRunWindow-Ck0jRZNB.js → MultiRunWindow-C2UHr_vt.js} +1 -1
  15. package/dist/assets/{OnboardingScreen-WDXH6GyO.js → OnboardingScreen-D5ONV7j0.js} +1 -1
  16. package/dist/assets/{OverlayScrollbar-_xcqpVSN.js → OverlayScrollbar-DhvS-WyM.js} +1 -1
  17. package/dist/assets/{SettingsView-BHKW9eTF.js → SettingsView-BLKIEMRa.js} +1 -1
  18. package/dist/assets/{SettingsWindow-7dXoEG0v.js → SettingsWindow-D-37o-Kj.js} +1 -1
  19. package/dist/assets/{TerminalView-Deuhne-r.js → TerminalView-DOPVrude.js} +1 -1
  20. package/dist/assets/{ToolOutputDialog-u5flMX6o.js → ToolOutputDialog-B_vCfCE6.js} +1 -1
  21. package/dist/assets/{appThemeRegistry-CM8fVUlz.js → appThemeRegistry-B34MhfNi.js} +1 -1
  22. package/dist/assets/{assistant-attachment-cache-CPBGM8H7.js → assistant-attachment-cache-Bzewqov4.js} +1 -1
  23. package/dist/assets/{button-BnPjweDW.js → button-Dcg95USu.js} +1 -1
  24. package/dist/assets/{collapsible-C9mIVYPa.js → collapsible-C_FwKIcY.js} +1 -1
  25. package/dist/assets/{context-menu-C_ImdU3v.js → context-menu-Cd4u8G5_.js} +1 -1
  26. package/dist/assets/{desktopHosts-BfMzjRVt.js → desktopHosts-BKeEWmL5.js} +1 -1
  27. package/dist/assets/{desktopRelayRestore-ML6japys.js → desktopRelayRestore-FWm2fXr6.js} +1 -1
  28. package/dist/assets/{diagram-DVV7MmUA.js → diagram-xW_zRY0U.js} +1 -1
  29. package/dist/assets/{dropdown-menu.styles-Dw94PXY7.js → dropdown-menu.styles-BdfQzOhk.js} +1 -1
  30. package/dist/assets/{fileMentionTouchSelection-BzpYsyQc.js → fileMentionTouchSelection-DWLcnu1b.js} +1 -1
  31. package/dist/assets/{fileQueries-DfHYU8Iq.js → fileQueries-Dhgypzyl.js} +1 -1
  32. package/dist/assets/{gitApi-CrQtT338.js → gitApi-BQjgLtPV.js} +1 -1
  33. package/dist/assets/{image-loading-4Touxv4x.js → image-loading-BilWo6nu.js} +1 -1
  34. package/dist/assets/{input-CporeP3S.js → input-DUtgDXvp.js} +1 -1
  35. package/dist/assets/{insertionBoundaries-ChlbOFDZ.js → insertionBoundaries-vvjY2lRz.js} +1 -1
  36. package/dist/assets/{main-BlHbOo35.js → main-BFUn_d0i.js} +2 -2
  37. package/dist/assets/{main-f9TMz0v-.js → main-CVm2XTRV.js} +4 -4
  38. package/dist/assets/{markdownHeightCache-BMfTZ02N.js → markdownHeightCache-B7yFmx1_.js} +1 -1
  39. package/dist/assets/{mcpQueries-CrVs0bjm.js → mcpQueries-D7Ar-evF.js} +1 -1
  40. package/dist/assets/miniChat-Bt0t3ik9.js +2 -0
  41. package/dist/assets/mobile-DxlY5veL.js +2 -0
  42. package/dist/assets/{multirun-B5hU0CB9.js → multirun-D-67rRvt.js} +1 -1
  43. package/dist/assets/{persistence-CoWdsn8M.js → persistence-DUPZl7Oy.js} +1 -1
  44. package/dist/assets/{platform-Cl17ZOYo.js → platform-B5uQ25kN.js} +1 -1
  45. package/dist/assets/{projectMeta-CJCrSNnb.js → projectMeta-BCvhQw6X.js} +1 -1
  46. package/dist/assets/{rasterizePng-DZNznN7Z.js → rasterizePng-l6r-aHny.js} +1 -1
  47. package/dist/assets/{relay-image-stream-BsB_ApBk.js → relay-image-stream-qI2NTXbG.js} +1 -1
  48. package/dist/assets/{renderElectronMiniChatApp-BveH0vxr.js → renderElectronMiniChatApp-dBaofK6N.js} +2 -2
  49. package/dist/assets/{renderMobileApp-BfNdaPZD.js → renderMobileApp-CYg0kVBW.js} +4 -4
  50. package/dist/assets/{runtime-fetch-DJVW43Cw.js → runtime-fetch-QCWYlAx0.js} +1 -1
  51. package/dist/assets/{runtime-switch-Ck0YPsR7.js → runtime-switch-3ad3yzM7.js} +1 -1
  52. package/dist/assets/{runtimeConfig-DAIYN6e3.js → runtimeConfig-mMH4XDDl.js} +1 -1
  53. package/dist/assets/{runtimeEndpointReset-mocQ-I5k.js → runtimeEndpointReset-BQo-aMEW.js} +1 -1
  54. package/dist/assets/{sessionChangeSummary-CLFHr2i9.js → sessionChangeSummary-9BU9q6ze.js} +1 -1
  55. package/dist/assets/{sessionLookup-DzmVJrCR.js → sessionLookup-BoSwCXX8.js} +1 -1
  56. package/dist/assets/{sortable-tabs-strip-CgLj1fIA.js → sortable-tabs-strip-U1GuVpbB.js} +1 -1
  57. package/dist/assets/{speechSettingsQueries-CRut38TQ.js → speechSettingsQueries-FB5PeSqJ.js} +2 -2
  58. package/dist/assets/{terminalApi-B8MBtYf4.js → terminalApi-CmxLzOk9.js} +1 -1
  59. package/dist/assets/{textarea-DgVlBlA9.js → textarea-D_6qDthB.js} +1 -1
  60. package/dist/assets/{tooltip-Cgzp7Xco.js → tooltip-JILdO5Q4.js} +1 -1
  61. package/dist/assets/{url-BmJM1D3o.js → url-DAyfGWPH.js} +1 -1
  62. package/dist/assets/{useAppFontEffects-Bu5VKV6U.js → useAppFontEffects-DgMG-09z.js} +31 -31
  63. package/dist/assets/{useAssistantUIStore-Dej-0i1V.js → useAssistantUIStore-Dt0l5AKe.js} +1 -1
  64. package/dist/assets/{useDesktopWindowControlsLayout-BWtDrgcx.js → useDesktopWindowControlsLayout-ClEqhbSr.js} +1 -1
  65. package/dist/assets/{useEffectiveDirectory-B-in3kS9.js → useEffectiveDirectory-BMvG9I6q.js} +1 -1
  66. package/dist/assets/{useFontPreferences-CGnJ_sK3.js → useFontPreferences-DRwX2vzI.js} +1 -1
  67. package/dist/assets/{useMobileNavigationStore-BaxH-P85.js → useMobileNavigationStore-DdwNbT69.js} +4 -4
  68. package/dist/assets/{useUIStore-CdCyJRb0.js → useUIStore-pl39iO82.js} +1 -1
  69. package/dist/assets/{useWorkerHighlightedLines-DJjFTuH0.js → useWorkerHighlightedLines-Btpy_7wC.js} +1 -1
  70. package/dist/index.html +10 -10
  71. package/dist/mini-chat.html +10 -10
  72. package/dist/mobile.html +10 -10
  73. package/package.json +1 -1
  74. package/dist/assets/AgentAvatar-BRPyrjhY.js +0 -1
  75. package/dist/assets/MarkdownRendererImpl-Fi0OFe1o.js +0 -10
  76. package/dist/assets/miniChat-BbKnln8j.js +0 -2
  77. package/dist/assets/mobile-YB1EJ0xX.js +0 -2
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{p as t}from"./runtime-auth-C8w0nlKy.js";import{c as n,f as r,i}from"./runtime-switch-Ck0YPsR7.js";import{n as a}from"./runtime-fetch-DJVW43Cw.js";import{it as o}from"./vendor-base-ui-CdzJ6My_.js";import{St as s}from"./platform-Cl17ZOYo.js";import{n as c}from"./vendor-react-BP2cRVqX.js";import{n as l}from"./vendor-reactuses-core-BpfIZ1tg.js";import{f as u}from"./button-BnPjweDW.js";var d=e(o(),1);async function f(e,t){let n=i(),r=await a(`/api/voice/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:e}),signal:AbortSignal.any([t,AbortSignal.timeout(2e4)])});if(t.throwIfAborted(),n!==i())throw Error(`Speech runtime changed`);if(r.status===404||r.ok&&r.headers.get(`content-type`)?.includes(`text/html`))return await r.body?.cancel(),null;if(!r.ok)throw await r.body?.cancel(),Error(`Unable to create speech session`);let o=await r.json();if(t.throwIfAborted(),n!==i())throw Error(`Speech runtime changed`);if(o?.transport===`host`)return null;if(o?.transport!==`volcengine-direct`||typeof o.token!=`string`||o.token.length>16384||!/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(o.token)||typeof o.appId!=`string`||!/^[A-Za-z0-9_-]{1,128}$/.test(o.appId)||typeof o.resourceId!=`string`||!/^[A-Za-z0-9._-]{1,128}$/.test(o.resourceId)||!Number.isFinite(o.expiresAt)||o.expiresAt<=Date.now()+5e3||o.expiresAt>Date.now()+36e4||e===`tts`&&(typeof o.voice!=`string`||!/^[A-Za-z0-9_-]{1,200}$/.test(o.voice)||!Number.isFinite(o.speed)||o.speed<.5||o.speed>2||!Number.isFinite(o.pitch)||o.pitch<.5||o.pitch>2||!Number.isFinite(o.volume)||o.volume<0||o.volume>1))throw Error(`Invalid speech session`);return o}function p(e,t){let n=new URL(t===`asr`?`wss://openspeech.bytedance.com/api/v3/sauc/bigmodel_async`:`wss://openspeech.bytedance.com/api/v3/tts/bidirection`);return n.search=new URLSearchParams({api_app_key:e.appId,api_access_key:`Jwt; ${e.token}`,api_resource_id:e.resourceId}).toString(),n.toString()}var m=new TextEncoder,h=new TextDecoder,g=1048576;function _(e,t=!1,n=!1){let r=new Uint8Array(8+e.length);return r.set([17,(t?2:1)<<4|(n?2:0),t?0:16,0]),new DataView(r.buffer).setUint32(4,e.length),r.set(e,8),r}function v(e,t=``,n={}){let r=m.encode(t),i=m.encode(JSON.stringify(n)),a=new Uint8Array(12+i.length+(t?4+r.length:0));a.set([17,20,16,0]);let o=new DataView(a.buffer);o.setInt32(4,e);let s=8;return t&&(o.setUint32(s,r.length),a.set(r,s+4),s+=4+r.length),o.setUint32(s,i.length),a.set(i,s+4),a}async function y(e,t){if(e.byteLength<8||e.byteLength>g)throw Error(`Invalid speech frame size`);let n=new Uint8Array(e),r=new DataView(e),i=n[1]>>4,a=n[1]&15,o=n[2]&15,s=(n[0]&15)*4;if(n[0]>>4!=1||s<4||s>n.length-4)throw Error(`Invalid speech frame`);let c=()=>{if(s+4>n.length)throw Error(`Truncated speech frame`);let e=r.getUint32(s);return s+=4,e};if(i===15)throw Error(`Speech provider failed (code ${c()})`);if(i!==9&&(t!==`tts`||i!==11))throw Error(`Unexpected speech frame`);a&1&&c();let l=0,u=``;if(a&4&&(l=c(),t===`tts`)){let e=c();if(e>256||s+e>n.length)throw Error(`Invalid speech session ID`);u=h.decode(n.subarray(s,s+e)),s+=e}let d=c();if(s+d!==n.length)throw Error(`Truncated speech payload`);let f=n.slice(s);if(o===1){let e=new Blob([f]).stream().pipeThrough(new DecompressionStream(`gzip`)).getReader(),t=[],n=0;try{for(;;){let r=await e.read();if(r.done)break;if(n+=r.value.length,n>g)throw Error(`Speech payload exceeds size limit`);t.push(r.value)}}finally{await e.cancel().catch(()=>void 0),e.releaseLock()}f=new Uint8Array(n);let r=0;for(let e of t)f.set(e,r),r+=e.length}else if(o!==0)throw Error(`Unsupported speech compression`);return{type:i,event:l,sessionId:u,final:!!(a&2),payload:f}}function b(e){let t=JSON.parse(h.decode(e));if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Invalid speech response`);return t}async function x(e,t){t.throwIfAborted();let n=new WebSocket(e);n.binaryType=`arraybuffer`;let r=[],i=0,a=null,o=null,s=null,c=(e=!0)=>{t.removeEventListener(`abort`,u),n.onmessage=null,n.onclose=null,n.onerror=null,n.onopen=null,e&&(r.length=0,i=0),n.close(),o?.()},l=(e,t=!0)=>{a??=e,s?.(a),c(t)},u=()=>l(new DOMException(`Speech cancelled`,`AbortError`));t.addEventListener(`abort`,u,{once:!0}),n.onmessage=e=>{if(!(e.data instanceof ArrayBuffer)||e.data.byteLength>g){l(Error(`Invalid speech message`));return}if(i+=e.data.byteLength,i>33554432||r.length>=4096){l(Error(`Speech receive buffer exceeded`));return}r.push(e.data),o?.()},n.onerror=()=>l(Error(`Speech connection failed`)),n.onclose=()=>l(Error(`Speech connection ended before completion`),!1);let d=setTimeout(()=>l(Error(`Speech connection timed out`)),1e4);try{await new Promise((e,t)=>{s=t,n.onopen=()=>e()})}finally{clearTimeout(d),s=null}return{send(e){if(t.throwIfAborted(),a)throw a;if(n.readyState!==WebSocket.OPEN||n.bufferedAmount+e.length>g)throw Error(`Speech send buffer exceeded`);n.send(e)},async read(){let e=setTimeout(()=>l(Error(`Speech response timed out`)),6e4);try{for(;!r.length&&!a;)await new Promise(e=>{o=e});if(t.throwIfAborted(),!r.length&&a)throw a;let e=r.shift();return i-=e.byteLength,e}finally{clearTimeout(e),o=null}},close(){a??=new DOMException(`Speech closed`,`AbortError`),c()}}}var S=class{abort;partial;disconnected;socket=null;failure=null;completion=null;text=``;final=!1;finishing=!1;sequence=0;constructor(e,t,n){this.abort=e,this.partial=t,this.disconnected=n}get connected(){return this.socket!==null&&!this.failure&&!this.abort.signal.aborted}async start(e,t){if(t!==`audio/pcm;rate=16000;bits=16`)throw Error(`Direct speech requires 16 kHz PCM16 audio`);let n=await x(p(e,`asr`),this.abort.signal);this.socket=n;try{n.send(_(new TextEncoder().encode(JSON.stringify({user:{uid:`openchamber`},audio:{format:`pcm`,codec:`raw`,rate:16e3,bits:16,channel:1},request:{model_name:`bigmodel`,result_type:`full`,enable_itn:!0,enable_punc:!0,enable_nonstream:!0,show_utterances:!0}}))))}catch(e){throw n.close(),e}this.completion=this.receive().catch(e=>{this.failure=e instanceof Error?e:Error(`Speech recognition failed`),n.close(),!this.abort.signal.aborted&&!this.finishing&&this.disconnected()})}send(e,t){if(!this.connected||this.finishing||this.final||e!==this.sequence)return!1;try{if(t.length>128e3)throw Error(`Speech audio chunk exceeds size limit`);let e=atob(t);if(e.length%2)throw Error(`Invalid PCM audio`);let n=Uint8Array.from(e,e=>e.charCodeAt(0));return this.socket.send(_(n,!0)),this.sequence++,!0}catch{return this.failure=Error(`Unable to send speech audio`),this.socket?.close(),!1}}async finish(e){if(this.failure)throw this.failure;if(!this.socket||e!==this.sequence-1)throw Error(`Incomplete speech audio`);this.finishing=!0,this.socket.send(_(new Uint8Array,!0,!0));let t=setTimeout(()=>{this.failure=Error(`Speech finalization timed out`),this.socket?.close()},3e4);try{if(await this.completion,this.abort.signal.throwIfAborted(),this.failure)throw this.failure;if(!this.final)throw Error(`Incomplete speech recognition`);return{text:this.text}}finally{clearTimeout(t),this.socket.close()}}cancel(){this.abort.abort(),this.socket?.close()}async receive(){for(;;){let e=await y(await this.socket.read(),`asr`);this.abort.signal.throwIfAborted();let t=b(e.payload);if(t.code!==void 0&&![0,1e3,2e7].includes(Number(t.code)))throw Error(`Speech recognition failed`);let n=t.result;if(n!==void 0&&(!n||typeof n!=`object`||Array.isArray(n)))throw Error(`Invalid speech transcript`);if(n&&typeof n==`object`&&`text`in n){if(typeof n.text!=`string`)throw Error(`Invalid speech transcript`);this.text=n.text,e.final||this.partial(this.text)}if(e.final){if(!this.finishing)throw Error(`Speech recognition ended unexpectedly`);this.final=!0;return}}}},C=(e,t,n)=>{let r=Error(e);return r.name=`DictationStreamError`,r.retryable=t,n&&(r.reasonCode=n),r},w=1e4,T=15e3,E=3e4,D=3e4,O=new class{socket=null;connectPromise=null;idleCloseTimer=null;pendingStarts=new Map;pendingFinishes=new Map;connectionListeners=new Set;partialListeners=new Set;activeDictations=0;directStarts=new Map;directSessions=new Map;get isConnected(){if(this.socket?.readyState===WebSocket.OPEN)return!0;for(let e of this.directSessions.values())if(e.connected)return!0;return!1}subscribeConnectionStatus(e){return this.connectionListeners.add(e),()=>{this.connectionListeners.delete(e)}}onPartial(e){return this.partialListeners.add(e),()=>{this.partialListeners.delete(e)}}async ensureConnected(){if(this.socket?.readyState!==WebSocket.OPEN){if(this.connectPromise){await this.connectPromise;return}try{await t()}catch{}this.connectPromise=new Promise((e,t)=>{let n=!1,i;try{let e=r().websocket(`/api/dictation/ws`);i=s(e)}catch(e){this.connectPromise=null,t(e instanceof Error?e:Error(String(e)));return}let a=setTimeout(()=>{if(!n){n=!0,this.connectPromise=null;try{i.close()}catch{}t(Error(`Dictation connection timed out`))}},w);i.onopen=()=>{},i.onmessage=t=>{let r;try{r=JSON.parse(String(t.data))}catch{return}if(!n&&r.type===`ready`){n=!0,clearTimeout(a),this.socket=i,this.connectPromise=null,this.notifyConnection(!0),e();return}this.handleMessage(r)},i.onerror=()=>{window.setTimeout(()=>{n||(n=!0,clearTimeout(a),this.connectPromise=null,t(Error(`Dictation connection failed`)))},250)},i.onclose=e=>{if(!n){n=!0,clearTimeout(a),this.connectPromise=null;let r=e?.reason?`: ${e.reason}`:``;t(Error(`Dictation connection failed${r}`));return}this.socket===i&&(this.socket=null,this.rejectAllPending(Error(`Dictation connection lost`)),this.notifyConnection(!1))}}),await this.connectPromise}}async startDictationStream(e,t){let n=new AbortController;this.directStarts.set(e,n);try{let r=await f(`asr`,n.signal);if(n.signal.throwIfAborted(),r){let i=new S(n,t=>{for(let n of this.partialListeners)n(e,t)},()=>{this.directSessions.delete(e),i.cancel(),this.notifyConnection(!1)});this.directSessions.set(e,i),await i.start(r,t),n.signal.throwIfAborted(),this.notifyConnection(!0);return}await this.ensureConnected(),n.signal.throwIfAborted()}catch(t){throw this.directSessions.get(e)?.cancel(),this.directSessions.delete(e),t}finally{this.directStarts.delete(e)}return this.activeDictations+=1,this.clearIdleCloseTimer(),new Promise((n,r)=>{let i=setTimeout(()=>{this.pendingStarts.delete(e),this.releaseDictation(),r(Error(`Dictation start timed out`))},T);this.pendingStarts.set(e,{resolve:()=>{clearTimeout(i),n()},reject:e=>{clearTimeout(i),this.releaseDictation(),r(e)},timeout:i}),this.send({type:`start`,dictationId:e,format:t})||(clearTimeout(i),this.pendingStarts.delete(e),this.releaseDictation(),r(Error(`Dictation connection lost`)))})}sendDictationStreamChunk(e,t,n){let r=this.directSessions.get(e);return r?r.send(t,n):this.send({type:`chunk`,dictationId:e,seq:t,audio:n})}finishDictationStream(e,t){let n=this.directSessions.get(e);return n?n.finish(t).finally(()=>{n.cancel(),this.directSessions.delete(e)}):new Promise((n,r)=>{let i={resolve:e=>{i.timeout&&clearTimeout(i.timeout),this.releaseDictation(),n(e)},reject:e=>{i.timeout&&clearTimeout(i.timeout),this.releaseDictation(),r(e)},timeout:null};i.timeout=setTimeout(()=>{this.pendingFinishes.delete(e),this.releaseDictation(),r(Error(`Timed out waiting for transcription`))},D),this.pendingFinishes.set(e,i),this.send({type:`finish`,dictationId:e,finalSeq:t})||(this.pendingFinishes.delete(e),i.reject(Error(`Dictation connection lost`)))})}cancelDictationStream(e){this.directStarts.get(e)?.abort(),this.directStarts.delete(e);let t=this.directSessions.get(e);if(t){t.cancel(),this.directSessions.delete(e);return}this.send({type:`cancel`,dictationId:e});let n=this.pendingStarts.get(e);n&&(this.pendingStarts.delete(e),n.reject(Error(`Dictation cancelled`)));let r=this.pendingFinishes.get(e);r&&(this.pendingFinishes.delete(e),r.reject(Error(`Dictation cancelled`))),this.releaseDictation(),this.scheduleIdleCloseIfReady()}handleMessage(e){let t=e.dictationId;if(t)switch(e.type){case`ack`:{let e=this.pendingStarts.get(t);e&&(this.pendingStarts.delete(t),e.resolve());return}case`partial`:for(let n of this.partialListeners)n(t,e.text??``);return;case`finish_accepted`:{let n=this.pendingFinishes.get(t);n&&typeof e.timeoutMs==`number`&&(n.timeout&&clearTimeout(n.timeout),n.timeout=setTimeout(()=>{this.pendingFinishes.delete(t),n.reject(Error(`Timed out waiting for transcription`))},e.timeoutMs+5e3));return}case`final`:{let n=this.pendingFinishes.get(t);n&&(this.pendingFinishes.delete(t),n.resolve({text:e.text??``})),this.scheduleIdleCloseIfReady();return}case`error`:{let n=C(e.error||`Dictation failed`,e.retryable!==!1,e.reasonCode),r=this.pendingStarts.get(t);r&&(this.pendingStarts.delete(t),r.reject(n));let i=this.pendingFinishes.get(t);i&&(this.pendingFinishes.delete(t),i.reject(n)),this.scheduleIdleCloseIfReady();return}}}send(e){if(!this.isConnected||!this.socket)return!1;try{return this.socket.send(JSON.stringify(e)),!0}catch{return!1}}notifyConnection(e){for(let t of this.connectionListeners)t(e)}rejectAllPending(e){for(let[t,n]of this.pendingStarts)this.pendingStarts.delete(t),n.reject(e);for(let[t,n]of this.pendingFinishes)this.pendingFinishes.delete(t),n.reject(e);this.activeDictations=0}releaseDictation(){this.activeDictations=Math.max(0,this.activeDictations-1),this.scheduleIdleCloseIfReady()}scheduleIdleCloseIfReady(){this.activeDictations>0||this.pendingFinishes.size>0||this.pendingStarts.size>0||(this.clearIdleCloseTimer(),this.idleCloseTimer=setTimeout(()=>{if(this.activeDictations===0&&this.pendingFinishes.size===0&&this.pendingStarts.size===0){let e=this.socket;if(this.socket=null,e){try{e.close(1e3,`idle`)}catch{}this.notifyConnection(!1)}}},E))}cancelAllForRuntimeSwitch(){for(let e of this.directStarts.values())e.abort();this.directStarts.clear();for(let e of this.directSessions.values())e.cancel();this.directSessions.clear(),this.clearIdleCloseTimer();let e=this.socket;if(this.socket=null,this.connectPromise=null,this.rejectAllPending(Error(`Runtime changed`)),e){try{e.close(1e3,`runtime switch`)}catch{}this.notifyConnection(!1)}}clearIdleCloseTimer(){this.idleCloseTimer&&=(clearTimeout(this.idleCloseTimer),null)}};typeof window<`u`&&window.addEventListener(`openchamber:runtime-endpoint-changed`,()=>{O.cancelAllForRuntimeSwitch()});var k=128,A=`audio/pcm;rate=16000;bits=16`,j=()=>new Promise(e=>setTimeout(e,0)),M=()=>{let e=Math.random().toString(36).slice(2,10);return`dic_${Date.now().toString(16)}${e}`},N=class{client;format;createDictationId;dictationId=null;sendSeq=0;segments=[];streamReady=!1;flushTimer=null;drainWaiters=[];startGeneration=0;startPromise=null;constructor(e){this.client=e.client,this.format=e.format??A,this.createDictationId=e.createDictationId??M}getDictationId(){return this.dictationId}getFinalSeq(){return this.segments.length-1}hasSegments(){return this.segments.length>0}clearAll(){this.dictationId&&this.client.cancelDictationStream(this.dictationId),this.clearScheduledFlush(),this.dictationId=null,this.sendSeq=0,this.segments=[],this.streamReady=!1,this.startPromise=null,this.startGeneration+=1}resetStreamForReplay(){this.dictationId&&this.client.cancelDictationStream(this.dictationId),this.clearScheduledFlush(),this.dictationId=null,this.sendSeq=0,this.streamReady=!1,this.startPromise=null,this.startGeneration+=1}enqueueSegment(e){if(this.segments.push(e),this.client.isConnected){if(!this.dictationId){this.startPromise||this.restartStream().catch(()=>{});return}this.flush()}}flush(){let e=this.dictationId;if(!this.client.isConnected||!e||!this.streamReady)return 0;let t=0;for(;this.sendSeq<this.segments.length&&t<k;){let n=this.sendSeq,r=this.segments[n];if(!this.client.sendDictationStreamChunk(e,n,r))break;this.sendSeq=n+1,t+=1}return this.hasPendingSegments()?this.scheduleFlush():this.resolveDrainWaiters(),t}async restartStream(){this.startGeneration+=1;let e=this.startGeneration,t=this.createDictationId();this.dictationId=t,this.sendSeq=0,this.streamReady=!1;let n=(async()=>{await this.client.startDictationStream(t,this.format),this.startGeneration===e&&this.dictationId===t&&(this.streamReady=!0,this.flush())})().catch(n=>{throw this.startGeneration===e&&this.dictationId===t&&(this.dictationId=null,this.streamReady=!1),n}).finally(()=>{this.startPromise===n&&(this.startPromise=null)});this.startPromise=n,await n}async finish(e){this.dictationId||await this.restartStream(),this.startPromise&&await this.startPromise;let t=this.dictationId;if(!t||!this.streamReady)throw Error(`Failed to start dictation stream`);return this.flush(),await this.waitForFlushDrain(),{dictationId:t,text:(await this.client.finishDictationStream(t,e)).text}}cancel(){this.resetStreamForReplay()}hasPendingSegments(){return this.sendSeq<this.segments.length}scheduleFlush(){this.flushTimer||=setTimeout(()=>{this.flushTimer=null,this.flush()},0)}clearScheduledFlush(){this.resolveDrainWaiters(),this.flushTimer&&=(clearTimeout(this.flushTimer),null)}async waitForFlushDrain(){for(;this.hasPendingSegments();){if(!this.client.isConnected||!this.dictationId||!this.streamReady)throw Error(`Failed to flush dictation stream`);await new Promise(e=>{this.drainWaiters.push(e)}),await j()}}resolveDrainWaiters(){let e=this.drainWaiters;this.drainWaiters=[];for(let t of e)t()}},P=c(),F=new Set;function I(e){return F.add(e),()=>{F.delete(e)}}function L(){for(let e of F)e();if(typeof window<`u`&&window.speechSynthesis?.cancel(),typeof navigator>`u`)return;let e=navigator.audioSession;if(e)try{e.type=`play-and-record`}catch{}}function R(){if(typeof navigator>`u`)return;let e=navigator.audioSession;if(e)try{e.type!==`playback`&&(e.type=`playback`)}catch{}}var z=16e3,B=z/5,V=()=>{if(typeof window>`u`)return null;let e=window;return e.AudioContext||e.webkitAudioContext||null},H=e=>{let t=Math.max(-1,Math.min(1,e));return Math.round(t<0?t*32768:t*32767)},U=(e,t,n)=>{if(e.length===0)return new Int16Array;if(t===n){let t=new Int16Array(e.length);for(let n=0;n<e.length;n++)t[n]=H(e[n]);return t}let r=t/n,i=Math.max(1,Math.round(e.length/r)),a=new Int16Array(i);for(let t=0;t<i;t++){let n=t*r,i=Math.floor(n),o=Math.min(e.length-1,i+1),s=n-i;a[t]=H(e[i]*(1-s)+e[o]*s)}return a},W=(e,t)=>{if(e.length===0)return t;if(t.length===0)return e;let n=new Int16Array(e.length+t.length);return n.set(e,0),n.set(t,e.length),n},G=e=>{let t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),n=``;for(let e=0;e<t.length;e++)n+=String.fromCharCode(t[e]);return btoa(n)},K=()=>({stream:null,context:null,source:null,processor:null,gain:null,pending:new Int16Array,started:!1}),q=e=>{if(e)try{e.disconnect()}catch{}},J=()=>typeof navigator>`u`||typeof window>`u`||!navigator.mediaDevices||typeof navigator.mediaDevices.getUserMedia!=`function`?!1:V()!==null;function Y(e){let t=(0,P.c)(16),[n,r]=(0,d.useState)(0),i=(0,d.useRef)(e.onPcmSegment),a=(0,d.useRef)(e.onError),o,s;t[0]!==e.onError||t[1]!==e.onPcmSegment?(o=()=>{i.current=e.onPcmSegment,a.current=e.onError},s=[e.onPcmSegment,e.onError],t[0]=e.onError,t[1]=e.onPcmSegment,t[2]=o,t[3]=s):(o=t[2],s=t[3]),(0,d.useEffect)(o,s);let c;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(c=K(),t[4]=c):c=t[4];let u=(0,d.useRef)(c),f=(0,d.useRef)(0),p;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(p=async()=>{if(u.current.started)return;if(typeof navigator>`u`||!navigator.mediaDevices||typeof navigator.mediaDevices.getUserMedia!=`function`)throw Error(`Microphone capture is not supported in this environment`);let e=V();if(!e)throw Error(`AudioContext unavailable`);let t=f.current+=1;L();let n=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0}});if(t!==f.current){n.getTracks().forEach(ee);return}let a=new e;try{if(a.state===`suspended`&&await a.resume().catch($),t!==f.current){n.getTracks().forEach(Q),await a.close();return}let e=a.createMediaStreamSource(n),o=a.createScriptProcessor(4096,1,1),s=a.createGain();s.gain.value=0,u.current={stream:n,context:a,source:e,processor:o,gain:s,pending:new Int16Array,started:!0},o.onaudioprocess=e=>{let t=u.current;if(!t.started)return;let n=e.inputBuffer.getChannelData(0),o=0;for(let e=0;e<n.length;e++)o+=n[e]*n[e];let s=Math.sqrt(o/Math.max(1,n.length));r(Math.min(1,Math.max(0,s*2)));let c=U(n,a.sampleRate,z);for(t.pending=W(t.pending,c);t.pending.length>=B;){let e=t.pending.slice(0,B);t.pending=t.pending.slice(B),i.current(G(e))}},e.connect(o),o.connect(s),s.connect(a.destination)}catch(e){let t=e;n.getTracks().forEach(Z);try{await a.close()}catch{}throw u.current=K(),t instanceof Error?t:Error(String(t))}},t[5]=p):p=t[5];let m=l(p),h;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(h=async()=>{f.current+=1;let e=u.current;if(e.started=!1,r(0),e.processor)try{e.processor.onaudioprocess=null}catch{}q(e.processor),q(e.source),q(e.gain),e.stream&&e.stream.getTracks().forEach(X);let t=e.pending;if(e.pending=new Int16Array,t.length>0&&i.current(G(t)),e.context)try{await e.context.close()}catch{}u.current===e&&(u.current=K())},t[6]=h):h=t[6];let g=l(h),_,v;t[7]===g?(_=t[8],v=t[9]):(_=()=>()=>{g().catch(e=>{a.current?.(e instanceof Error?e:Error(String(e)))})},v=[g],t[7]=g,t[8]=_,t[9]=v),(0,d.useEffect)(_,v);let y;t[10]===m?y=t[11]:(y=async()=>{try{await m()}catch(e){let t=e,n=t instanceof Error?t:Error(String(t));throw a.current?.(n),n}},t[10]=m,t[11]=y);let b;return t[12]!==g||t[13]!==y||t[14]!==n?(b={start:y,stop:g,volume:n},t[12]=g,t[13]=y,t[14]=n,t[15]=b):b=t[15],b}function X(e){try{e.stop()}catch{}}function Z(e){try{e.stop()}catch{}}function Q(e){return e.stop()}function $(){}function ee(e){return e.stop()}var te=1e3,ne=e=>e instanceof Error?e:Error(String(e));function re(e={}){let{t}=u(),{onTranscript:r,onError:i,canStart:a}=e,[o,s]=(0,d.useState)(`idle`),[c,f]=(0,d.useState)(!1),[p,m]=(0,d.useState)(``),[h,g]=(0,d.useState)(0),[_,v]=(0,d.useState)(null),[y,b]=(0,d.useState)(null),x=(0,d.useRef)(o);(0,d.useEffect)(()=>{x.current=o},[o]);let S=(0,d.useRef)(``),C=(0,d.useRef)(null),w=(0,d.useRef)({starting:!1,confirming:!1,cancelling:!1}),T=(0,d.useRef)(0),E=(0,d.useRef)(r),D=(0,d.useRef)(i);(0,d.useEffect)(()=>{E.current=r,D.current=i},[r,i]);let k=(0,d.useRef)(null);k.current||=new N({client:O});let A=l(()=>{C.current&&=(clearInterval(C.current),null)}),j=l(()=>{C.current||=setInterval(()=>{g(e=>e+1)},te)}),M=l(e=>{let n=ne(e),r=n.name===`NotFoundError`||n.name===`DevicesNotFoundError`?Error(t(`chat.dictation.error.microphoneNotFound`),{cause:n}):n;v(r.message);let i=n.reasonCode;b(typeof i==`string`?i:null),D.current?.(r)}),P=l(()=>{v(null),b(null)}),F=l(()=>{k.current?.clearAll(),S.current=``,m(``)}),I=l(t=>e.onPartialTranscript?.(t));(0,d.useEffect)(()=>O.onPartial((e,t)=>{let n=k.current?.getDictationId();!n||e!==n||(S.current=t,m(t),I(t))}),[I]),(0,d.useEffect)(()=>O.subscribeConnectionStatus(e=>{if(!e){x.current===`recording`&&k.current?.resetStreamForReplay();return}if(x.current!==`recording`||k.current?.getDictationId())return;let t=T.current;k.current?.restartStream().catch(e=>{T.current===t&&M(e)})}),[M]);let L=Y({onPcmSegment:e=>{x.current===`recording`&&k.current?.enqueueSegment(e)},onError:e=>{D.current?.(e)}}),R=(0,d.useRef)(L.stop);(0,d.useEffect)(()=>{R.current=L.stop},[L.stop]);let z=l(e=>{g(0),s(`idle`),x.current=`idle`;let t=e.trim();return F(),t?(E.current?.(t),t):null}),B=l(e=>{k.current?.hasSegments()?(s(`failed`),x.current=`failed`):(s(`idle`),x.current=`idle`),M(e)}),V=l(async()=>{let e=w.current;if(e.starting||e.confirming||e.cancelling||x.current!==`idle`||a&&!a())return;e.starting=!0,f(!0);let t=++T.current;P(),m(``),g(0),s(`recording`),x.current=`recording`,F();try{if(await L.start(),T.current!==t||x.current!==`recording`)return;f(!1),j(),await k.current?.restartStream().catch(e=>{T.current===t&&M(e)})}catch(e){if(T.current!==t)return;await L.stop().catch(()=>void 0),A(),s(`idle`),x.current=`idle`,M(e)}finally{T.current===t&&f(!1),e.starting=!1}}),H=l(async()=>{let e=w.current;if(!e.cancelling&&(x.current===`recording`||x.current===`uploading`)){e.cancelling=!0,f(!1),T.current+=1,A(),g(0),P(),s(`idle`),x.current=`idle`;try{k.current?.cancel()}catch{}F();try{await L.stop()}catch{}finally{e.cancelling=!1}}}),U=l(async()=>{let e=w.current;if(e.confirming||x.current!==`recording`)return null;e.confirming=!0,f(!1);let t=++T.current;P(),A();try{if(await L.stop(),T.current!==t)return null;s(`uploading`),x.current=`uploading`;let e=k.current?.getFinalSeq()??-1;if(e<0)return k.current?.cancel(),z(``);let n=await k.current.finish(e);return T.current===t?z(n.text):null}catch(e){return T.current===t&&B(e),null}finally{e.confirming=!1}}),W=l(async()=>{if(x.current!==`failed`||!k.current?.hasSegments())return null;P();let e=++T.current;s(`uploading`),x.current=`uploading`;try{k.current.resetStreamForReplay();let t=k.current.getFinalSeq(),n=await k.current.finish(t);return T.current===e?z(n.text):null}catch(t){return T.current===e&&B(t),null}}),G=l(()=>{if(x.current!==`failed`)return null;let e=S.current.trim();g(0),s(`idle`),x.current=`idle`,P();try{k.current?.cancel()}catch{}return F(),e?(E.current?.(e),e):null}),K=l(()=>{g(0),s(`idle`),x.current=`idle`,P(),F()});return(0,d.useEffect)(()=>n(()=>{x.current===`failed`?(T.current+=1,K()):H()}),[H,K]),(0,d.useEffect)(()=>{if(o!==`recording`||y!==`model_download_in_progress`)return;let e=setInterval(()=>{x.current!==`recording`||k.current?.getDictationId()||k.current?.restartStream().then(()=>{P()}).catch(e=>{M(e)})},3e3);return()=>clearInterval(e)},[o,y,P,M]),(0,d.useEffect)(()=>()=>{T.current+=1,A(),R.current().catch(()=>void 0),k.current?.cancel()},[A]),{status:o,isRecording:o===`recording`,isStarting:c,isProcessing:o===`uploading`,partialTranscript:p,volume:L.volume,duration:h,error:_,errorReason:y,startDictation:V,confirmDictation:U,cancelDictation:H,retryFailedDictation:W,acceptPartialTranscript:G,discardFailedDictation:K}}var ie=`app-region-no-drag transition-[opacity,transform] duration-150 ease-out data-[starting-style]:opacity-0 data-[starting-style]:scale-95 data-[ending-style]:opacity-0 data-[ending-style]:scale-95 z-50 max-h-[var(--available-height)] min-w-[8rem] origin-[var(--transform-origin)] overflow-visible rounded-xl p-1 shadow-[inset_0_1px_0_0_rgba(255,255,255,0.8),inset_0_0_0_1px_rgba(0,0,0,0.04),0_0_0_1px_rgba(0,0,0,0.10),0_1px_2px_-0.5px_rgba(0,0,0,0.08),0_4px_8px_-2px_rgba(0,0,0,0.08),0_12px_20px_-4px_rgba(0,0,0,0.08)] dark:shadow-[inset_0_1px_0_0_rgba(255,255,255,0.12),inset_0_0_0_1px_rgba(255,255,255,0.08),0_0_0_1px_rgba(0,0,0,0.36),0_1px_1px_-0.5px_rgba(0,0,0,0.22),0_3px_3px_-1.5px_rgba(0,0,0,0.20),0_6px_6px_-3px_rgba(0,0,0,0.16)]`,ae=`data-[highlighted]:bg-interactive-hover hover:bg-interactive-hover active:bg-interactive-active data-[variant=destructive]:text-destructive data-[variant=destructive]:hover:bg-destructive/10 dark:data-[variant=destructive]:hover:bg-destructive/20 data-[variant=destructive]:hover:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 typography-ui-label outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5`,oe=`data-[highlighted]:bg-interactive-hover hover:bg-interactive-hover active:bg-interactive-active [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 typography-ui-label outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5`,se=`bg-border -mx-1 my-0.5 h-px`;export{re as a,R as c,x as d,b as f,p as h,oe as i,I as l,f as m,ie as n,J as o,v as p,se as r,L as s,ae as t,y as u};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{p as t}from"./runtime-auth-C8w0nlKy.js";import{c as n,f as r,i}from"./runtime-switch-3ad3yzM7.js";import{n as a}from"./runtime-fetch-QCWYlAx0.js";import{it as o}from"./vendor-base-ui-CdzJ6My_.js";import{St as s}from"./platform-B5uQ25kN.js";import{n as c}from"./vendor-react-BP2cRVqX.js";import{n as l}from"./vendor-reactuses-core-BpfIZ1tg.js";import{f as u}from"./button-Dcg95USu.js";var d=e(o(),1);async function f(e,t){let n=i(),r=await a(`/api/voice/session`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({kind:e}),signal:AbortSignal.any([t,AbortSignal.timeout(2e4)])});if(t.throwIfAborted(),n!==i())throw Error(`Speech runtime changed`);if(r.status===404||r.ok&&r.headers.get(`content-type`)?.includes(`text/html`))return await r.body?.cancel(),null;if(!r.ok)throw await r.body?.cancel(),Error(`Unable to create speech session`);let o=await r.json();if(t.throwIfAborted(),n!==i())throw Error(`Speech runtime changed`);if(o?.transport===`host`)return null;if(o?.transport!==`volcengine-direct`||typeof o.token!=`string`||o.token.length>16384||!/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(o.token)||typeof o.appId!=`string`||!/^[A-Za-z0-9_-]{1,128}$/.test(o.appId)||typeof o.resourceId!=`string`||!/^[A-Za-z0-9._-]{1,128}$/.test(o.resourceId)||!Number.isFinite(o.expiresAt)||o.expiresAt<=Date.now()+5e3||o.expiresAt>Date.now()+36e4||e===`tts`&&(typeof o.voice!=`string`||!/^[A-Za-z0-9_-]{1,200}$/.test(o.voice)||!Number.isFinite(o.speed)||o.speed<.5||o.speed>2||!Number.isFinite(o.pitch)||o.pitch<.5||o.pitch>2||!Number.isFinite(o.volume)||o.volume<0||o.volume>1))throw Error(`Invalid speech session`);return o}function p(e,t){let n=new URL(t===`asr`?`wss://openspeech.bytedance.com/api/v3/sauc/bigmodel_async`:`wss://openspeech.bytedance.com/api/v3/tts/bidirection`);return n.search=new URLSearchParams({api_app_key:e.appId,api_access_key:`Jwt; ${e.token}`,api_resource_id:e.resourceId}).toString(),n.toString()}var m=new TextEncoder,h=new TextDecoder,g=1048576;function _(e,t=!1,n=!1){let r=new Uint8Array(8+e.length);return r.set([17,(t?2:1)<<4|(n?2:0),t?0:16,0]),new DataView(r.buffer).setUint32(4,e.length),r.set(e,8),r}function v(e,t=``,n={}){let r=m.encode(t),i=m.encode(JSON.stringify(n)),a=new Uint8Array(12+i.length+(t?4+r.length:0));a.set([17,20,16,0]);let o=new DataView(a.buffer);o.setInt32(4,e);let s=8;return t&&(o.setUint32(s,r.length),a.set(r,s+4),s+=4+r.length),o.setUint32(s,i.length),a.set(i,s+4),a}async function y(e,t){if(e.byteLength<8||e.byteLength>g)throw Error(`Invalid speech frame size`);let n=new Uint8Array(e),r=new DataView(e),i=n[1]>>4,a=n[1]&15,o=n[2]&15,s=(n[0]&15)*4;if(n[0]>>4!=1||s<4||s>n.length-4)throw Error(`Invalid speech frame`);let c=()=>{if(s+4>n.length)throw Error(`Truncated speech frame`);let e=r.getUint32(s);return s+=4,e};if(i===15)throw Error(`Speech provider failed (code ${c()})`);if(i!==9&&(t!==`tts`||i!==11))throw Error(`Unexpected speech frame`);a&1&&c();let l=0,u=``;if(a&4&&(l=c(),t===`tts`)){let e=c();if(e>256||s+e>n.length)throw Error(`Invalid speech session ID`);u=h.decode(n.subarray(s,s+e)),s+=e}let d=c();if(s+d!==n.length)throw Error(`Truncated speech payload`);let f=n.slice(s);if(o===1){let e=new Blob([f]).stream().pipeThrough(new DecompressionStream(`gzip`)).getReader(),t=[],n=0;try{for(;;){let r=await e.read();if(r.done)break;if(n+=r.value.length,n>g)throw Error(`Speech payload exceeds size limit`);t.push(r.value)}}finally{await e.cancel().catch(()=>void 0),e.releaseLock()}f=new Uint8Array(n);let r=0;for(let e of t)f.set(e,r),r+=e.length}else if(o!==0)throw Error(`Unsupported speech compression`);return{type:i,event:l,sessionId:u,final:!!(a&2),payload:f}}function b(e){let t=JSON.parse(h.decode(e));if(!t||typeof t!=`object`||Array.isArray(t))throw Error(`Invalid speech response`);return t}async function x(e,t){t.throwIfAborted();let n=new WebSocket(e);n.binaryType=`arraybuffer`;let r=[],i=0,a=null,o=null,s=null,c=(e=!0)=>{t.removeEventListener(`abort`,u),n.onmessage=null,n.onclose=null,n.onerror=null,n.onopen=null,e&&(r.length=0,i=0),n.close(),o?.()},l=(e,t=!0)=>{a??=e,s?.(a),c(t)},u=()=>l(new DOMException(`Speech cancelled`,`AbortError`));t.addEventListener(`abort`,u,{once:!0}),n.onmessage=e=>{if(!(e.data instanceof ArrayBuffer)||e.data.byteLength>g){l(Error(`Invalid speech message`));return}if(i+=e.data.byteLength,i>33554432||r.length>=4096){l(Error(`Speech receive buffer exceeded`));return}r.push(e.data),o?.()},n.onerror=()=>l(Error(`Speech connection failed`)),n.onclose=()=>l(Error(`Speech connection ended before completion`),!1);let d=setTimeout(()=>l(Error(`Speech connection timed out`)),1e4);try{await new Promise((e,t)=>{s=t,n.onopen=()=>e()})}finally{clearTimeout(d),s=null}return{send(e){if(t.throwIfAborted(),a)throw a;if(n.readyState!==WebSocket.OPEN||n.bufferedAmount+e.length>g)throw Error(`Speech send buffer exceeded`);n.send(e)},async read(){let e=setTimeout(()=>l(Error(`Speech response timed out`)),6e4);try{for(;!r.length&&!a;)await new Promise(e=>{o=e});if(t.throwIfAborted(),!r.length&&a)throw a;let e=r.shift();return i-=e.byteLength,e}finally{clearTimeout(e),o=null}},close(){a??=new DOMException(`Speech closed`,`AbortError`),c()}}}var S=class{abort;partial;disconnected;socket=null;failure=null;completion=null;text=``;final=!1;finishing=!1;sequence=0;constructor(e,t,n){this.abort=e,this.partial=t,this.disconnected=n}get connected(){return this.socket!==null&&!this.failure&&!this.abort.signal.aborted}async start(e,t){if(t!==`audio/pcm;rate=16000;bits=16`)throw Error(`Direct speech requires 16 kHz PCM16 audio`);let n=await x(p(e,`asr`),this.abort.signal);this.socket=n;try{n.send(_(new TextEncoder().encode(JSON.stringify({user:{uid:`openchamber`},audio:{format:`pcm`,codec:`raw`,rate:16e3,bits:16,channel:1},request:{model_name:`bigmodel`,result_type:`full`,enable_itn:!0,enable_punc:!0,enable_nonstream:!0,show_utterances:!0}}))))}catch(e){throw n.close(),e}this.completion=this.receive().catch(e=>{this.failure=e instanceof Error?e:Error(`Speech recognition failed`),n.close(),!this.abort.signal.aborted&&!this.finishing&&this.disconnected()})}send(e,t){if(!this.connected||this.finishing||this.final||e!==this.sequence)return!1;try{if(t.length>128e3)throw Error(`Speech audio chunk exceeds size limit`);let e=atob(t);if(e.length%2)throw Error(`Invalid PCM audio`);let n=Uint8Array.from(e,e=>e.charCodeAt(0));return this.socket.send(_(n,!0)),this.sequence++,!0}catch{return this.failure=Error(`Unable to send speech audio`),this.socket?.close(),!1}}async finish(e){if(this.failure)throw this.failure;if(!this.socket||e!==this.sequence-1)throw Error(`Incomplete speech audio`);this.finishing=!0,this.socket.send(_(new Uint8Array,!0,!0));let t=setTimeout(()=>{this.failure=Error(`Speech finalization timed out`),this.socket?.close()},3e4);try{if(await this.completion,this.abort.signal.throwIfAborted(),this.failure)throw this.failure;if(!this.final)throw Error(`Incomplete speech recognition`);return{text:this.text}}finally{clearTimeout(t),this.socket.close()}}cancel(){this.abort.abort(),this.socket?.close()}async receive(){for(;;){let e=await y(await this.socket.read(),`asr`);this.abort.signal.throwIfAborted();let t=b(e.payload);if(t.code!==void 0&&![0,1e3,2e7].includes(Number(t.code)))throw Error(`Speech recognition failed`);let n=t.result;if(n!==void 0&&(!n||typeof n!=`object`||Array.isArray(n)))throw Error(`Invalid speech transcript`);if(n&&typeof n==`object`&&`text`in n){if(typeof n.text!=`string`)throw Error(`Invalid speech transcript`);this.text=n.text,e.final||this.partial(this.text)}if(e.final){if(!this.finishing)throw Error(`Speech recognition ended unexpectedly`);this.final=!0;return}}}},C=(e,t,n)=>{let r=Error(e);return r.name=`DictationStreamError`,r.retryable=t,n&&(r.reasonCode=n),r},w=1e4,T=15e3,E=3e4,D=3e4,O=new class{socket=null;connectPromise=null;idleCloseTimer=null;pendingStarts=new Map;pendingFinishes=new Map;connectionListeners=new Set;partialListeners=new Set;activeDictations=0;directStarts=new Map;directSessions=new Map;get isConnected(){if(this.socket?.readyState===WebSocket.OPEN)return!0;for(let e of this.directSessions.values())if(e.connected)return!0;return!1}subscribeConnectionStatus(e){return this.connectionListeners.add(e),()=>{this.connectionListeners.delete(e)}}onPartial(e){return this.partialListeners.add(e),()=>{this.partialListeners.delete(e)}}async ensureConnected(){if(this.socket?.readyState!==WebSocket.OPEN){if(this.connectPromise){await this.connectPromise;return}try{await t()}catch{}this.connectPromise=new Promise((e,t)=>{let n=!1,i;try{let e=r().websocket(`/api/dictation/ws`);i=s(e)}catch(e){this.connectPromise=null,t(e instanceof Error?e:Error(String(e)));return}let a=setTimeout(()=>{if(!n){n=!0,this.connectPromise=null;try{i.close()}catch{}t(Error(`Dictation connection timed out`))}},w);i.onopen=()=>{},i.onmessage=t=>{let r;try{r=JSON.parse(String(t.data))}catch{return}if(!n&&r.type===`ready`){n=!0,clearTimeout(a),this.socket=i,this.connectPromise=null,this.notifyConnection(!0),e();return}this.handleMessage(r)},i.onerror=()=>{window.setTimeout(()=>{n||(n=!0,clearTimeout(a),this.connectPromise=null,t(Error(`Dictation connection failed`)))},250)},i.onclose=e=>{if(!n){n=!0,clearTimeout(a),this.connectPromise=null;let r=e?.reason?`: ${e.reason}`:``;t(Error(`Dictation connection failed${r}`));return}this.socket===i&&(this.socket=null,this.rejectAllPending(Error(`Dictation connection lost`)),this.notifyConnection(!1))}}),await this.connectPromise}}async startDictationStream(e,t){let n=new AbortController;this.directStarts.set(e,n);try{let r=await f(`asr`,n.signal);if(n.signal.throwIfAborted(),r){let i=new S(n,t=>{for(let n of this.partialListeners)n(e,t)},()=>{this.directSessions.delete(e),i.cancel(),this.notifyConnection(!1)});this.directSessions.set(e,i),await i.start(r,t),n.signal.throwIfAborted(),this.notifyConnection(!0);return}await this.ensureConnected(),n.signal.throwIfAborted()}catch(t){throw this.directSessions.get(e)?.cancel(),this.directSessions.delete(e),t}finally{this.directStarts.delete(e)}return this.activeDictations+=1,this.clearIdleCloseTimer(),new Promise((n,r)=>{let i=setTimeout(()=>{this.pendingStarts.delete(e),this.releaseDictation(),r(Error(`Dictation start timed out`))},T);this.pendingStarts.set(e,{resolve:()=>{clearTimeout(i),n()},reject:e=>{clearTimeout(i),this.releaseDictation(),r(e)},timeout:i}),this.send({type:`start`,dictationId:e,format:t})||(clearTimeout(i),this.pendingStarts.delete(e),this.releaseDictation(),r(Error(`Dictation connection lost`)))})}sendDictationStreamChunk(e,t,n){let r=this.directSessions.get(e);return r?r.send(t,n):this.send({type:`chunk`,dictationId:e,seq:t,audio:n})}finishDictationStream(e,t){let n=this.directSessions.get(e);return n?n.finish(t).finally(()=>{n.cancel(),this.directSessions.delete(e)}):new Promise((n,r)=>{let i={resolve:e=>{i.timeout&&clearTimeout(i.timeout),this.releaseDictation(),n(e)},reject:e=>{i.timeout&&clearTimeout(i.timeout),this.releaseDictation(),r(e)},timeout:null};i.timeout=setTimeout(()=>{this.pendingFinishes.delete(e),this.releaseDictation(),r(Error(`Timed out waiting for transcription`))},D),this.pendingFinishes.set(e,i),this.send({type:`finish`,dictationId:e,finalSeq:t})||(this.pendingFinishes.delete(e),i.reject(Error(`Dictation connection lost`)))})}cancelDictationStream(e){this.directStarts.get(e)?.abort(),this.directStarts.delete(e);let t=this.directSessions.get(e);if(t){t.cancel(),this.directSessions.delete(e);return}this.send({type:`cancel`,dictationId:e});let n=this.pendingStarts.get(e);n&&(this.pendingStarts.delete(e),n.reject(Error(`Dictation cancelled`)));let r=this.pendingFinishes.get(e);r&&(this.pendingFinishes.delete(e),r.reject(Error(`Dictation cancelled`))),this.releaseDictation(),this.scheduleIdleCloseIfReady()}handleMessage(e){let t=e.dictationId;if(t)switch(e.type){case`ack`:{let e=this.pendingStarts.get(t);e&&(this.pendingStarts.delete(t),e.resolve());return}case`partial`:for(let n of this.partialListeners)n(t,e.text??``);return;case`finish_accepted`:{let n=this.pendingFinishes.get(t);n&&typeof e.timeoutMs==`number`&&(n.timeout&&clearTimeout(n.timeout),n.timeout=setTimeout(()=>{this.pendingFinishes.delete(t),n.reject(Error(`Timed out waiting for transcription`))},e.timeoutMs+5e3));return}case`final`:{let n=this.pendingFinishes.get(t);n&&(this.pendingFinishes.delete(t),n.resolve({text:e.text??``})),this.scheduleIdleCloseIfReady();return}case`error`:{let n=C(e.error||`Dictation failed`,e.retryable!==!1,e.reasonCode),r=this.pendingStarts.get(t);r&&(this.pendingStarts.delete(t),r.reject(n));let i=this.pendingFinishes.get(t);i&&(this.pendingFinishes.delete(t),i.reject(n)),this.scheduleIdleCloseIfReady();return}}}send(e){if(!this.isConnected||!this.socket)return!1;try{return this.socket.send(JSON.stringify(e)),!0}catch{return!1}}notifyConnection(e){for(let t of this.connectionListeners)t(e)}rejectAllPending(e){for(let[t,n]of this.pendingStarts)this.pendingStarts.delete(t),n.reject(e);for(let[t,n]of this.pendingFinishes)this.pendingFinishes.delete(t),n.reject(e);this.activeDictations=0}releaseDictation(){this.activeDictations=Math.max(0,this.activeDictations-1),this.scheduleIdleCloseIfReady()}scheduleIdleCloseIfReady(){this.activeDictations>0||this.pendingFinishes.size>0||this.pendingStarts.size>0||(this.clearIdleCloseTimer(),this.idleCloseTimer=setTimeout(()=>{if(this.activeDictations===0&&this.pendingFinishes.size===0&&this.pendingStarts.size===0){let e=this.socket;if(this.socket=null,e){try{e.close(1e3,`idle`)}catch{}this.notifyConnection(!1)}}},E))}cancelAllForRuntimeSwitch(){for(let e of this.directStarts.values())e.abort();this.directStarts.clear();for(let e of this.directSessions.values())e.cancel();this.directSessions.clear(),this.clearIdleCloseTimer();let e=this.socket;if(this.socket=null,this.connectPromise=null,this.rejectAllPending(Error(`Runtime changed`)),e){try{e.close(1e3,`runtime switch`)}catch{}this.notifyConnection(!1)}}clearIdleCloseTimer(){this.idleCloseTimer&&=(clearTimeout(this.idleCloseTimer),null)}};typeof window<`u`&&window.addEventListener(`openchamber:runtime-endpoint-changed`,()=>{O.cancelAllForRuntimeSwitch()});var k=128,A=`audio/pcm;rate=16000;bits=16`,j=()=>new Promise(e=>setTimeout(e,0)),M=()=>{let e=Math.random().toString(36).slice(2,10);return`dic_${Date.now().toString(16)}${e}`},N=class{client;format;createDictationId;dictationId=null;sendSeq=0;segments=[];streamReady=!1;flushTimer=null;drainWaiters=[];startGeneration=0;startPromise=null;constructor(e){this.client=e.client,this.format=e.format??A,this.createDictationId=e.createDictationId??M}getDictationId(){return this.dictationId}getFinalSeq(){return this.segments.length-1}hasSegments(){return this.segments.length>0}clearAll(){this.dictationId&&this.client.cancelDictationStream(this.dictationId),this.clearScheduledFlush(),this.dictationId=null,this.sendSeq=0,this.segments=[],this.streamReady=!1,this.startPromise=null,this.startGeneration+=1}resetStreamForReplay(){this.dictationId&&this.client.cancelDictationStream(this.dictationId),this.clearScheduledFlush(),this.dictationId=null,this.sendSeq=0,this.streamReady=!1,this.startPromise=null,this.startGeneration+=1}enqueueSegment(e){if(this.segments.push(e),this.client.isConnected){if(!this.dictationId){this.startPromise||this.restartStream().catch(()=>{});return}this.flush()}}flush(){let e=this.dictationId;if(!this.client.isConnected||!e||!this.streamReady)return 0;let t=0;for(;this.sendSeq<this.segments.length&&t<k;){let n=this.sendSeq,r=this.segments[n];if(!this.client.sendDictationStreamChunk(e,n,r))break;this.sendSeq=n+1,t+=1}return this.hasPendingSegments()?this.scheduleFlush():this.resolveDrainWaiters(),t}async restartStream(){this.startGeneration+=1;let e=this.startGeneration,t=this.createDictationId();this.dictationId=t,this.sendSeq=0,this.streamReady=!1;let n=(async()=>{await this.client.startDictationStream(t,this.format),this.startGeneration===e&&this.dictationId===t&&(this.streamReady=!0,this.flush())})().catch(n=>{throw this.startGeneration===e&&this.dictationId===t&&(this.dictationId=null,this.streamReady=!1),n}).finally(()=>{this.startPromise===n&&(this.startPromise=null)});this.startPromise=n,await n}async finish(e){this.dictationId||await this.restartStream(),this.startPromise&&await this.startPromise;let t=this.dictationId;if(!t||!this.streamReady)throw Error(`Failed to start dictation stream`);return this.flush(),await this.waitForFlushDrain(),{dictationId:t,text:(await this.client.finishDictationStream(t,e)).text}}cancel(){this.resetStreamForReplay()}hasPendingSegments(){return this.sendSeq<this.segments.length}scheduleFlush(){this.flushTimer||=setTimeout(()=>{this.flushTimer=null,this.flush()},0)}clearScheduledFlush(){this.resolveDrainWaiters(),this.flushTimer&&=(clearTimeout(this.flushTimer),null)}async waitForFlushDrain(){for(;this.hasPendingSegments();){if(!this.client.isConnected||!this.dictationId||!this.streamReady)throw Error(`Failed to flush dictation stream`);await new Promise(e=>{this.drainWaiters.push(e)}),await j()}}resolveDrainWaiters(){let e=this.drainWaiters;this.drainWaiters=[];for(let t of e)t()}},P=c(),F=new Set;function I(e){return F.add(e),()=>{F.delete(e)}}function L(){for(let e of F)e();if(typeof window<`u`&&window.speechSynthesis?.cancel(),typeof navigator>`u`)return;let e=navigator.audioSession;if(e)try{e.type=`play-and-record`}catch{}}function R(){if(typeof navigator>`u`)return;let e=navigator.audioSession;if(e)try{e.type!==`playback`&&(e.type=`playback`)}catch{}}var z=16e3,B=z/5,V=()=>{if(typeof window>`u`)return null;let e=window;return e.AudioContext||e.webkitAudioContext||null},H=e=>{let t=Math.max(-1,Math.min(1,e));return Math.round(t<0?t*32768:t*32767)},U=(e,t,n)=>{if(e.length===0)return new Int16Array;if(t===n){let t=new Int16Array(e.length);for(let n=0;n<e.length;n++)t[n]=H(e[n]);return t}let r=t/n,i=Math.max(1,Math.round(e.length/r)),a=new Int16Array(i);for(let t=0;t<i;t++){let n=t*r,i=Math.floor(n),o=Math.min(e.length-1,i+1),s=n-i;a[t]=H(e[i]*(1-s)+e[o]*s)}return a},W=(e,t)=>{if(e.length===0)return t;if(t.length===0)return e;let n=new Int16Array(e.length+t.length);return n.set(e,0),n.set(t,e.length),n},G=e=>{let t=new Uint8Array(e.buffer,e.byteOffset,e.byteLength),n=``;for(let e=0;e<t.length;e++)n+=String.fromCharCode(t[e]);return btoa(n)},K=()=>({stream:null,context:null,source:null,processor:null,gain:null,pending:new Int16Array,started:!1}),q=e=>{if(e)try{e.disconnect()}catch{}},J=()=>typeof navigator>`u`||typeof window>`u`||!navigator.mediaDevices||typeof navigator.mediaDevices.getUserMedia!=`function`?!1:V()!==null;function Y(e){let t=(0,P.c)(16),[n,r]=(0,d.useState)(0),i=(0,d.useRef)(e.onPcmSegment),a=(0,d.useRef)(e.onError),o,s;t[0]!==e.onError||t[1]!==e.onPcmSegment?(o=()=>{i.current=e.onPcmSegment,a.current=e.onError},s=[e.onPcmSegment,e.onError],t[0]=e.onError,t[1]=e.onPcmSegment,t[2]=o,t[3]=s):(o=t[2],s=t[3]),(0,d.useEffect)(o,s);let c;t[4]===Symbol.for(`react.memo_cache_sentinel`)?(c=K(),t[4]=c):c=t[4];let u=(0,d.useRef)(c),f=(0,d.useRef)(0),p;t[5]===Symbol.for(`react.memo_cache_sentinel`)?(p=async()=>{if(u.current.started)return;if(typeof navigator>`u`||!navigator.mediaDevices||typeof navigator.mediaDevices.getUserMedia!=`function`)throw Error(`Microphone capture is not supported in this environment`);let e=V();if(!e)throw Error(`AudioContext unavailable`);let t=f.current+=1;L();let n=await navigator.mediaDevices.getUserMedia({audio:{channelCount:1,noiseSuppression:!0,echoCancellation:!0,autoGainControl:!0}});if(t!==f.current){n.getTracks().forEach(ee);return}let a=new e;try{if(a.state===`suspended`&&await a.resume().catch($),t!==f.current){n.getTracks().forEach(Q),await a.close();return}let e=a.createMediaStreamSource(n),o=a.createScriptProcessor(4096,1,1),s=a.createGain();s.gain.value=0,u.current={stream:n,context:a,source:e,processor:o,gain:s,pending:new Int16Array,started:!0},o.onaudioprocess=e=>{let t=u.current;if(!t.started)return;let n=e.inputBuffer.getChannelData(0),o=0;for(let e=0;e<n.length;e++)o+=n[e]*n[e];let s=Math.sqrt(o/Math.max(1,n.length));r(Math.min(1,Math.max(0,s*2)));let c=U(n,a.sampleRate,z);for(t.pending=W(t.pending,c);t.pending.length>=B;){let e=t.pending.slice(0,B);t.pending=t.pending.slice(B),i.current(G(e))}},e.connect(o),o.connect(s),s.connect(a.destination)}catch(e){let t=e;n.getTracks().forEach(Z);try{await a.close()}catch{}throw u.current=K(),t instanceof Error?t:Error(String(t))}},t[5]=p):p=t[5];let m=l(p),h;t[6]===Symbol.for(`react.memo_cache_sentinel`)?(h=async()=>{f.current+=1;let e=u.current;if(e.started=!1,r(0),e.processor)try{e.processor.onaudioprocess=null}catch{}q(e.processor),q(e.source),q(e.gain),e.stream&&e.stream.getTracks().forEach(X);let t=e.pending;if(e.pending=new Int16Array,t.length>0&&i.current(G(t)),e.context)try{await e.context.close()}catch{}u.current===e&&(u.current=K())},t[6]=h):h=t[6];let g=l(h),_,v;t[7]===g?(_=t[8],v=t[9]):(_=()=>()=>{g().catch(e=>{a.current?.(e instanceof Error?e:Error(String(e)))})},v=[g],t[7]=g,t[8]=_,t[9]=v),(0,d.useEffect)(_,v);let y;t[10]===m?y=t[11]:(y=async()=>{try{await m()}catch(e){let t=e,n=t instanceof Error?t:Error(String(t));throw a.current?.(n),n}},t[10]=m,t[11]=y);let b;return t[12]!==g||t[13]!==y||t[14]!==n?(b={start:y,stop:g,volume:n},t[12]=g,t[13]=y,t[14]=n,t[15]=b):b=t[15],b}function X(e){try{e.stop()}catch{}}function Z(e){try{e.stop()}catch{}}function Q(e){return e.stop()}function $(){}function ee(e){return e.stop()}var te=1e3,ne=e=>e instanceof Error?e:Error(String(e));function re(e={}){let{t}=u(),{onTranscript:r,onError:i,canStart:a}=e,[o,s]=(0,d.useState)(`idle`),[c,f]=(0,d.useState)(!1),[p,m]=(0,d.useState)(``),[h,g]=(0,d.useState)(0),[_,v]=(0,d.useState)(null),[y,b]=(0,d.useState)(null),x=(0,d.useRef)(o);(0,d.useEffect)(()=>{x.current=o},[o]);let S=(0,d.useRef)(``),C=(0,d.useRef)(null),w=(0,d.useRef)({starting:!1,confirming:!1,cancelling:!1}),T=(0,d.useRef)(0),E=(0,d.useRef)(r),D=(0,d.useRef)(i);(0,d.useEffect)(()=>{E.current=r,D.current=i},[r,i]);let k=(0,d.useRef)(null);k.current||=new N({client:O});let A=l(()=>{C.current&&=(clearInterval(C.current),null)}),j=l(()=>{C.current||=setInterval(()=>{g(e=>e+1)},te)}),M=l(e=>{let n=ne(e),r=n.name===`NotFoundError`||n.name===`DevicesNotFoundError`?Error(t(`chat.dictation.error.microphoneNotFound`),{cause:n}):n;v(r.message);let i=n.reasonCode;b(typeof i==`string`?i:null),D.current?.(r)}),P=l(()=>{v(null),b(null)}),F=l(()=>{k.current?.clearAll(),S.current=``,m(``)}),I=l(t=>e.onPartialTranscript?.(t));(0,d.useEffect)(()=>O.onPartial((e,t)=>{let n=k.current?.getDictationId();!n||e!==n||(S.current=t,m(t),I(t))}),[I]),(0,d.useEffect)(()=>O.subscribeConnectionStatus(e=>{if(!e){x.current===`recording`&&k.current?.resetStreamForReplay();return}if(x.current!==`recording`||k.current?.getDictationId())return;let t=T.current;k.current?.restartStream().catch(e=>{T.current===t&&M(e)})}),[M]);let L=Y({onPcmSegment:e=>{x.current===`recording`&&k.current?.enqueueSegment(e)},onError:e=>{D.current?.(e)}}),R=(0,d.useRef)(L.stop);(0,d.useEffect)(()=>{R.current=L.stop},[L.stop]);let z=l(e=>{g(0),s(`idle`),x.current=`idle`;let t=e.trim();return F(),t?(E.current?.(t),t):null}),B=l(e=>{k.current?.hasSegments()?(s(`failed`),x.current=`failed`):(s(`idle`),x.current=`idle`),M(e)}),V=l(async()=>{let e=w.current;if(e.starting||e.confirming||e.cancelling||x.current!==`idle`||a&&!a())return;e.starting=!0,f(!0);let t=++T.current;P(),m(``),g(0),s(`recording`),x.current=`recording`,F();try{if(await L.start(),T.current!==t||x.current!==`recording`)return;f(!1),j(),await k.current?.restartStream().catch(e=>{T.current===t&&M(e)})}catch(e){if(T.current!==t)return;await L.stop().catch(()=>void 0),A(),s(`idle`),x.current=`idle`,M(e)}finally{T.current===t&&f(!1),e.starting=!1}}),H=l(async()=>{let e=w.current;if(!e.cancelling&&(x.current===`recording`||x.current===`uploading`)){e.cancelling=!0,f(!1),T.current+=1,A(),g(0),P(),s(`idle`),x.current=`idle`;try{k.current?.cancel()}catch{}F();try{await L.stop()}catch{}finally{e.cancelling=!1}}}),U=l(async()=>{let e=w.current;if(e.confirming||x.current!==`recording`)return null;e.confirming=!0,f(!1);let t=++T.current;P(),A();try{if(await L.stop(),T.current!==t)return null;s(`uploading`),x.current=`uploading`;let e=k.current?.getFinalSeq()??-1;if(e<0)return k.current?.cancel(),z(``);let n=await k.current.finish(e);return T.current===t?z(n.text):null}catch(e){return T.current===t&&B(e),null}finally{e.confirming=!1}}),W=l(async()=>{if(x.current!==`failed`||!k.current?.hasSegments())return null;P();let e=++T.current;s(`uploading`),x.current=`uploading`;try{k.current.resetStreamForReplay();let t=k.current.getFinalSeq(),n=await k.current.finish(t);return T.current===e?z(n.text):null}catch(t){return T.current===e&&B(t),null}}),G=l(()=>{if(x.current!==`failed`)return null;let e=S.current.trim();g(0),s(`idle`),x.current=`idle`,P();try{k.current?.cancel()}catch{}return F(),e?(E.current?.(e),e):null}),K=l(()=>{g(0),s(`idle`),x.current=`idle`,P(),F()});return(0,d.useEffect)(()=>n(()=>{x.current===`failed`?(T.current+=1,K()):H()}),[H,K]),(0,d.useEffect)(()=>{if(o!==`recording`||y!==`model_download_in_progress`)return;let e=setInterval(()=>{x.current!==`recording`||k.current?.getDictationId()||k.current?.restartStream().then(()=>{P()}).catch(e=>{M(e)})},3e3);return()=>clearInterval(e)},[o,y,P,M]),(0,d.useEffect)(()=>()=>{T.current+=1,A(),R.current().catch(()=>void 0),k.current?.cancel()},[A]),{status:o,isRecording:o===`recording`,isStarting:c,isProcessing:o===`uploading`,partialTranscript:p,volume:L.volume,duration:h,error:_,errorReason:y,startDictation:V,confirmDictation:U,cancelDictation:H,retryFailedDictation:W,acceptPartialTranscript:G,discardFailedDictation:K}}var ie=`app-region-no-drag transition-[opacity,transform] duration-150 ease-out data-[starting-style]:opacity-0 data-[starting-style]:scale-95 data-[ending-style]:opacity-0 data-[ending-style]:scale-95 z-50 max-h-[var(--available-height)] min-w-[8rem] origin-[var(--transform-origin)] overflow-visible rounded-xl p-1 shadow-[inset_0_1px_0_0_rgba(255,255,255,0.8),inset_0_0_0_1px_rgba(0,0,0,0.04),0_0_0_1px_rgba(0,0,0,0.10),0_1px_2px_-0.5px_rgba(0,0,0,0.08),0_4px_8px_-2px_rgba(0,0,0,0.08),0_12px_20px_-4px_rgba(0,0,0,0.08)] dark:shadow-[inset_0_1px_0_0_rgba(255,255,255,0.12),inset_0_0_0_1px_rgba(255,255,255,0.08),0_0_0_1px_rgba(0,0,0,0.36),0_1px_1px_-0.5px_rgba(0,0,0,0.22),0_3px_3px_-1.5px_rgba(0,0,0,0.20),0_6px_6px_-3px_rgba(0,0,0,0.16)]`,ae=`data-[highlighted]:bg-interactive-hover hover:bg-interactive-hover active:bg-interactive-active data-[variant=destructive]:text-destructive data-[variant=destructive]:hover:bg-destructive/10 dark:data-[variant=destructive]:hover:bg-destructive/20 data-[variant=destructive]:hover:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 typography-ui-label outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5`,oe=`data-[highlighted]:bg-interactive-hover hover:bg-interactive-hover active:bg-interactive-active [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-pointer items-center gap-2 rounded-lg px-2 py-1 typography-ui-label outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-3.5`,se=`bg-border -mx-1 my-0.5 h-px`;export{re as a,R as c,x as d,b as f,p as h,oe as i,I as l,f as m,ie as n,J as o,v as p,se as r,L as s,ae as t,y as u};
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{pt as t}from"./persistence-CoWdsn8M.js";import{it as n,nt as r,rt as i}from"./vendor-base-ui-CdzJ6My_.js";import{n as a}from"./vendor-react-BP2cRVqX.js";import{r as o}from"./button-BnPjweDW.js";import{st as s}from"./useMobileNavigationStore-BaxH-P85.js";import{r as c,t as l}from"./Icon-De3bTfBD.js";var u=32,d=(e,t)=>{let n=c[e];return typeof n!=`string`||n.length===0?null:`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${t}" stroke-width="${l}" stroke-linecap="round" stroke-linejoin="round">${n}</svg>`},f=(e,t)=>{let n=d(e,t);return!n||typeof document>`u`?Promise.resolve(null):new Promise(e=>{let t=new Image;t.decoding=`async`,t.onload=()=>{try{let n=document.createElement(`canvas`);n.width=u,n.height=u;let r=n.getContext(`2d`);if(!r){e(null);return}r.clearRect(0,0,u,u),r.drawImage(t,0,0,u,u);let i=n.toDataURL(`image/png`),a=i.indexOf(`,`);e(a>=0?i.slice(a+1):null)}catch{e(null)}},t.onerror=()=>e(null),t.src=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(n)}`})},p=(e,n)=>{if(!e.includes(`/`)||n.size===0)return[];let r=RegExp(`(^|\\s)/(${t})?([A-Za-z0-9][A-Za-z0-9_-]*)(?=$|\\s)`,`g`),i=[],a;for(;(a=r.exec(e))!==null;){let e=a[3]??``;if(!n.has(e.toLowerCase()))continue;let t=a[2]??``,r=a.index+(a[1]?.length??0);i.push({start:r,end:r+1+t.length+e.length,name:e,hasSlot:t.length>0})}return i},m=(e,n,r=e.length)=>{let i=p(e,n).filter(e=>!e.hasSlot);if(i.length===0)return null;let a=e,o=r;for(let e=i.length-1;e>=0;--e){let n=i[e].start+1;a=`${a.slice(0,n)}${t}${a.slice(n)}`,o>n&&(o+=t.length)}return a===e?null:{text:a,caret:o}},h=e=>e.startsWith(t)?e.slice(t.length):e,g=e=>{if(e.inputMode===`shell`)return null;let t=e.text,n=Math.max(0,Math.min(e.cursor,t.length));if(t.startsWith(`/`)){let e=t.indexOf(` `),r=t.indexOf(`
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{pt as t}from"./persistence-DUPZl7Oy.js";import{it as n,nt as r,rt as i}from"./vendor-base-ui-CdzJ6My_.js";import{n as a}from"./vendor-react-BP2cRVqX.js";import{r as o}from"./button-Dcg95USu.js";import{st as s}from"./useMobileNavigationStore-DdwNbT69.js";import{r as c,t as l}from"./Icon-DG553vVG.js";var u=32,d=(e,t)=>{let n=c[e];return typeof n!=`string`||n.length===0?null:`<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="${t}" stroke-width="${l}" stroke-linecap="round" stroke-linejoin="round">${n}</svg>`},f=(e,t)=>{let n=d(e,t);return!n||typeof document>`u`?Promise.resolve(null):new Promise(e=>{let t=new Image;t.decoding=`async`,t.onload=()=>{try{let n=document.createElement(`canvas`);n.width=u,n.height=u;let r=n.getContext(`2d`);if(!r){e(null);return}r.clearRect(0,0,u,u),r.drawImage(t,0,0,u,u);let i=n.toDataURL(`image/png`),a=i.indexOf(`,`);e(a>=0?i.slice(a+1):null)}catch{e(null)}},t.onerror=()=>e(null),t.src=`data:image/svg+xml;charset=utf-8,${encodeURIComponent(n)}`})},p=(e,n)=>{if(!e.includes(`/`)||n.size===0)return[];let r=RegExp(`(^|\\s)/(${t})?([A-Za-z0-9][A-Za-z0-9_-]*)(?=$|\\s)`,`g`),i=[],a;for(;(a=r.exec(e))!==null;){let e=a[3]??``;if(!n.has(e.toLowerCase()))continue;let t=a[2]??``,r=a.index+(a[1]?.length??0);i.push({start:r,end:r+1+t.length+e.length,name:e,hasSlot:t.length>0})}return i},m=(e,n,r=e.length)=>{let i=p(e,n).filter(e=>!e.hasSlot);if(i.length===0)return null;let a=e,o=r;for(let e=i.length-1;e>=0;--e){let n=i[e].start+1;a=`${a.slice(0,n)}${t}${a.slice(n)}`,o>n&&(o+=t.length)}return a===e?null:{text:a,caret:o}},h=e=>e.startsWith(t)?e.slice(t.length):e,g=e=>{if(e.inputMode===`shell`)return null;let t=e.text,n=Math.max(0,Math.min(e.cursor,t.length));if(t.startsWith(`/`)){let e=t.indexOf(` `),r=t.indexOf(`
2
2
  `),i=Math.min(e===-1?t.length:e,r===-1?t.length:r);if(n<=i&&e===-1)return{kind:`slash-command`,query:h(t.substring(1,i)),tokenStart:0,tokenEnd:i}}let r=t.substring(0,n),i=s({value:t,cursorPosition:n,inputSource:e.mentionInputSource??`manual`,insertedText:e.insertedText});return i===null?null:{kind:`mention`,query:i,tokenStart:r.lastIndexOf(`@`),tokenEnd:n}},_=e=>e===`mention`?`@`:`/`,v=(e,t,n)=>{if(n&&n.tokenStart>=0&&n.tokenEnd>=n.tokenStart&&n.tokenEnd<=e.length&&e.startsWith(_(n.kind),n.tokenStart))return{start:n.tokenStart,end:n.tokenEnd};let r=g({text:e,cursor:t});return r?{start:r.tokenStart,end:r.tokenEnd}:null},y=e(n(),1),b=a(),x=e(r(),1),S=`absolute z-[100] min-w-0 w-full bottom-full mb-2 left-0 flex flex-col rounded-xl`,C=`pointer-events-auto absolute z-[100] min-w-0 flex flex-col rounded-xl`;function w(e,t){return o(e?C:S,`oc-mobile-overlay-surface oc-mobile-overlay-surface--translucent oc-composer-autocomplete-surface`,t)}function T(e,t){return e?`oc-composer-autocomplete-row`:o(`mx-1.5 hover:bg-[color-mix(in_srgb,var(--interactive-selection)_40%,transparent)]`,t&&`bg-[color-mix(in_srgb,var(--interactive-selection)_40%,transparent)]`)}var E=.4,D=e=>{let t=e.gap??8,n=Math.min(e.composerTop-t,e.visibleBottom-t);return{left:e.composerLeft,width:e.composerWidth,bottom:Math.max(0,e.fixedContainingBottom-n),maxHeight:O({popupBottom:n,boundaryTop:e.boundaryTop,viewportHeight:e.viewportHeight,gap:t})}},O=e=>{let t=e.gap??8,n=Math.max(0,e.popupBottom-e.boundaryTop-t),r=e.viewportHeight*E,i=Math.floor(Math.min(n,r));return n>=120?Math.min(n,Math.max(120,i)):i},k=(e,t=0)=>{let n=e.closest(`main`);if(!n)return null;let r=(e.closest(`.mobile-chat-screen__content`)?.parentElement??n.parentElement?.closest(`main`)??n).querySelector(`:scope > .oc-mobile-detail-navigation`)?.getBoundingClientRect().bottom,i=n.getBoundingClientRect().top;return Math.max(r===void 0?i:Math.max(r,i),t)},A=(e,t)=>{let n=(0,b.c)(5),[r,i]=y.useState(void 0),a;n[0]!==t||n[1]!==e?(a=()=>{if(!t){i(void 0);return}let n=0,r=0,a=()=>{let t=e.current?.parentElement;if(!t)return;let n=t.getBoundingClientRect(),r=window.visualViewport,a=r?.offsetTop??0,o=r?.height??window.innerHeight,s=window.innerHeight,c=a+o,l=k(t,a)??a,u=D({composerTop:n.top,composerLeft:n.left,composerWidth:n.width,fixedContainingBottom:s,visibleBottom:c,boundaryTop:l,viewportHeight:o});i(e=>e&&e.left===u.left&&e.width===u.width&&e.bottom===u.bottom&&e.maxHeight===u.maxHeight?e:u)},o=()=>{a(),n&&window.cancelAnimationFrame(n),r&&window.clearTimeout(r),n=window.requestAnimationFrame(()=>{a(),r=window.setTimeout(a,220)})};return a(),window.addEventListener(`resize`,a),window.addEventListener(`oc:keyboard-settled`,o),window.addEventListener(`oc:keyboard-anim`,o),window.visualViewport?.addEventListener(`resize`,a),window.visualViewport?.addEventListener(`scroll`,a),()=>{n&&window.cancelAnimationFrame(n),r&&window.clearTimeout(r),window.removeEventListener(`resize`,a),window.removeEventListener(`oc:keyboard-settled`,o),window.removeEventListener(`oc:keyboard-anim`,o),window.visualViewport?.removeEventListener(`resize`,a),window.visualViewport?.removeEventListener(`scroll`,a)}},n[0]=t,n[1]=e,n[2]=a):a=n[2];let o;return n[3]===t?o=n[4]:(o=[t],n[3]=t,n[4]=o),y.useLayoutEffect(a,o),t?r:void 0},j=i(),M=y.forwardRef((e,t)=>{let n=(0,b.c)(24),{isMobile:r,className:i,style:a,children:o}=e,s=y.useRef(null),c=A(s,r),l=typeof document<`u`?document.body:null;if(!r){let e;n[0]===i?e=n[1]:(e=w(!1,i),n[0]=i,n[1]=e);let r;return n[2]!==o||n[3]!==t||n[4]!==a||n[5]!==e?(r=(0,j.jsx)(`div`,{ref:t,className:e,style:a,children:o}),n[2]=o,n[3]=t,n[4]=a,n[5]=e,n[6]=r):r=n[6],r}let u;n[7]===i?u=n[8]:(u=w(!0,i),n[7]=i,n[8]=u);let d;n[9]===c?d=n[10]:(d=c?{left:c.left,width:c.width,bottom:c.bottom,maxHeight:c.maxHeight,overflow:`hidden`}:{visibility:`hidden`},n[9]=c,n[10]=d);let f;n[11]!==a||n[12]!==d?(f={...a,...d},n[11]=a,n[12]=d,n[13]=f):f=n[13];let p;n[14]!==o||n[15]!==t||n[16]!==u||n[17]!==f?(p=(0,j.jsx)(`div`,{className:`pointer-events-none fixed inset-0 z-[100]`,children:(0,j.jsx)(`div`,{ref:t,className:u,style:f,children:o})}),n[14]=o,n[15]=t,n[16]=u,n[17]=f,n[18]=p):p=n[18];let m=p,h;n[19]===Symbol.for(`react.memo_cache_sentinel`)?(h=(0,j.jsx)(`span`,{ref:s,className:`hidden`,"aria-hidden":!0}),n[19]=h):h=n[19];let g;n[20]===m?g=n[21]:(g=l?(0,x.createPortal)(m,l):m,n[20]=m,n[21]=g);let _;return n[22]===g?_=n[23]:(_=(0,j.jsxs)(j.Fragment,{children:[h,g]}),n[22]=g,n[23]=_),_});M.displayName=`ComposerAutocompleteLayer`;var N=()=>{let e=null,t=!1,n=!1;return{pointerDown:(n,r)=>{e={x:n,y:r},t=!1},pointerMove:(n,r)=>{e&&Math.hypot(n-e.x,r-e.y)>6&&(t=!0)},pointerCancel:()=>{e=null,t=!1},pointerUp:r=>{if(!e)return!1;let i=!t;return e=null,t=!1,i?(n=!0,r(),!0):(n=!0,!1)},click:e=>n?(n=!1,!1):(e(),!0)}};export{g as a,f as c,v as i,M as n,m as o,T as r,h as s,N as t};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./runtime-switch-Ck0YPsR7.js";import{h as n,m as r}from"./persistence-CoWdsn8M.js";import{it as i}from"./vendor-base-ui-CdzJ6My_.js";import{n as a}from"./vendor-react-BP2cRVqX.js";import{s as o}from"./vendor-tanstack-react-query-CdqCAt40.js";import{n as s}from"./useRuntimeAPIs-Cx8S1HLz.js";var c=a(),l=e(i(),1),u=e=>e,d=(e,r=t())=>n.files.content(e.scopeDirectory,e.path,u(e.options),r),f=(e,r,i=t())=>({queryKey:n.files.directory(r.scopeDirectory,r.directory,r.respectGitignore,i),queryFn:async()=>{if(!r.directory)throw Error(`A directory is required to list files`);return r.respectGitignore===void 0?e.listDirectory(r.directory):e.listDirectory(r.directory,{respectGitignore:r.respectGitignore})}}),p=(e,r,i=t())=>({queryKey:n.files.search(r.directory,r.query,r.maxResults,r.includeHidden,r.respectGitignore,i),queryFn:async()=>{if(!r.directory)throw Error(`A directory is required to search files`);let t={directory:r.directory,query:r.query.trim(),maxResults:r.maxResults,...r.includeHidden===void 0?{}:{includeHidden:r.includeHidden},...r.respectGitignore===void 0?{}:{respectGitignore:r.respectGitignore}};return e.search(t)}}),m=(e,n,r=t())=>({queryKey:d(n,r),queryFn:async()=>{if(!n.path)throw Error(`A file path is required to read file content`);if(!e.readFile)throw Error(`File content reads are unavailable in this runtime`);return(await(n.options===void 0?e.readFile(n.path):e.readFile(n.path,n.options))).content}}),h=(e,t,n,r)=>{e.setQueryData(d(t,n),r)},g=(e,r,i=t())=>({queryKey:n.files.stat(r.scopeDirectory,r.path,u(r.options),i),queryFn:async()=>{if(!r.path)throw Error(`A file path is required to read file status`);if(!e.statFile)throw Error(`File status reads are unavailable in this runtime`);return r.options===void 0?e.statFile(r.path):e.statFile(r.path,r.options)}}),_=(e,n)=>{let r=(0,c.c)(9),i;r[0]===n?i=r[1]:(i=n===void 0?{}:n,r[0]=n,r[1]=i);let a=i,{files:l}=s(),u,d;if(r[2]!==l||r[3]!==e){let n=t();d=o,u=f(l,e,n),r[2]=l,r[3]=e,r[4]=u,r[5]=d}else u=r[4],d=r[5];let p;return r[6]!==a||r[7]!==u?(p={...u,...a},r[6]=a,r[7]=u,r[8]=p):p=r[8],d(p)},v=(e,n)=>{let r=(0,c.c)(9),i;r[0]===n?i=r[1]:(i=n===void 0?{}:n,r[0]=n,r[1]=i);let a=i,{files:l}=s(),u,d;if(r[2]!==l||r[3]!==e){let n=t();d=o,u=p(l,e,n),r[2]=l,r[3]=e,r[4]=u,r[5]=d}else u=r[4],d=r[5];let f;return r[6]!==a||r[7]!==u?(f={...u,...a},r[6]=a,r[7]=u,r[8]=f):f=r[8],d(f)},y=(e,n)=>{let r=(0,c.c)(9),i;r[0]===n?i=r[1]:(i=n===void 0?{}:n,r[0]=n,r[1]=i);let a=i,{files:l}=s(),u,d;if(r[2]!==l||r[3]!==e){let n=t();d=o,u=m(l,e,n),r[2]=l,r[3]=e,r[4]=u,r[5]=d}else u=r[4],d=r[5];let f;return r[6]!==a||r[7]!==u?(f={...u,...a},r[6]=a,r[7]=u,r[8]=f):f=r[8],d(f)},b=2e3,x=(e,n)=>{let i=(0,c.c)(19),a;i[0]===n?a=i[1]:(a=n===void 0?{}:n,i[0]=n,i[1]=a);let u=a,{files:f}=s(),p,m,h,_;i[2]!==f||i[3]!==e||i[4]!==u.enabled?(_=t(),p=!!(u.enabled&&e.path&&f.statFile),h=o,m=g(f,e,_),i[2]=f,i[3]=e,i[4]=u.enabled,i[5]=p,i[6]=m,i[7]=h,i[8]=_):(p=i[5],m=i[6],h=i[7],_=i[8]);let v=u.intervalMs??b,y;i[9]!==p||i[10]!==m||i[11]!==v?(y={...m,enabled:p,refetchInterval:v,refetchIntervalInBackground:!1,staleTime:0},i[9]=p,i[10]=m,i[11]=v,i[12]=y):y=i[12];let x=h(y),S=l.useRef(null),C=l.useRef(null),w;i[13]!==p||i[14]!==e||i[15]!==u.client||i[16]!==x||i[17]!==_?(w=()=>{let t=x.data;if(!p||!t)return;S.current!==e.path&&(S.current=e.path??null,C.current=null);let n=`${t.size}:${t.mtimeMs??``}`,i=C.current;C.current=n,i!==null&&i!==n&&(u.client??r).invalidateQueries({queryKey:d(e,_)})},i[13]=p,i[14]=e,i[15]=u.client,i[16]=x,i[17]=_,i[18]=w):w=i[18],l.useEffect(w)};export{_ as a,y as i,g as n,v as o,h as r,x as s,d as t};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t}from"./runtime-switch-3ad3yzM7.js";import{h as n,m as r}from"./persistence-DUPZl7Oy.js";import{it as i}from"./vendor-base-ui-CdzJ6My_.js";import{n as a}from"./vendor-react-BP2cRVqX.js";import{s as o}from"./vendor-tanstack-react-query-CdqCAt40.js";import{n as s}from"./useRuntimeAPIs-Cx8S1HLz.js";var c=a(),l=e(i(),1),u=e=>e,d=(e,r=t())=>n.files.content(e.scopeDirectory,e.path,u(e.options),r),f=(e,r,i=t())=>({queryKey:n.files.directory(r.scopeDirectory,r.directory,r.respectGitignore,i),queryFn:async()=>{if(!r.directory)throw Error(`A directory is required to list files`);return r.respectGitignore===void 0?e.listDirectory(r.directory):e.listDirectory(r.directory,{respectGitignore:r.respectGitignore})}}),p=(e,r,i=t())=>({queryKey:n.files.search(r.directory,r.query,r.maxResults,r.includeHidden,r.respectGitignore,i),queryFn:async()=>{if(!r.directory)throw Error(`A directory is required to search files`);let t={directory:r.directory,query:r.query.trim(),maxResults:r.maxResults,...r.includeHidden===void 0?{}:{includeHidden:r.includeHidden},...r.respectGitignore===void 0?{}:{respectGitignore:r.respectGitignore}};return e.search(t)}}),m=(e,n,r=t())=>({queryKey:d(n,r),queryFn:async()=>{if(!n.path)throw Error(`A file path is required to read file content`);if(!e.readFile)throw Error(`File content reads are unavailable in this runtime`);return(await(n.options===void 0?e.readFile(n.path):e.readFile(n.path,n.options))).content}}),h=(e,t,n,r)=>{e.setQueryData(d(t,n),r)},g=(e,r,i=t())=>({queryKey:n.files.stat(r.scopeDirectory,r.path,u(r.options),i),queryFn:async()=>{if(!r.path)throw Error(`A file path is required to read file status`);if(!e.statFile)throw Error(`File status reads are unavailable in this runtime`);return r.options===void 0?e.statFile(r.path):e.statFile(r.path,r.options)}}),_=(e,n)=>{let r=(0,c.c)(9),i;r[0]===n?i=r[1]:(i=n===void 0?{}:n,r[0]=n,r[1]=i);let a=i,{files:l}=s(),u,d;if(r[2]!==l||r[3]!==e){let n=t();d=o,u=f(l,e,n),r[2]=l,r[3]=e,r[4]=u,r[5]=d}else u=r[4],d=r[5];let p;return r[6]!==a||r[7]!==u?(p={...u,...a},r[6]=a,r[7]=u,r[8]=p):p=r[8],d(p)},v=(e,n)=>{let r=(0,c.c)(9),i;r[0]===n?i=r[1]:(i=n===void 0?{}:n,r[0]=n,r[1]=i);let a=i,{files:l}=s(),u,d;if(r[2]!==l||r[3]!==e){let n=t();d=o,u=p(l,e,n),r[2]=l,r[3]=e,r[4]=u,r[5]=d}else u=r[4],d=r[5];let f;return r[6]!==a||r[7]!==u?(f={...u,...a},r[6]=a,r[7]=u,r[8]=f):f=r[8],d(f)},y=(e,n)=>{let r=(0,c.c)(9),i;r[0]===n?i=r[1]:(i=n===void 0?{}:n,r[0]=n,r[1]=i);let a=i,{files:l}=s(),u,d;if(r[2]!==l||r[3]!==e){let n=t();d=o,u=m(l,e,n),r[2]=l,r[3]=e,r[4]=u,r[5]=d}else u=r[4],d=r[5];let f;return r[6]!==a||r[7]!==u?(f={...u,...a},r[6]=a,r[7]=u,r[8]=f):f=r[8],d(f)},b=2e3,x=(e,n)=>{let i=(0,c.c)(19),a;i[0]===n?a=i[1]:(a=n===void 0?{}:n,i[0]=n,i[1]=a);let u=a,{files:f}=s(),p,m,h,_;i[2]!==f||i[3]!==e||i[4]!==u.enabled?(_=t(),p=!!(u.enabled&&e.path&&f.statFile),h=o,m=g(f,e,_),i[2]=f,i[3]=e,i[4]=u.enabled,i[5]=p,i[6]=m,i[7]=h,i[8]=_):(p=i[5],m=i[6],h=i[7],_=i[8]);let v=u.intervalMs??b,y;i[9]!==p||i[10]!==m||i[11]!==v?(y={...m,enabled:p,refetchInterval:v,refetchIntervalInBackground:!1,staleTime:0},i[9]=p,i[10]=m,i[11]=v,i[12]=y):y=i[12];let x=h(y),S=l.useRef(null),C=l.useRef(null),w;i[13]!==p||i[14]!==e||i[15]!==u.client||i[16]!==x||i[17]!==_?(w=()=>{let t=x.data;if(!p||!t)return;S.current!==e.path&&(S.current=e.path??null,C.current=null);let n=`${t.size}:${t.mtimeMs??``}`,i=C.current;C.current=n,i!==null&&i!==n&&(u.client??r).invalidateQueries({queryKey:d(e,_)})},i[13]=p,i[14]=e,i[15]=u.client,i[16]=x,i[17]=_,i[18]=w):w=i[18],l.useEffect(w)};export{_ as a,y as i,g as n,v as o,h as r,x as s,d as t};
@@ -1,4 +1,4 @@
1
- import{n as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,n}from"./runtime-switch-Ck0YPsR7.js";import{n as r}from"./runtime-fetch-DJVW43Cw.js";import{Mn as i}from"./persistence-CoWdsn8M.js";import{$ as a,A as o,C as s,F as c,G as l,J as u,K as d,L as f,M as p,N as m,Nt as ee,O as te,Q as ne,R as re,S as ie,T as ae,X as oe,Y as h,Z as se,_ as ce,at as le,b as ue,c as de,d as fe,gt as pe,h as me,ht as he,it as ge,lt as _e,m as ve,nt as ye,o as be,pt as xe,rt as Se,u as Ce,ut as we,v as Te,vt as Ee,w as De,x as Oe,xt as ke,yt as Ae,z as je}from"./platform-Cl17ZOYo.js";import{ba as g,d as _,fa as v,l as Me}from"./useMobileNavigationStore-BaxH-P85.js";var Ne=e({COMMIT_DIFF_FILE_LIMIT:()=>30,COMMIT_DIFF_TOTAL_CHAR_LIMIT:()=>j,SESSION_GENERATE_TIMEOUT_MS:()=>M,applyGitStash:()=>K,checkIsGitRepository:()=>x,checkoutCommit:()=>$e,cherryPick:()=>et,collectSelectedFileDiffs:()=>N,countGitStashFiles:()=>W,createBranch:()=>Y,createGitIdentity:()=>Q,createGitWorktree:()=>B,deleteGitIdentity:()=>Je,deleteGitWorktree:()=>V,deleteRemoteBranch:()=>A,discoverGitCredentials:()=>Ye,discoverGitRepositories:()=>S,dropGitStash:()=>J,generateCommitMessage:()=>F,getCommitFileDiff:()=>X,getConflictDetails:()=>$,getGitBranches:()=>k,getGitIdentities:()=>Z,getGitStatus:()=>C,getGitWorktreeBootstrapStatus:()=>R,getGlobalGitIdentity:()=>Xe,git:()=>H,listGitStashes:()=>U,listGitWorktrees:()=>I,merge:()=>Qe,popGitStash:()=>q,previewGitWorktree:()=>z,rebase:()=>Ze,resetToCommit:()=>nt,resolveGitPrimaryRoot:()=>w,resolveGitTopLevel:()=>T,revertCommit:()=>tt,stageGitFile:()=>E,stageGitFiles:()=>D,stashGitChanges:()=>G,unstageGitFile:()=>Pe,unstageGitFiles:()=>O,updateGitIdentity:()=>qe,validateGitWorktree:()=>L}),y=()=>i()?.git??null,b=e=>{let t=e.trim(),n=(t.match(/```(?:json)?\s*([\s\S]*?)```/i)?.[1]??t).trim(),r=[n.indexOf(`{`)].filter(e=>e>=0);for(let e of r)for(let t=n.length;t>e;--t)if(n[t-1]===`}`)try{let r=JSON.parse(n.slice(e,t));if(r&&typeof r==`object`&&!Array.isArray(r))return r}catch{}return null};async function x(e){let t=y();return t?t.checkIsGitRepository(e):de(e)}async function S(e){return De(e)}async function C(e,t){let n=y();return n?n.getGitStatus(e,t):f(e,t)}async function w(e){return(await Se(e)).root}async function T(e){return(await ge(e)).root}async function E(e,t){let n=y();return n?.stageGitFile?n.stageGitFile(e,t):_e(e,t)}async function D(e,t){let n=y();return n?.stageGitFiles?n.stageGitFiles(e,t):we(e,t)}async function Pe(e,t){let n=y();return n?.unstageGitFile?n.unstageGitFile(e,t):he(e,t)}async function O(e,t){let n=y();return n?.unstageGitFiles?n.unstageGitFiles(e,t):pe(e,t)}async function k(e,t){let n=y();if(t?.signal?.throwIfAborted(),n){let r=await n.getGitBranches(e,t);return t?.signal?.throwIfAborted(),r}return p(e,t)}async function A(e,t){let n=y();return n?n.deleteRemoteBranch(e,t):ie(e,t)}var j=12e4,M=9e4,Fe=[`This is an auxiliary structured generation request (git copy).`,`Use the active session context plus the materials below.`,`Answer with the required JSON only.`,`Do not call any tools and do not take any actions.`,`Model and instructions follow the session.generate session contract.`].join(` `),Ie=`Select an active session for generation. session.generate uses that session model contract and does not mutate chat history.`,Le=`No default provider or model configured. Please select a provider and model in settings first.`,Re=`Runtime changed during session.generate`,ze=`session.generate returned empty text`,Be=`session.generate returned invalid structured output`,Ve=e=>{let t=[`Diff budget: included ${e.includedFileCount} of ${e.selectedFileCount} selected files`,`fileLimit=${e.fileLimit}`,`charLimit=${e.charLimit}`,`truncatedByCharLimit=${e.truncatedByCharLimit?`yes`:`no`}`,`omittedFiles=${e.omittedFileCount}`],n=e.omittedFileCount>0||e.truncatedByCharLimit?` Materials are partial under this budget — do not invent diffs for omitted or truncated files; base the message only on provided material.`:` Materials cover the full selected set within the budget.`;return`${t.join(`; `)}.${n}`};async function N(e,t){let n=t.length,r=t.slice(0,30),i=await Promise.all(r.map(async t=>{try{let[n,r]=await Promise.all([m(e,{path:t,staged:!0}).catch(()=>null),m(e,{path:t,staged:!1}).catch(()=>null)]);return[n?.diff,r?.diff].filter(e=>typeof e==`string`&&e.trim().length>0).join(`
1
+ import{n as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,n}from"./runtime-switch-3ad3yzM7.js";import{n as r}from"./runtime-fetch-QCWYlAx0.js";import{Mn as i}from"./persistence-DUPZl7Oy.js";import{$ as a,A as o,C as s,F as c,G as l,J as u,K as d,L as f,M as p,N as m,Nt as ee,O as te,Q as ne,R as re,S as ie,T as ae,X as oe,Y as h,Z as se,_ as ce,at as le,b as ue,c as de,d as fe,gt as pe,h as me,ht as he,it as ge,lt as _e,m as ve,nt as ye,o as be,pt as xe,rt as Se,u as Ce,ut as we,v as Te,vt as Ee,w as De,x as Oe,xt as ke,yt as Ae,z as je}from"./platform-B5uQ25kN.js";import{ba as g,d as _,fa as v,l as Me}from"./useMobileNavigationStore-DdwNbT69.js";var Ne=e({COMMIT_DIFF_FILE_LIMIT:()=>30,COMMIT_DIFF_TOTAL_CHAR_LIMIT:()=>j,SESSION_GENERATE_TIMEOUT_MS:()=>M,applyGitStash:()=>K,checkIsGitRepository:()=>x,checkoutCommit:()=>$e,cherryPick:()=>et,collectSelectedFileDiffs:()=>N,countGitStashFiles:()=>W,createBranch:()=>Y,createGitIdentity:()=>Q,createGitWorktree:()=>B,deleteGitIdentity:()=>Je,deleteGitWorktree:()=>V,deleteRemoteBranch:()=>A,discoverGitCredentials:()=>Ye,discoverGitRepositories:()=>S,dropGitStash:()=>J,generateCommitMessage:()=>F,getCommitFileDiff:()=>X,getConflictDetails:()=>$,getGitBranches:()=>k,getGitIdentities:()=>Z,getGitStatus:()=>C,getGitWorktreeBootstrapStatus:()=>R,getGlobalGitIdentity:()=>Xe,git:()=>H,listGitStashes:()=>U,listGitWorktrees:()=>I,merge:()=>Qe,popGitStash:()=>q,previewGitWorktree:()=>z,rebase:()=>Ze,resetToCommit:()=>nt,resolveGitPrimaryRoot:()=>w,resolveGitTopLevel:()=>T,revertCommit:()=>tt,stageGitFile:()=>E,stageGitFiles:()=>D,stashGitChanges:()=>G,unstageGitFile:()=>Pe,unstageGitFiles:()=>O,updateGitIdentity:()=>qe,validateGitWorktree:()=>L}),y=()=>i()?.git??null,b=e=>{let t=e.trim(),n=(t.match(/```(?:json)?\s*([\s\S]*?)```/i)?.[1]??t).trim(),r=[n.indexOf(`{`)].filter(e=>e>=0);for(let e of r)for(let t=n.length;t>e;--t)if(n[t-1]===`}`)try{let r=JSON.parse(n.slice(e,t));if(r&&typeof r==`object`&&!Array.isArray(r))return r}catch{}return null};async function x(e){let t=y();return t?t.checkIsGitRepository(e):de(e)}async function S(e){return De(e)}async function C(e,t){let n=y();return n?n.getGitStatus(e,t):f(e,t)}async function w(e){return(await Se(e)).root}async function T(e){return(await ge(e)).root}async function E(e,t){let n=y();return n?.stageGitFile?n.stageGitFile(e,t):_e(e,t)}async function D(e,t){let n=y();return n?.stageGitFiles?n.stageGitFiles(e,t):we(e,t)}async function Pe(e,t){let n=y();return n?.unstageGitFile?n.unstageGitFile(e,t):he(e,t)}async function O(e,t){let n=y();return n?.unstageGitFiles?n.unstageGitFiles(e,t):pe(e,t)}async function k(e,t){let n=y();if(t?.signal?.throwIfAborted(),n){let r=await n.getGitBranches(e,t);return t?.signal?.throwIfAborted(),r}return p(e,t)}async function A(e,t){let n=y();return n?n.deleteRemoteBranch(e,t):ie(e,t)}var j=12e4,M=9e4,Fe=[`This is an auxiliary structured generation request (git copy).`,`Use the active session context plus the materials below.`,`Answer with the required JSON only.`,`Do not call any tools and do not take any actions.`,`Model and instructions follow the session.generate session contract.`].join(` `),Ie=`Select an active session for generation. session.generate uses that session model contract and does not mutate chat history.`,Le=`No default provider or model configured. Please select a provider and model in settings first.`,Re=`Runtime changed during session.generate`,ze=`session.generate returned empty text`,Be=`session.generate returned invalid structured output`,Ve=e=>{let t=[`Diff budget: included ${e.includedFileCount} of ${e.selectedFileCount} selected files`,`fileLimit=${e.fileLimit}`,`charLimit=${e.charLimit}`,`truncatedByCharLimit=${e.truncatedByCharLimit?`yes`:`no`}`,`omittedFiles=${e.omittedFileCount}`],n=e.omittedFileCount>0||e.truncatedByCharLimit?` Materials are partial under this budget — do not invent diffs for omitted or truncated files; base the message only on provided material.`:` Materials cover the full selected set within the budget.`;return`${t.join(`; `)}.${n}`};async function N(e,t){let n=t.length,r=t.slice(0,30),i=await Promise.all(r.map(async t=>{try{let[n,r]=await Promise.all([m(e,{path:t,staged:!0}).catch(()=>null),m(e,{path:t,staged:!1}).catch(()=>null)]);return[n?.diff,r?.diff].filter(e=>typeof e==`string`&&e.trim().length>0).join(`
2
2
  `)||`--- ${t} (no textual diff available)`}catch{return`--- ${t} (diff unavailable)`}})),a=``,o=0,s=!1;for(let e of i){let t=a?`
3
3
 
4
4
  `:``;if(a.length+t.length+e.length>12e4){a+=`