@openchambery/web 2.1.10-beta.9 → 2.1.10

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 (146) hide show
  1. package/dist/assets/{AgentAvatar-CSTBp5FT.js → AgentAvatar-VWQTTR4M.js} +1 -1
  2. package/dist/assets/AssistantView-pFHs1mFy.js +3 -0
  3. package/dist/assets/DiagramView-DvtLUBju.js +1 -0
  4. package/dist/assets/{FadeInOnReveal-C-zbv53H.js → FadeInOnReveal-fsguD-xX.js} +1 -1
  5. package/dist/assets/{Icon-DVF98Tje.js → Icon-CEQUcqTJ.js} +1 -1
  6. package/dist/assets/{ImageLoadingPlaceholder-CN33uB-A.js → ImageLoadingPlaceholder-Bel8eqgg.js} +1 -1
  7. package/dist/assets/{LoadingImage-BR82n0vB.js → LoadingImage-DjkSZxMq.js} +1 -1
  8. package/dist/assets/MarkdownRenderer-DMk_HgEW.js +2 -0
  9. package/dist/assets/MarkdownRendererImpl-BD3MLIXK.js +10 -0
  10. package/dist/assets/MarkstreamRendererImpl-Bmq_rlW8.js +3 -0
  11. package/dist/assets/MobileDetailNavigation-BEKXW98F.js +1 -0
  12. package/dist/assets/MobileShareBridge-7uwkwoDd.js +4 -0
  13. package/dist/assets/MobileTabPageHeader-Bv5dbFRY.js +2 -0
  14. package/dist/assets/{MultiRunWindow-DwypLkr8.js → MultiRunWindow-YPpInxnV.js} +1 -1
  15. package/dist/assets/OnboardingScreen-CQuSd1SL.js +1 -0
  16. package/dist/assets/{OverlayScrollbar-BY5HaNrb.js → OverlayScrollbar-DI271QYq.js} +1 -1
  17. package/dist/assets/{SettingsView-CFVnVldo.js → SettingsView-rMvVrvoc.js} +11 -11
  18. package/dist/assets/{SettingsWindow-BksF0iMD.js → SettingsWindow-Bu0pJmO4.js} +1 -1
  19. package/dist/assets/TerminalView-B7wbbWmJ.js +8 -0
  20. package/dist/assets/ToolOutputDialog-C7usOU7_.css +1 -0
  21. package/dist/assets/ToolOutputDialog-kGRZ3zBv.js +10 -0
  22. package/dist/assets/{appThemeRegistry-DmMTfBaK.js → appThemeRegistry-COjSA5s9.js} +1 -1
  23. package/dist/assets/assistant-attachment-cache-BWe8KqRS.js +1 -0
  24. package/dist/assets/{button-CWSs9Baz.js → button-9V3jJ3gG.js} +1 -1
  25. package/dist/assets/{collapsible-ngtoKADo.js → collapsible-Cx3lMy_W.js} +1 -1
  26. package/dist/assets/{desktopHosts-C0e7Nes2.js → desktopHosts-C4ejHJ9p.js} +1 -1
  27. package/dist/assets/desktopRelayRestore-UTCV51RC.js +1 -0
  28. package/dist/assets/{diagram-DmlTCkmV.js → diagram-Bpt5dSrL.js} +1 -1
  29. package/dist/assets/{dialog-l3LcLl96.js → dialog-Yxau54Tq.js} +1 -1
  30. package/dist/assets/dropdown-menu.styles-CtzReuqO.js +1 -0
  31. package/dist/assets/{es-ChfgOskU.js → es-DsJ_HQyU.js} +1 -1
  32. package/dist/assets/{fileMentionTouchSelection-Di65ReZH.js → fileMentionTouchSelection-Hibjg1ml.js} +1 -1
  33. package/dist/assets/{fr-DnKqN4E3.js → fr-Dfkjku77.js} +1 -1
  34. package/dist/assets/{gitApi-BviIuCdm.js → gitApi-HQKLs8JU.js} +3 -3
  35. package/dist/assets/image-loading-ClZBSNMo.js +1 -0
  36. package/dist/assets/{input-CALwaZEB.js → input-BqE6rFfR.js} +1 -1
  37. package/dist/assets/insertionBoundaries-I_znkRIX.js +1 -0
  38. package/dist/assets/{ja-DH-a_ThB.js → ja-C71g0jYh.js} +1 -1
  39. package/dist/assets/{ko-BXABOKd9.js → ko-32s8rv0M.js} +1 -1
  40. package/dist/assets/main-BwNzKZuT.js +169 -0
  41. package/dist/assets/main-DfS2IaSq.js +2 -0
  42. package/dist/assets/{markdownHeightCache-DXM_5jTe.js → markdownHeightCache-lTJfaoDe.js} +1 -1
  43. package/dist/assets/mcpQueries-MXNO55dw.js +1 -0
  44. package/dist/assets/miniChat-CMt8PqCU.js +2 -0
  45. package/dist/assets/mobile-BaUwTAK3.js +2 -0
  46. package/dist/assets/{mobileBackNavigation-DpZwGABf.js → mobileBackNavigation-DgrGA2Qw.js} +1 -1
  47. package/dist/assets/multirun-DN46tuiy.js +3 -0
  48. package/dist/assets/persistence-CAKBi4bp.js +3 -0
  49. package/dist/assets/{pl-D-KNROrB.js → pl-eAbyJFO9.js} +1 -1
  50. package/dist/assets/platform-C5jNCIbB.js +7 -0
  51. package/dist/assets/projectMeta-BV2S2dYM.js +1 -0
  52. package/dist/assets/{pt-BR-UDs5YUzv.js → pt-BR-nVxduPt0.js} +1 -1
  53. package/dist/assets/queryRuntime-DRiRiAgZ.js +1 -0
  54. package/dist/assets/renderElectronMiniChatApp-BOMvMWpo.js +2 -0
  55. package/dist/assets/renderMobileApp-BGP-Q03v.css +1 -0
  56. package/dist/assets/renderMobileApp-DX0VWU7B.js +28 -0
  57. package/dist/assets/runtime-file-download-CEzr1Pfg.js +1 -0
  58. package/dist/assets/runtime-file-resource-BUFMRmIF.js +2 -0
  59. package/dist/assets/runtimeConfig-BTc8J1kY.js +2 -0
  60. package/dist/assets/runtimeEndpointReset-BiSu_pxJ.js +149 -0
  61. package/dist/assets/{scheduledTaskNavigation-DQcLqQ52.js → scheduledTaskNavigation-j6F6n0ym.js} +1 -1
  62. package/dist/assets/sessionChangeSummary-Bz22Q8e1.js +1 -0
  63. package/dist/assets/{sessionLookup-HPWMV2x0.js → sessionLookup-5rpUSv3O.js} +1 -1
  64. package/dist/assets/{sortable-tabs-strip-BKHrDVrU.js → sortable-tabs-strip-DFi-Mck5.js} +1 -1
  65. package/dist/assets/speechSettingsQueries-C8efV361.js +4 -0
  66. package/dist/assets/src-DzBIReeh.css +2 -0
  67. package/dist/assets/{store-CG7Ytsg9.js → store-D4rR0svj.js} +2 -2
  68. package/dist/assets/terminalApi-B8arordk.js +1 -0
  69. package/dist/assets/{textarea-BgYhsDvJ.js → textarea-DoWm-pRV.js} +1 -1
  70. package/dist/assets/{tooltip-CV6dvLBp.js → tooltip-DWlA7PRY.js} +1 -1
  71. package/dist/assets/{uk-CkliYeRs.js → uk-DOvCFanR.js} +1 -1
  72. package/dist/assets/{url-nBOUbtV_.js → url-BD7mCWgV.js} +1 -1
  73. package/dist/assets/{useAppFontEffects-DQop9zYG.js → useAppFontEffects-DAI7VfQG.js} +51 -51
  74. package/dist/assets/{useDesktopWindowControlsLayout-DX2SytTz.js → useDesktopWindowControlsLayout-BjvIMnxi.js} +1 -1
  75. package/dist/assets/{useEffectiveDirectory-4JvgTR23.js → useEffectiveDirectory-CuXlnig5.js} +1 -1
  76. package/dist/assets/{useFontPreferences-DqEIKMEW.js → useFontPreferences-Ctm4A_2D.js} +1 -1
  77. package/dist/assets/useMobileNavigationStore-D47T6Oi2.js +417 -0
  78. package/dist/assets/{useWorkerHighlightedLines-ClBia5wg.js → useWorkerHighlightedLines-m2onDaI2.js} +1 -1
  79. package/dist/assets/{zh-CN-BH4APVTu.js → zh-CN-CuYFLeS4.js} +2 -2
  80. package/dist/assets/{zh-TW-BEi6Yf50.js → zh-TW-DKJIyd5A.js} +2 -2
  81. package/dist/index.html +13 -10
  82. package/dist/mini-chat.html +13 -10
  83. package/dist/mobile.html +13 -10
  84. package/package.json +1 -1
  85. package/server/lib/content-search/DOCUMENTATION.md +5 -1
  86. package/server/lib/content-search/runtime.test.js +6 -2
  87. package/server/lib/content-search/service.js +7 -2
  88. package/server/lib/content-search/service.test.js +20 -0
  89. package/server/lib/fs/DOCUMENTATION.md +4 -1
  90. package/server/lib/fs/image-fingerprint.d.ts +2 -0
  91. package/server/lib/fs/image-fingerprint.js +43 -0
  92. package/server/lib/fs/image-fingerprint.test.js +54 -0
  93. package/server/lib/fs/raw-video.test.js +34 -0
  94. package/server/lib/fs/routes.js +16 -6
  95. package/server/lib/opencode/proxy.js +2 -1
  96. package/server/lib/opencode/proxy.test.js +13 -0
  97. package/server/lib/quota/DOCUMENTATION.md +2 -0
  98. package/server/lib/quota/magpie.js +3 -0
  99. package/server/lib/quota/magpie.test.js +14 -0
  100. package/server/lib/relay/relay-server.e2e.test.ts +8 -0
  101. package/server/lib/session-turn-pages/DOCUMENTATION.md +8 -0
  102. package/server/lib/session-turn-pages/native-payload.d.ts +2 -0
  103. package/server/lib/session-turn-pages/native-payload.js +38 -0
  104. package/server/lib/session-turn-pages/native-payload.test.js +34 -0
  105. package/server/lib/session-turn-pages/routes.js +2 -1
  106. package/server/lib/session-turn-pages/routes.test.js +18 -0
  107. package/dist/assets/AssistantView-CAI5-ej0.js +0 -3
  108. package/dist/assets/DiagramView-DqD04eBO.js +0 -1
  109. package/dist/assets/MarkdownRenderer-B8veZLqW.js +0 -2
  110. package/dist/assets/MarkdownRendererImpl-CYxw9k71.js +0 -10
  111. package/dist/assets/MarkstreamRendererImpl-BMW-INrV.js +0 -3
  112. package/dist/assets/MobileDetailNavigation-BYfpLqAN.js +0 -1
  113. package/dist/assets/MobileShareBridge-BscgKH9V.js +0 -4
  114. package/dist/assets/MobileTabPageHeader-CJDOC6gh.js +0 -2
  115. package/dist/assets/OnboardingScreen-DnF9UT7Z.js +0 -1
  116. package/dist/assets/TerminalView-3Sscu2s5.js +0 -8
  117. package/dist/assets/ToolOutputDialog-DAVZmdoA.css +0 -1
  118. package/dist/assets/ToolOutputDialog-DmCqTQUZ.js +0 -10
  119. package/dist/assets/assistant-attachment-cache-CecNXB7z.js +0 -1
  120. package/dist/assets/desktopRelayRestore-DckkHKsi.js +0 -1
  121. package/dist/assets/dropdown-menu.styles-BNwZmBRp.js +0 -1
  122. package/dist/assets/fileQueries-DVpZC5ha.js +0 -1
  123. package/dist/assets/image-loading-DImQz00b.js +0 -1
  124. package/dist/assets/insertionBoundaries-lHP9w434.js +0 -1
  125. package/dist/assets/main-B-eYtL7p.js +0 -169
  126. package/dist/assets/main-Ct977h_n.js +0 -2
  127. package/dist/assets/mcpQueries-CiVCTf3i.js +0 -1
  128. package/dist/assets/miniChat-n3x5xJy1.js +0 -2
  129. package/dist/assets/mobile-jp5_jLeZ.js +0 -2
  130. package/dist/assets/multirun-CNDOrmMn.js +0 -3
  131. package/dist/assets/persistence-BKszKaoQ.js +0 -3
  132. package/dist/assets/platform-CgwxwfA4.js +0 -7
  133. package/dist/assets/projectMeta-DSNsY-ei.js +0 -1
  134. package/dist/assets/relay-image-stream-CqgxIcA5.js +0 -2
  135. package/dist/assets/renderElectronMiniChatApp-CgyVa3Ij.js +0 -2
  136. package/dist/assets/renderMobileApp-SQ7rPy0g.js +0 -28
  137. package/dist/assets/runtime-fetch-WgH0pROs.js +0 -1
  138. package/dist/assets/runtimeConfig-ChIQDmQG.js +0 -2
  139. package/dist/assets/runtimeEndpointReset-7FNMVMmY.js +0 -149
  140. package/dist/assets/sessionChangeSummary-CkC8jE6b.js +0 -1
  141. package/dist/assets/speechSettingsQueries-CmD0x6hE.js +0 -4
  142. package/dist/assets/src-Doy5O-1o.css +0 -2
  143. package/dist/assets/terminalApi-rxsMWL0o.js +0 -1
  144. package/dist/assets/useMobileNavigationStore-DjdScMT1.js +0 -417
  145. package/dist/assets/useRuntimeAPIs-Cx8S1HLz.js +0 -1
  146. package/dist/assets/vendor-legendapp-list-CNxU_ALy.js +0 -1
@@ -1 +0,0 @@
1
- import{p as e}from"./runtime-auth-BpCQ-dPr.js";import{f as t}from"./runtime-switch-CMiMO5Yj.js";import{n}from"./runtime-fetch-WgH0pROs.js";import{St as r}from"./platform-CgwxwfA4.js";var i=1,a=1,o=0,s=`/api/terminal/ws`,c=1200,l=250,u=2e4,d=5e3,f=`__openchamberTerminalTransportState`,p=new TextEncoder,m=new TextDecoder,h=e=>t().websocket(e),g=e=>{let t=p.encode(JSON.stringify(e)),n=new Uint8Array(t.length+1);return n[0]=i,n.set(t,1),n},_=e=>e?((e.transports??[]).includes(`ws`)||e.preferred===`ws`)&&typeof e.ws?.path==`string`&&e.ws.path.length>0:!1,v=e=>e.streamCapability?.ws?.path??e.inputCapability?.ws?.path??s,y=e=>{switch(e){case`SESSION_NOT_FOUND`:return Error(`Terminal session not found`);case`NOT_BOUND`:return Error(`Terminal session is not bound`);case`WRITE_FAIL`:return Error(`Failed to write to terminal`);case`RATE_LIMIT`:return Error(`Terminal websocket is rate limited`);case`BAD_FRAME`:return Error(`Terminal websocket protocol violation`);default:return Error(`Terminal websocket error`)}},b=class{socket=null;socketUrl=``;boundSessionId=null;requestedSessionId=null;openPromise=null;reconnectTimeout=null;keepaliveInterval=null;closed=!1;subscriptions=new Map;activeSubscriptionToken=null;replayCursorBySession=new Map;configure(e){if(e){if(this.socketUrl===e){this.closed=!1,this.isConnectedOrConnecting()||this.ensureConnected();return}this.socketUrl=e,this.closed=!1,this.resetConnection(),this.ensureConnected()}}subscribe(e,t,n,r){let i=Symbol(e),o={token:i,sessionId:e,onEvent:t,onError:n,maxRetries:r?.maxRetries??3,initialRetryDelay:r?.initialRetryDelay??1e3,maxRetryDelay:r?.maxRetryDelay??8e3,connectionTimeout:r?.connectionTimeout??1e4,retryCount:0,connected:!1,connectionTimeoutId:null};return this.subscriptions.set(i,o),this.activeSubscriptionToken=i,this.requestedSessionId=e,this.ensureConnected(),this.boundSessionId===e&&this.socket&&this.socket.readyState===a?(o.retryCount=0,o.connected=!0,o.onEvent({type:`connected`})):(this.boundSessionId=null,this.startConnectionTimeout(o),this.bindActiveSession()),()=>{if(this.clearConnectionTimeout(o),this.subscriptions.delete(i),this.activeSubscriptionToken===i&&(this.activeSubscriptionToken=null),this.hasSubscriptionForSession(e)||(this.boundSessionId===e&&(this.boundSessionId=null),this.requestedSessionId===e&&(this.requestedSessionId=null)),this.subscriptions.size===0){this.clearReconnectTimeout(),this.resetConnection();return}this.promoteActiveSubscription()}}async sendInput(e,t){if(!e||!t||this.closed||!this.socketUrl)return!1;let n=await this.getOpenSocket(c);if(!n||n.readyState!==a)return!1;try{return this.boundSessionId!==e&&(this.requestedSessionId=e,n.send(g({t:`b`,s:e,r:this.replayCursorBySession.get(e)??0,v:2}))),n.send(t),!0}catch{return this.handleSocketFailure(Error(`Terminal websocket send failed`)),!1}}unbindSession(e){e&&(this.boundSessionId===e&&(this.boundSessionId=null),this.requestedSessionId===e&&(this.requestedSessionId=null))}close(){this.closed=!0,this.clearReconnectTimeout();for(let e of this.subscriptions.values())this.clearConnectionTimeout(e);this.resetConnection(),this.socketUrl=``,this.subscriptions.clear(),this.activeSubscriptionToken=null,this.replayCursorBySession.clear()}prime(){this.closed||!this.socketUrl||this.isConnectedOrConnecting()||this.ensureConnected()}isConnectedOrConnecting(e){return this.closed||e&&this.socketUrl!==e?!1:this.socket&&(this.socket.readyState===a||this.socket.readyState===o)?!0:this.openPromise!==null}getActiveSubscription(){return this.activeSubscriptionToken?this.subscriptions.get(this.activeSubscriptionToken)??null:null}hasSubscriptionForSession(e){for(let t of this.subscriptions.values())if(t.sessionId===e)return!0;return!1}promoteActiveSubscription(){if(this.getActiveSubscription())return;let e=this.subscriptions.values().next().value;if(!e){this.activeSubscriptionToken=null;return}this.activeSubscriptionToken=e.token,this.requestedSessionId=e.sessionId,this.boundSessionId===e.sessionId?e.connected||(e.retryCount=0,e.connected=!0,this.clearConnectionTimeout(e),e.onEvent({type:`connected`})):(this.boundSessionId=null,this.startConnectionTimeout(e),this.bindActiveSession())}emitToSession(e,t){for(let n of this.subscriptions.values())n.sessionId===e&&n.onEvent(t)}markSessionConnected(e,t){for(let n of this.subscriptions.values())n.sessionId===e&&(n.retryCount=0,n.connected=!0,this.clearConnectionTimeout(n),n.onEvent(t))}emitErrorToSession(e,t,n){for(let r of this.subscriptions.values())r.sessionId===e&&(r.connected=!1,n&&this.clearConnectionTimeout(r),r.onError?.(t,n))}startConnectionTimeout(e){this.clearConnectionTimeout(e),e.connectionTimeoutId=setTimeout(()=>{e.connected||!this.subscriptions.has(e.token)||this.getActiveSubscription()?.token===e.token&&this.handleSocketFailure(Error(`Connection timeout`))},e.connectionTimeout)}clearConnectionTimeout(e){e.connectionTimeoutId&&=(clearTimeout(e.connectionTimeoutId),null)}async getOpenSocket(e){if(this.socket&&this.socket.readyState===a||(this.ensureConnected(),this.socket&&this.socket.readyState===a))return this.socket;let t=await Promise.race([this.openPromise??Promise.resolve(null),new Promise(t=>{setTimeout(()=>t(null),e)})]);return t&&t.readyState===a?t:this.socket&&this.socket.readyState===a?this.socket:null}ensureConnected(){this.closed||!this.socketUrl||this.socket&&(this.socket.readyState===a||this.socket.readyState===o)||(this.openPromise||=(this.clearReconnectTimeout(),(async()=>{try{await e()}catch{}return new Promise(e=>{let t=!1,n=null,i=r=>{t||(t=!0,n&&=(clearTimeout(n),null),this.openPromise=null,e(r))};try{let e=r(h(this.socketUrl));e.binaryType=`arraybuffer`,e.onopen=()=>{this.socket=e,this.startKeepalive(),i(e)},e.onmessage=e=>{this.handleSocketMessage(e.data)},e.onerror=()=>{!this.closed&&!this.getActiveSubscription()&&this.scheduleReconnect(Error(`Terminal websocket error`))},e.onclose=()=>{this.socket===e&&(this.socket=null,this.boundSessionId=null,this.stopKeepalive(),this.closed||this.scheduleReconnect(Error(`Terminal stream connection error`))),i(null)},this.socket=e,n=setTimeout(()=>{e.readyState===o&&(e.close(),i(null))},d)}catch{i(null),this.closed||this.scheduleReconnect(Error(`Terminal websocket open failed`))}})})()))}bindActiveSession(){let e=this.getActiveSubscription();if(!(!e||!this.socket||this.socket.readyState!==a)){this.requestedSessionId=e.sessionId;try{this.socket.send(g({t:`b`,s:e.sessionId,r:this.replayCursorBySession.get(e.sessionId)??0,v:2}))}catch{this.handleSocketFailure(Error(`Terminal websocket bind failed`))}}}scheduleReconnect(e){if(this.closed||!this.socketUrl||this.reconnectTimeout)return;this.promoteActiveSubscription();let t=this.getActiveSubscription();if(!t)return;let n=t.retryCount+1,r=t.initialRetryDelay,i=t.maxRetryDelay,a=t.maxRetries;if(n>a){this.clearConnectionTimeout(t),this.emitErrorToSession(t.sessionId,e,!0);return}t.retryCount=n;for(let e of this.subscriptions.values())e.sessionId===t.sessionId&&(e.connected=!1,e.retryCount=n,e.onEvent({type:`reconnecting`,attempt:n,maxAttempts:a}));this.startConnectionTimeout(t);let o=Math.min(r*2**Math.max(n-1,0),i)+Math.floor(Math.random()*l);this.reconnectTimeout=setTimeout(()=>{this.reconnectTimeout=null,this.ensureConnected(),this.bindActiveSession()},o)}clearReconnectTimeout(){this.reconnectTimeout&&=(clearTimeout(this.reconnectTimeout),null)}sendControl(e){if(!this.socket||this.socket.readyState!==a)return!1;try{return this.socket.send(g(e)),!0}catch{return this.handleSocketFailure(Error(`Terminal websocket control send failed`)),!1}}startKeepalive(){this.stopKeepalive(),this.keepaliveInterval=setInterval(()=>{this.closed||this.sendControl({t:`p`,v:2})},u)}stopKeepalive(){this.keepaliveInterval&&=(clearInterval(this.keepaliveInterval),null)}async handleSocketMessage(e){let t=await this.asUint8Array(e);if(t&&t.length>0&&t[0]===i){this.handleControlMessage(t);return}let n=await this.asText(e);if(!n)return;let r=this.boundSessionId??this.requestedSessionId??this.getActiveSubscription()?.sessionId;r&&this.emitToSession(r,{type:`data`,data:n})}handleControlMessage(e){if(e.length<2)return;let t;try{t=JSON.parse(m.decode(e.subarray(1)))}catch{this.handleSocketFailure(Error(`Terminal websocket control parse failed`));return}let n=this.getActiveSubscription();switch(t.t){case`ok`:this.bindActiveSession();return;case`po`:return;case`d`:{let e=t.s??this.boundSessionId??this.requestedSessionId;if(!e)return;typeof t.i==`number`&&Number.isFinite(t.i)&&this.replayCursorBySession.set(e,Math.max(this.replayCursorBySession.get(e)??0,Math.trunc(t.i))),typeof t.d==`string`&&t.d.length>0&&this.emitToSession(e,{type:`data`,data:t.d});return}case`bok`:{let e=t.s??this.requestedSessionId;if(this.boundSessionId=e,!e)return;this.markSessionConnected(e,{type:`connected`,runtime:t.runtime,ptyBackend:t.ptyBackend});return}case`x`:{let e=t.s??this.boundSessionId??n?.sessionId??null;if(!e){this.boundSessionId=null;return}this.boundSessionId===e&&(this.boundSessionId=null),this.requestedSessionId===e&&(this.requestedSessionId=null),this.replayCursorBySession.delete(e);for(let n of this.subscriptions.values())n.sessionId===e&&(n.connected=!1,this.clearConnectionTimeout(n),n.onEvent({type:`exit`,exitCode:t.exitCode,signal:t.signal??null}));return}case`e`:{let e=y(t.c),r=t.f===!0;(t.c===`NOT_BOUND`||t.c===`SESSION_NOT_FOUND`)&&(this.boundSessionId=null);let i=t.s??this.requestedSessionId??n?.sessionId??null;if(i){if(t.c===`SESSION_NOT_FOUND`){this.emitErrorToSession(i,e,!0);return}this.emitErrorToSession(i,e,r)}else n&&(n.connected=!1,r&&this.clearConnectionTimeout(n),n.onError?.(e,r));t.f===!0&&this.handleSocketFailure(e);return}default:return}}async asUint8Array(e){if(e instanceof ArrayBuffer)return new Uint8Array(e);if(e instanceof Uint8Array)return e;if(typeof Blob<`u`&&e instanceof Blob){let t=await e.arrayBuffer();return new Uint8Array(t)}return null}async asText(e){if(typeof e==`string`)return e;let t=await this.asUint8Array(e);return t?m.decode(t):``}handleSocketFailure(e){this.boundSessionId=null,this.requestedSessionId=null,this.resetConnection(),this.scheduleReconnect(e)}resetConnection(){if(this.openPromise=null,this.stopKeepalive(),this.socket){let e=this.socket;this.socket=null,e.onopen=null,e.onmessage=null,e.onerror=null,e.onclose=null,(e.readyState===a||e.readyState===o)&&e.close()}this.boundSessionId=null}},x=()=>{let e=globalThis;return e[f]||(e[f]={inputCapability:null,streamCapability:null,manager:null}),e[f]},S=()=>{let e=x();return e.manager||=new b,e.manager},C=e=>{let t=x();if(t.inputCapability=e?.input??null,t.streamCapability=e?.stream??null,!_(t.inputCapability)&&!_(t.streamCapability)){t.manager?.close(),t.manager=null;return}let n=h(v(t));n&&S().configure(n)},w=async(e,t)=>{let r=await n(`/api/terminal/${e}/input`,{method:`POST`,headers:{"Content-Type":`text/plain`},body:t});if(!r.ok){let e=await r.json().catch(()=>({error:`Failed to send terminal input`}));throw Error(e.error||`Failed to send terminal input`)}};async function T(e){let t=await n(`/api/terminal/create`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({cwd:e.cwd,cols:e.cols??80,rows:e.rows??24})});if(!t.ok){let e=await t.json().catch(()=>({error:`Failed to create terminal`}));throw Error(e.error||`Failed to create terminal session`)}let r=await t.json();return C(r.capabilities),r}var E=(e,n,r,i={})=>{let a=i.maxRetries??3,o=i.initialRetryDelay??1e3,s=i.maxRetryDelay??8e3,c=i.connectionTimeout??1e4,l=null,u=0,d=null,f=null,p=!1,m=!1,h=()=>{d&&=(clearTimeout(d),null),f&&=(clearTimeout(f),null)},g=()=>{p||(p=!0,h(),l&&=(l.close(),null))},_=(e,t)=>{if(!(p||m)){if(u<a&&!t){u+=1;let e=Math.min(o*2**(u-1),s);n({type:`reconnecting`,attempt:u,maxAttempts:a}),d=setTimeout(()=>{!p&&!m&&v()},e);return}r?.(e,!0),g()}},v=()=>{if(p||m||l&&l.readyState!==EventSource.CLOSED)return;l=new EventSource(t().sse(`/api/terminal/${e}/stream`));let i=!1;f=setTimeout(()=>{!i&&l?.readyState!==EventSource.OPEN&&(l?.close(),_(Error(`Connection timeout`),!1))},c),l.onopen=()=>{i||(i=!0,u=0,h(),n({type:`connected`}))},l.onmessage=t=>{try{let r=JSON.parse(t.data);r.type===`exit`&&(x().manager?.unbindSession(e),m=!0,g()),n(r)}catch(e){r?.(e,!1)}},l.onerror=()=>{h();let e=m||l?.readyState===EventSource.CLOSED;l?.close(),l=null,m||_(Error(`Terminal stream connection error`),e)}};return v(),g};function D(e,t,n,r={}){let i=x();if(i.streamCapability&&!_(i.streamCapability))return E(e,t,n,r);let a=S(),o=h(v(i));return o?(a.configure(o),a.subscribe(e,t,n,r)):E(e,t,n,r)}async function O(e,t){let n=x();n.manager&&await n.manager.sendInput(e,t)||await w(e,t)}async function k(e,t,r){let i=await n(`/api/terminal/${e}/resize`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({cols:t,rows:r})});if(!i.ok){let e=await i.json().catch(()=>({error:`Failed to resize terminal`}));throw Error(e.error||`Failed to resize terminal`)}}async function A(e){x().manager?.unbindSession(e);let t=await n(`/api/terminal/${e}`,{method:`DELETE`});if(!t.ok){let e=await t.json().catch(()=>({error:`Failed to close terminal`}));throw Error(e.error||`Failed to close terminal`)}}async function j(e,t){x().manager?.unbindSession(e);let r=await n(`/api/terminal/${e}/restart`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({cwd:t.cwd,cols:t.cols??80,rows:t.rows??24})});if(!r.ok){let e=await r.json().catch(()=>({error:`Failed to restart terminal`}));throw Error(e.error||`Failed to restart terminal`)}let i=await r.json();return C(i.capabilities),i}async function M(e){let t=await n(`/api/terminal/force-kill`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify(e)});if(!t.ok){let e=await t.json().catch(()=>({error:`Failed to force kill terminal`}));throw Error(e.error||`Failed to force kill terminal`)}e.sessionId&&x().manager?.unbindSession(e.sessionId)}function N(){let e=x();e.manager?.close(),e.manager=null,e.inputCapability=null,e.streamCapability=null}function P(){let e=x();if(e.inputCapability&&e.streamCapability&&!_(e.inputCapability)&&!_(e.streamCapability))return;let t=h(v(e)||s);if(!t)return;let n=S();n.isConnectedOrConnecting(t)||(n.configure(t),n.prime())}export{M as a,j as c,N as i,O as l,D as n,P as o,T as r,k as s,A as t};