@wendongfly/zihi 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (164) hide show
  1. package/dist/admin.html +3 -3
  2. package/dist/chat.html +4 -11
  3. package/dist/files.html +4 -12
  4. package/dist/index.html +10 -15
  5. package/dist/index.js +5 -5
  6. package/dist/lib/xterm/README.md +27 -14
  7. package/dist/lib/xterm/css/xterm.css +81 -5
  8. package/dist/lib/xterm/lib/xterm.js +1 -1
  9. package/dist/lib/xterm/lib/xterm.js.map +1 -1
  10. package/dist/lib/xterm/lib/xterm.mjs +53 -0
  11. package/dist/lib/xterm/lib/xterm.mjs.map +7 -0
  12. package/dist/lib/xterm/package.json +49 -38
  13. package/dist/lib/xterm/src/browser/AccessibilityManager.ts +185 -50
  14. package/dist/lib/xterm/src/browser/CoreBrowserTerminal.ts +1339 -0
  15. package/dist/lib/xterm/src/browser/Linkifier.ts +403 -0
  16. package/dist/lib/xterm/src/browser/LocalizableStrings.ts +15 -4
  17. package/dist/lib/xterm/src/browser/OscLinkProvider.ts +2 -1
  18. package/dist/lib/xterm/src/browser/RenderDebouncer.ts +6 -5
  19. package/dist/lib/xterm/src/browser/TimeBasedDebouncer.ts +2 -2
  20. package/dist/lib/xterm/src/browser/Types.ts +226 -0
  21. package/dist/lib/xterm/src/browser/Viewport.ts +148 -357
  22. package/dist/lib/xterm/src/browser/decorations/BufferDecorationRenderer.ts +17 -12
  23. package/dist/lib/xterm/src/browser/decorations/OverviewRulerRenderer.ts +47 -52
  24. package/dist/lib/xterm/src/browser/input/CompositionHelper.ts +5 -3
  25. package/dist/lib/xterm/src/browser/input/MoveToCell.ts +3 -1
  26. package/dist/lib/xterm/src/browser/public/Terminal.ts +39 -24
  27. package/dist/lib/xterm/src/browser/renderer/dom/DomRenderer.ts +76 -40
  28. package/dist/lib/xterm/src/browser/renderer/dom/DomRendererRowFactory.ts +47 -23
  29. package/dist/lib/xterm/src/browser/renderer/dom/WidthCache.ts +19 -9
  30. package/dist/lib/xterm/src/browser/renderer/shared/Constants.ts +0 -8
  31. package/dist/lib/xterm/src/browser/renderer/shared/RendererUtils.ts +38 -1
  32. package/dist/lib/xterm/src/browser/renderer/shared/SelectionRenderModel.ts +6 -4
  33. package/dist/lib/xterm/src/browser/renderer/shared/Types.ts +84 -0
  34. package/dist/lib/xterm/src/browser/selection/Types.ts +15 -0
  35. package/dist/lib/xterm/src/browser/services/CharSizeService.ts +57 -32
  36. package/dist/lib/xterm/src/browser/services/CoreBrowserService.ts +108 -4
  37. package/dist/lib/xterm/src/browser/services/LinkProviderService.ts +28 -0
  38. package/dist/lib/xterm/src/browser/services/RenderService.ts +132 -40
  39. package/dist/lib/xterm/src/browser/services/SelectionService.ts +19 -9
  40. package/dist/lib/xterm/src/browser/services/Services.ts +36 -16
  41. package/dist/lib/xterm/src/browser/services/ThemeService.ts +19 -58
  42. package/dist/lib/xterm/src/browser/shared/Constants.ts +8 -0
  43. package/dist/lib/xterm/src/common/CircularList.ts +5 -5
  44. package/dist/lib/xterm/src/common/Color.ts +34 -14
  45. package/dist/lib/xterm/src/common/CoreTerminal.ts +40 -41
  46. package/dist/lib/xterm/src/common/InputHandler.ts +177 -125
  47. package/dist/lib/xterm/src/common/Platform.ts +2 -1
  48. package/dist/lib/xterm/src/common/SortedList.ts +86 -10
  49. package/dist/lib/xterm/src/common/TaskQueue.ts +7 -7
  50. package/dist/lib/xterm/src/common/Types.ts +552 -0
  51. package/dist/lib/xterm/src/common/buffer/AttributeData.ts +15 -0
  52. package/dist/lib/xterm/src/common/buffer/Buffer.ts +15 -7
  53. package/dist/lib/xterm/src/common/buffer/BufferLine.ts +53 -22
  54. package/dist/lib/xterm/src/common/buffer/BufferRange.ts +1 -1
  55. package/dist/lib/xterm/src/common/buffer/BufferReflow.ts +9 -6
  56. package/dist/lib/xterm/src/common/buffer/BufferSet.ts +5 -5
  57. package/dist/lib/xterm/src/common/buffer/Constants.ts +10 -2
  58. package/dist/lib/xterm/src/common/buffer/Marker.ts +4 -4
  59. package/dist/lib/xterm/src/common/buffer/Types.ts +52 -0
  60. package/dist/lib/xterm/src/common/input/Keyboard.ts +2 -27
  61. package/dist/lib/xterm/src/common/input/UnicodeV6.ts +18 -5
  62. package/dist/lib/xterm/src/common/input/WriteBuffer.ts +9 -8
  63. package/dist/lib/xterm/src/common/parser/EscapeSequenceParser.ts +13 -13
  64. package/dist/lib/xterm/src/common/parser/Types.ts +275 -0
  65. package/dist/lib/xterm/src/common/public/AddonManager.ts +1 -1
  66. package/dist/lib/xterm/src/common/public/BufferApiView.ts +1 -1
  67. package/dist/lib/xterm/src/common/public/BufferLineApiView.ts +1 -1
  68. package/dist/lib/xterm/src/common/public/BufferNamespaceApi.ts +4 -4
  69. package/dist/lib/xterm/src/common/public/ParserApi.ts +1 -1
  70. package/dist/lib/xterm/src/common/public/UnicodeApi.ts +1 -1
  71. package/dist/lib/xterm/src/common/services/BufferService.ts +14 -11
  72. package/dist/lib/xterm/src/common/services/CoreMouseService.ts +53 -6
  73. package/dist/lib/xterm/src/common/services/CoreService.ts +13 -8
  74. package/dist/lib/xterm/src/common/services/DecorationService.ts +11 -11
  75. package/dist/lib/xterm/src/common/services/InstantiationService.ts +1 -1
  76. package/dist/lib/xterm/src/common/services/LogService.ts +2 -2
  77. package/dist/lib/xterm/src/common/services/OptionsService.ts +16 -5
  78. package/dist/lib/xterm/src/common/services/ServiceRegistry.ts +1 -1
  79. package/dist/lib/xterm/src/common/services/Services.ts +73 -19
  80. package/dist/lib/xterm/src/common/services/UnicodeService.ts +30 -5
  81. package/dist/lib/xterm/src/vs/base/browser/browser.ts +141 -0
  82. package/dist/lib/xterm/src/vs/base/browser/canIUse.ts +49 -0
  83. package/dist/lib/xterm/src/vs/base/browser/dom.ts +2369 -0
  84. package/dist/lib/xterm/src/vs/base/browser/fastDomNode.ts +316 -0
  85. package/dist/lib/xterm/src/vs/base/browser/globalPointerMoveMonitor.ts +112 -0
  86. package/dist/lib/xterm/src/vs/base/browser/iframe.ts +135 -0
  87. package/dist/lib/xterm/src/vs/base/browser/keyboardEvent.ts +213 -0
  88. package/dist/lib/xterm/src/vs/base/browser/mouseEvent.ts +229 -0
  89. package/dist/lib/xterm/src/vs/base/browser/touch.ts +372 -0
  90. package/dist/lib/xterm/src/vs/base/browser/ui/scrollbar/abstractScrollbar.ts +303 -0
  91. package/dist/lib/xterm/src/vs/base/browser/ui/scrollbar/horizontalScrollbar.ts +114 -0
  92. package/dist/lib/xterm/src/vs/base/browser/ui/scrollbar/scrollableElement.ts +720 -0
  93. package/dist/lib/xterm/src/vs/base/browser/ui/scrollbar/scrollableElementOptions.ts +165 -0
  94. package/dist/lib/xterm/src/vs/base/browser/ui/scrollbar/scrollbarArrow.ts +114 -0
  95. package/dist/lib/xterm/src/vs/base/browser/ui/scrollbar/scrollbarState.ts +243 -0
  96. package/dist/lib/xterm/src/vs/base/browser/ui/scrollbar/scrollbarVisibilityController.ts +118 -0
  97. package/dist/lib/xterm/src/vs/base/browser/ui/scrollbar/verticalScrollbar.ts +116 -0
  98. package/dist/lib/xterm/src/vs/base/browser/ui/widget.ts +57 -0
  99. package/dist/lib/xterm/src/vs/base/browser/window.ts +14 -0
  100. package/dist/lib/xterm/src/vs/base/common/arrays.ts +887 -0
  101. package/dist/lib/xterm/src/vs/base/common/arraysFind.ts +202 -0
  102. package/dist/lib/xterm/src/vs/base/common/assert.ts +71 -0
  103. package/dist/lib/xterm/src/vs/base/common/async.ts +1992 -0
  104. package/dist/lib/xterm/src/vs/base/common/cancellation.ts +148 -0
  105. package/dist/lib/xterm/src/vs/base/common/charCode.ts +450 -0
  106. package/dist/lib/xterm/src/vs/base/common/collections.ts +140 -0
  107. package/dist/lib/xterm/src/vs/base/common/decorators.ts +130 -0
  108. package/dist/lib/xterm/src/vs/base/common/equals.ts +146 -0
  109. package/dist/lib/xterm/src/vs/base/common/errors.ts +303 -0
  110. package/dist/lib/xterm/src/vs/base/common/event.ts +1778 -0
  111. package/dist/lib/xterm/src/vs/base/common/functional.ts +32 -0
  112. package/dist/lib/xterm/src/vs/base/common/hash.ts +316 -0
  113. package/dist/lib/xterm/src/vs/base/common/iterator.ts +159 -0
  114. package/dist/lib/xterm/src/vs/base/common/keyCodes.ts +526 -0
  115. package/dist/lib/xterm/src/vs/base/common/keybindings.ts +284 -0
  116. package/dist/lib/xterm/src/vs/base/common/lazy.ts +47 -0
  117. package/dist/lib/xterm/src/vs/base/common/lifecycle.ts +801 -0
  118. package/dist/lib/xterm/src/vs/base/common/linkedList.ts +142 -0
  119. package/dist/lib/xterm/src/vs/base/common/map.ts +202 -0
  120. package/dist/lib/xterm/src/vs/base/common/numbers.ts +98 -0
  121. package/dist/lib/xterm/src/vs/base/common/observable.ts +76 -0
  122. package/dist/lib/xterm/src/vs/base/common/observableInternal/api.ts +31 -0
  123. package/dist/lib/xterm/src/vs/base/common/observableInternal/autorun.ts +281 -0
  124. package/dist/lib/xterm/src/vs/base/common/observableInternal/base.ts +489 -0
  125. package/dist/lib/xterm/src/vs/base/common/observableInternal/debugName.ts +145 -0
  126. package/dist/lib/xterm/src/vs/base/common/observableInternal/derived.ts +428 -0
  127. package/dist/lib/xterm/src/vs/base/common/observableInternal/lazyObservableValue.ts +146 -0
  128. package/dist/lib/xterm/src/vs/base/common/observableInternal/logging.ts +328 -0
  129. package/dist/lib/xterm/src/vs/base/common/observableInternal/promise.ts +209 -0
  130. package/dist/lib/xterm/src/vs/base/common/observableInternal/utils.ts +610 -0
  131. package/dist/lib/xterm/src/vs/base/common/platform.ts +281 -0
  132. package/dist/lib/xterm/src/vs/base/common/scrollable.ts +522 -0
  133. package/dist/lib/xterm/src/vs/base/common/sequence.ts +34 -0
  134. package/dist/lib/xterm/src/vs/base/common/stopwatch.ts +43 -0
  135. package/dist/lib/xterm/src/vs/base/common/strings.ts +557 -0
  136. package/dist/lib/xterm/src/vs/base/common/symbols.ts +9 -0
  137. package/dist/lib/xterm/src/vs/base/common/uint.ts +59 -0
  138. package/dist/lib/xterm/src/vs/patches/nls.ts +90 -0
  139. package/dist/lib/xterm/src/vs/typings/base-common.d.ts +20 -0
  140. package/dist/lib/xterm/src/vs/typings/require.d.ts +42 -0
  141. package/dist/lib/xterm/src/vs/typings/vscode-globals-nls.d.ts +36 -0
  142. package/dist/lib/xterm/src/vs/typings/vscode-globals-product.d.ts +33 -0
  143. package/dist/lib/xterm/typings/xterm.d.ts +156 -43
  144. package/dist/lib/xterm-fit/README.md +5 -5
  145. package/dist/lib/xterm-fit/lib/addon-fit.js +2 -0
  146. package/dist/lib/xterm-fit/lib/addon-fit.js.map +1 -0
  147. package/dist/lib/xterm-fit/lib/addon-fit.mjs +18 -0
  148. package/dist/lib/xterm-fit/lib/addon-fit.mjs.map +7 -0
  149. package/dist/lib/xterm-fit/package.json +9 -9
  150. package/dist/lib/xterm-fit/src/FitAddon.ts +7 -4
  151. package/dist/lib/xterm-fit/typings/addon-fit.d.ts +55 -0
  152. package/dist/lib/xterm-links/README.md +5 -5
  153. package/dist/lib/xterm-links/lib/addon-web-links.js +2 -0
  154. package/dist/lib/xterm-links/lib/addon-web-links.js.map +1 -0
  155. package/dist/lib/xterm-links/lib/addon-web-links.mjs +18 -0
  156. package/dist/lib/xterm-links/lib/addon-web-links.mjs.map +7 -0
  157. package/dist/lib/xterm-links/package.json +9 -9
  158. package/dist/lib/xterm-links/src/WebLinkProvider.ts +16 -15
  159. package/dist/lib/xterm-links/src/WebLinksAddon.ts +4 -3
  160. package/dist/lib/xterm-links/typings/addon-web-links.d.ts +57 -0
  161. package/dist/login.html +1 -1
  162. package/dist/package.json +1 -1
  163. package/dist/sw.js +2 -2
  164. package/package.json +5 -6
package/dist/index.js CHANGED
@@ -222,10 +222,10 @@ return fn.apply(this, arguments)
222
222
  object-assign
223
223
  (c) Sindre Sorhus
224
224
  @license MIT
225
- */var t=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,d=Object.prototype.propertyIsEnumerable;function p(x){if(x==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(x)}function h(){try{if(!Object.assign)return!1;var x=new String("abc");if(x[5]="de",Object.getOwnPropertyNames(x)[0]==="5")return!1;for(var j={},b=0;b<10;b++)j["_"+String.fromCharCode(b)]=b;var w=Object.getOwnPropertyNames(j).map((function(O){return j[O]}));if(w.join("")!=="0123456789")return!1;var $={};return"abcdefghijklmnopqrst".split("").forEach((function(O){$[O]=O})),Object.keys(Object.assign({},$)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}r.exports=h()?Object.assign:function(x,j){for(var b,w=p(x),$,O=1;O<arguments.length;O++){b=Object(arguments[O]);for(var I in b)u.call(b,I)&&(w[I]=b[I]);if(t){$=t(b);for(var U=0;U<$.length;U++)d.call(b,$[U])&&(w[$[U]]=b[$[U]])}}return w}},506:(r,t,u)=>{var d=typeof Map=="function"&&Map.prototype,p=Object.getOwnPropertyDescriptor&&d?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,h=d&&p&&typeof p.get=="function"?p.get:null,x=d&&Map.prototype.forEach,j=typeof Set=="function"&&Set.prototype,b=Object.getOwnPropertyDescriptor&&j?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,w=j&&b&&typeof b.get=="function"?b.get:null,$=j&&Set.prototype.forEach,O=typeof WeakMap=="function"&&WeakMap.prototype,I=O?WeakMap.prototype.has:null,U=typeof WeakSet=="function"&&WeakSet.prototype,z=U?WeakSet.prototype.has:null,N=typeof WeakRef=="function"&&WeakRef.prototype,B=N?WeakRef.prototype.deref:null,L=Boolean.prototype.valueOf,W=Object.prototype.toString,H=Function.prototype.toString,V=String.prototype.match,J=String.prototype.slice,G=String.prototype.replace,X=String.prototype.toUpperCase,K=String.prototype.toLowerCase,Y=RegExp.prototype.test,ee=Array.prototype.concat,Q=Array.prototype.join,ie=Array.prototype.slice,ae=Math.floor,ne=typeof BigInt=="function"?BigInt.prototype.valueOf:null,te=Object.getOwnPropertySymbols,oe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,de=typeof Symbol=="function"&&typeof Symbol.iterator=="object",ke=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===de||!0)?Symbol.toStringTag:null,xe=Object.prototype.propertyIsEnumerable,_e=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(Te){return Te.__proto__}:null);function se(Te,Pe){if(Te===1/0||Te===-1/0||Te!==Te||Te&&Te>-1e3&&Te<1e3||Y.call(/e/,Pe))return Pe;var Le=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof Te=="number"){var He=Te<0?-ae(-Te):ae(Te);if(He!==Te){var Ze=String(He),Ue=J.call(Pe,Ze.length+1);return G.call(Ze,Le,"$&_")+"."+G.call(G.call(Ue,/([0-9]{3})/g,"$&_"),/_$/,"")}}return G.call(Pe,Le,"$&_")}var ye=u(8502),fe=ye.custom,re=$e(fe)?fe:null,ce={__proto__:null,double:'"',single:"'"},he={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};r.exports=function Te(Pe,Le,He,Ze){var Ue=Le||{};if(we(Ue,"quoteStyle")&&!we(ce,Ue.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(we(Ue,"maxStringLength")&&(typeof Ue.maxStringLength=="number"?Ue.maxStringLength<0&&Ue.maxStringLength!==1/0:Ue.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var Ye=we(Ue,"customInspect")?Ue.customInspect:!0;if(typeof Ye!="boolean"&&Ye!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(we(Ue,"indent")&&Ue.indent!==null&&Ue.indent!==" "&&!(parseInt(Ue.indent,10)===Ue.indent&&Ue.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(we(Ue,"numericSeparator")&&typeof Ue.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var ti=Ue.numericSeparator;if(typeof Pe>"u")return"undefined";if(Pe===null)return"null";if(typeof Pe=="boolean")return Pe?"true":"false";if(typeof Pe=="string")return Me(Pe,Ue);if(typeof Pe=="number"){if(Pe===0)return 1/0/Pe>0?"0":"-0";var Xe=String(Pe);return ti?se(Pe,Xe):Xe}if(typeof Pe=="bigint"){var ni=String(Pe)+"n";return ti?se(Pe,ni):ni}var ui=typeof Ue.depth>"u"?5:Ue.depth;if(typeof He>"u"&&(He=0),He>=ui&&ui>0&&typeof Pe=="object")return ge(Pe)?"[Array]":"[Object]";var ri=Ke(Ue,He);if(typeof Ze>"u")Ze=[];else if(Ne(Ze,Pe)>=0)return"[Circular]";function Qe(si,li,Ei){if(li&&(Ze=ie.call(Ze),Ze.push(li)),Ei){var Si={depth:Ue.depth};return we(Ue,"quoteStyle")&&(Si.quoteStyle=Ue.quoteStyle),Te(si,Si,He+1,Ze)}return Te(si,Ue,He+1,Ze)}if(typeof Pe=="function"&&!pe(Pe)){var gi=Oe(Pe),xi=ii(Pe,Qe);return"[Function"+(gi?": "+gi:" (anonymous)")+"]"+(xi.length>0?" { "+Q.call(xi,", ")+" }":"")}if($e(Pe)){var bi=de?G.call(String(Pe),/^(Symbol\(.*\))_[^)]*$/,"$1"):oe.call(Pe);return typeof Pe=="object"&&!de?Je(bi):bi}if(Ge(Pe)){for(var oi="<"+K.call(String(Pe.nodeName)),pi=Pe.attributes||[],ci=0;ci<pi.length;ci++)oi+=" "+pi[ci].name+"="+ve(je(pi[ci].value),"double",Ue);return oi+=">",Pe.childNodes&&Pe.childNodes.length&&(oi+="..."),oi+="</"+K.call(String(Pe.nodeName))+">",oi}if(ge(Pe)){if(Pe.length===0)return"[]";var di=ii(Pe,Qe);return ri&&!Be(di)?"["+ei(di,ri)+"]":"[ "+Q.call(di,", ")+" ]"}if(me(Pe)){var fi=ii(Pe,Qe);return!("cause"in Error.prototype)&&"cause"in Pe&&!xe.call(Pe,"cause")?"{ ["+String(Pe)+"] "+Q.call(ee.call("[cause]: "+Qe(Pe.cause),fi),", ")+" }":fi.length===0?"["+String(Pe)+"]":"{ ["+String(Pe)+"] "+Q.call(fi,", ")+" }"}if(typeof Pe=="object"&&Ye){if(re&&typeof Pe[re]=="function"&&ye)return ye(Pe,{depth:ui-He});if(Ye!=="symbol"&&typeof Pe.inspect=="function")return Pe.inspect()}if(Ae(Pe)){var yi=[];return x&&x.call(Pe,(function(si,li){yi.push(Qe(li,Pe,!0)+" => "+Qe(si,Pe))})),We("Map",h.call(Pe),yi,ri)}if(ze(Pe)){var _i=[];return $&&$.call(Pe,(function(si){_i.push(Qe(si,Pe))})),We("Set",w.call(Pe),_i,ri)}if(qe(Pe))return ai("WeakMap");if(Fe(Pe))return ai("WeakSet");if(De(Pe))return ai("WeakRef");if(le(Pe))return Je(Qe(Number(Pe)));if(Ie(Pe))return Je(Qe(ne.call(Pe)));if(ue(Pe))return Je(L.call(Pe));if(Se(Pe))return Je(Qe(String(Pe)));if(typeof window<"u"&&Pe===window)return"{ [object Window] }";if(typeof globalThis<"u"&&Pe===globalThis||typeof global<"u"&&Pe===global)return"{ [object globalThis] }";if(!be(Pe)&&!pe(Pe)){var mi=ii(Pe,Qe),wi=_e?_e(Pe)===Object.prototype:Pe instanceof Object||Pe.constructor===Object,hi=Pe instanceof Object?"":"null prototype",ki=!wi&&ke&&Object(Pe)===Pe&&ke in Pe?J.call(Ee(Pe),8,-1):hi?"Object":"",$i=wi||typeof Pe.constructor!="function"?"":Pe.constructor.name?Pe.constructor.name+" ":"",vi=$i+(ki||hi?"["+Q.call(ee.call([],ki||[],hi||[]),": ")+"] ":"");return mi.length===0?vi+"{}":ri?vi+"{"+ei(mi,ri)+"}":vi+"{ "+Q.call(mi,", ")+" }"}return String(Pe)};function ve(Te,Pe,Le){var He=Le.quoteStyle||Pe,Ze=ce[He];return Ze+Te+Ze}function je(Te){return G.call(String(Te),/"/g,"&quot;")}function Ce(Te){return!ke||!(typeof Te=="object"&&(ke in Te||typeof Te[ke]<"u"))}function ge(Te){return Ee(Te)==="[object Array]"&&Ce(Te)}function be(Te){return Ee(Te)==="[object Date]"&&Ce(Te)}function pe(Te){return Ee(Te)==="[object RegExp]"&&Ce(Te)}function me(Te){return Ee(Te)==="[object Error]"&&Ce(Te)}function Se(Te){return Ee(Te)==="[object String]"&&Ce(Te)}function le(Te){return Ee(Te)==="[object Number]"&&Ce(Te)}function ue(Te){return Ee(Te)==="[object Boolean]"&&Ce(Te)}function $e(Te){if(de)return Te&&typeof Te=="object"&&Te instanceof Symbol;if(typeof Te=="symbol")return!0;if(!Te||typeof Te!="object"||!oe)return!1;try{return oe.call(Te),!0}catch{}return!1}function Ie(Te){if(!Te||typeof Te!="object"||!ne)return!1;try{return ne.call(Te),!0}catch{}return!1}var Re=Object.prototype.hasOwnProperty||function(Te){return Te in this};function we(Te,Pe){return Re.call(Te,Pe)}function Ee(Te){return W.call(Te)}function Oe(Te){if(Te.name)return Te.name;var Pe=V.call(H.call(Te),/^function\s*([\w$]+)/);return Pe?Pe[1]:null}function Ne(Te,Pe){if(Te.indexOf)return Te.indexOf(Pe);for(var Le=0,He=Te.length;Le<He;Le++)if(Te[Le]===Pe)return Le;return-1}function Ae(Te){if(!h||!Te||typeof Te!="object")return!1;try{h.call(Te);try{w.call(Te)}catch{return!0}return Te instanceof Map}catch{}return!1}function qe(Te){if(!I||!Te||typeof Te!="object")return!1;try{I.call(Te,I);try{z.call(Te,z)}catch{return!0}return Te instanceof WeakMap}catch{}return!1}function De(Te){if(!B||!Te||typeof Te!="object")return!1;try{return B.call(Te),!0}catch{}return!1}function ze(Te){if(!w||!Te||typeof Te!="object")return!1;try{w.call(Te);try{h.call(Te)}catch{return!0}return Te instanceof Set}catch{}return!1}function Fe(Te){if(!z||!Te||typeof Te!="object")return!1;try{z.call(Te,z);try{I.call(Te,I)}catch{return!0}return Te instanceof WeakSet}catch{}return!1}function Ge(Te){return!Te||typeof Te!="object"?!1:typeof HTMLElement<"u"&&Te instanceof HTMLElement?!0:typeof Te.nodeName=="string"&&typeof Te.getAttribute=="function"}function Me(Te,Pe){if(Te.length>Pe.maxStringLength){var Le=Te.length-Pe.maxStringLength,He="... "+Le+" more character"+(Le>1?"s":"");return Me(J.call(Te,0,Pe.maxStringLength),Pe)+He}var Ze=he[Pe.quoteStyle||"single"];Ze.lastIndex=0;var Ue=G.call(G.call(Te,Ze,"\\$1"),/[\x00-\x1f]/g,Ve);return ve(Ue,"single",Pe)}function Ve(Te){var Pe=Te.charCodeAt(0),Le={8:"b",9:"t",10:"n",12:"f",13:"r"}[Pe];return Le?"\\"+Le:"\\x"+(Pe<16?"0":"")+X.call(Pe.toString(16))}function Je(Te){return"Object("+Te+")"}function ai(Te){return Te+" { ? }"}function We(Te,Pe,Le,He){var Ze=He?ei(Le,He):Q.call(Le,", ");return Te+" ("+Pe+") {"+Ze+"}"}function Be(Te){for(var Pe=0;Pe<Te.length;Pe++)if(Ne(Te[Pe],`
225
+ */var t=Object.getOwnPropertySymbols,u=Object.prototype.hasOwnProperty,d=Object.prototype.propertyIsEnumerable;function p(x){if(x==null)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(x)}function h(){try{if(!Object.assign)return!1;var x=new String("abc");if(x[5]="de",Object.getOwnPropertyNames(x)[0]==="5")return!1;for(var j={},b=0;b<10;b++)j["_"+String.fromCharCode(b)]=b;var w=Object.getOwnPropertyNames(j).map((function(O){return j[O]}));if(w.join("")!=="0123456789")return!1;var $={};return"abcdefghijklmnopqrst".split("").forEach((function(O){$[O]=O})),Object.keys(Object.assign({},$)).join("")==="abcdefghijklmnopqrst"}catch{return!1}}r.exports=h()?Object.assign:function(x,j){for(var b,w=p(x),$,O=1;O<arguments.length;O++){b=Object(arguments[O]);for(var I in b)u.call(b,I)&&(w[I]=b[I]);if(t){$=t(b);for(var U=0;U<$.length;U++)d.call(b,$[U])&&(w[$[U]]=b[$[U]])}}return w}},506:(r,t,u)=>{var d=typeof Map=="function"&&Map.prototype,p=Object.getOwnPropertyDescriptor&&d?Object.getOwnPropertyDescriptor(Map.prototype,"size"):null,h=d&&p&&typeof p.get=="function"?p.get:null,x=d&&Map.prototype.forEach,j=typeof Set=="function"&&Set.prototype,b=Object.getOwnPropertyDescriptor&&j?Object.getOwnPropertyDescriptor(Set.prototype,"size"):null,w=j&&b&&typeof b.get=="function"?b.get:null,$=j&&Set.prototype.forEach,O=typeof WeakMap=="function"&&WeakMap.prototype,I=O?WeakMap.prototype.has:null,U=typeof WeakSet=="function"&&WeakSet.prototype,z=U?WeakSet.prototype.has:null,N=typeof WeakRef=="function"&&WeakRef.prototype,B=N?WeakRef.prototype.deref:null,L=Boolean.prototype.valueOf,W=Object.prototype.toString,H=Function.prototype.toString,V=String.prototype.match,J=String.prototype.slice,G=String.prototype.replace,X=String.prototype.toUpperCase,K=String.prototype.toLowerCase,Y=RegExp.prototype.test,ee=Array.prototype.concat,Q=Array.prototype.join,ie=Array.prototype.slice,ae=Math.floor,ne=typeof BigInt=="function"?BigInt.prototype.valueOf:null,te=Object.getOwnPropertySymbols,oe=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?Symbol.prototype.toString:null,de=typeof Symbol=="function"&&typeof Symbol.iterator=="object",ke=typeof Symbol=="function"&&Symbol.toStringTag&&(typeof Symbol.toStringTag===de||!0)?Symbol.toStringTag:null,xe=Object.prototype.propertyIsEnumerable,_e=(typeof Reflect=="function"?Reflect.getPrototypeOf:Object.getPrototypeOf)||([].__proto__===Array.prototype?function(Te){return Te.__proto__}:null);function se(Te,Pe){if(Te===1/0||Te===-1/0||Te!==Te||Te&&Te>-1e3&&Te<1e3||Y.call(/e/,Pe))return Pe;var Le=/[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;if(typeof Te=="number"){var Ze=Te<0?-ae(-Te):ae(Te);if(Ze!==Te){var He=String(Ze),Ue=J.call(Pe,He.length+1);return G.call(He,Le,"$&_")+"."+G.call(G.call(Ue,/([0-9]{3})/g,"$&_"),/_$/,"")}}return G.call(Pe,Le,"$&_")}var ye=u(8502),fe=ye.custom,re=$e(fe)?fe:null,ce={__proto__:null,double:'"',single:"'"},he={__proto__:null,double:/(["\\])/g,single:/(['\\])/g};r.exports=function Te(Pe,Le,Ze,He){var Ue=Le||{};if(we(Ue,"quoteStyle")&&!we(ce,Ue.quoteStyle))throw new TypeError('option "quoteStyle" must be "single" or "double"');if(we(Ue,"maxStringLength")&&(typeof Ue.maxStringLength=="number"?Ue.maxStringLength<0&&Ue.maxStringLength!==1/0:Ue.maxStringLength!==null))throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');var Ye=we(Ue,"customInspect")?Ue.customInspect:!0;if(typeof Ye!="boolean"&&Ye!=="symbol")throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");if(we(Ue,"indent")&&Ue.indent!==null&&Ue.indent!==" "&&!(parseInt(Ue.indent,10)===Ue.indent&&Ue.indent>0))throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');if(we(Ue,"numericSeparator")&&typeof Ue.numericSeparator!="boolean")throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');var ti=Ue.numericSeparator;if(typeof Pe>"u")return"undefined";if(Pe===null)return"null";if(typeof Pe=="boolean")return Pe?"true":"false";if(typeof Pe=="string")return Me(Pe,Ue);if(typeof Pe=="number"){if(Pe===0)return 1/0/Pe>0?"0":"-0";var Xe=String(Pe);return ti?se(Pe,Xe):Xe}if(typeof Pe=="bigint"){var ni=String(Pe)+"n";return ti?se(Pe,ni):ni}var ui=typeof Ue.depth>"u"?5:Ue.depth;if(typeof Ze>"u"&&(Ze=0),Ze>=ui&&ui>0&&typeof Pe=="object")return ge(Pe)?"[Array]":"[Object]";var ri=Ke(Ue,Ze);if(typeof He>"u")He=[];else if(Ne(He,Pe)>=0)return"[Circular]";function Qe(si,li,Ei){if(li&&(He=ie.call(He),He.push(li)),Ei){var Si={depth:Ue.depth};return we(Ue,"quoteStyle")&&(Si.quoteStyle=Ue.quoteStyle),Te(si,Si,Ze+1,He)}return Te(si,Ue,Ze+1,He)}if(typeof Pe=="function"&&!pe(Pe)){var gi=Oe(Pe),xi=ii(Pe,Qe);return"[Function"+(gi?": "+gi:" (anonymous)")+"]"+(xi.length>0?" { "+Q.call(xi,", ")+" }":"")}if($e(Pe)){var bi=de?G.call(String(Pe),/^(Symbol\(.*\))_[^)]*$/,"$1"):oe.call(Pe);return typeof Pe=="object"&&!de?Je(bi):bi}if(Ge(Pe)){for(var oi="<"+K.call(String(Pe.nodeName)),pi=Pe.attributes||[],ci=0;ci<pi.length;ci++)oi+=" "+pi[ci].name+"="+ve(je(pi[ci].value),"double",Ue);return oi+=">",Pe.childNodes&&Pe.childNodes.length&&(oi+="..."),oi+="</"+K.call(String(Pe.nodeName))+">",oi}if(ge(Pe)){if(Pe.length===0)return"[]";var di=ii(Pe,Qe);return ri&&!Be(di)?"["+ei(di,ri)+"]":"[ "+Q.call(di,", ")+" ]"}if(me(Pe)){var fi=ii(Pe,Qe);return!("cause"in Error.prototype)&&"cause"in Pe&&!xe.call(Pe,"cause")?"{ ["+String(Pe)+"] "+Q.call(ee.call("[cause]: "+Qe(Pe.cause),fi),", ")+" }":fi.length===0?"["+String(Pe)+"]":"{ ["+String(Pe)+"] "+Q.call(fi,", ")+" }"}if(typeof Pe=="object"&&Ye){if(re&&typeof Pe[re]=="function"&&ye)return ye(Pe,{depth:ui-Ze});if(Ye!=="symbol"&&typeof Pe.inspect=="function")return Pe.inspect()}if(Ae(Pe)){var yi=[];return x&&x.call(Pe,(function(si,li){yi.push(Qe(li,Pe,!0)+" => "+Qe(si,Pe))})),We("Map",h.call(Pe),yi,ri)}if(ze(Pe)){var _i=[];return $&&$.call(Pe,(function(si){_i.push(Qe(si,Pe))})),We("Set",w.call(Pe),_i,ri)}if(qe(Pe))return ai("WeakMap");if(Fe(Pe))return ai("WeakSet");if(De(Pe))return ai("WeakRef");if(le(Pe))return Je(Qe(Number(Pe)));if(Ie(Pe))return Je(Qe(ne.call(Pe)));if(ue(Pe))return Je(L.call(Pe));if(Se(Pe))return Je(Qe(String(Pe)));if(typeof window<"u"&&Pe===window)return"{ [object Window] }";if(typeof globalThis<"u"&&Pe===globalThis||typeof global<"u"&&Pe===global)return"{ [object globalThis] }";if(!be(Pe)&&!pe(Pe)){var mi=ii(Pe,Qe),wi=_e?_e(Pe)===Object.prototype:Pe instanceof Object||Pe.constructor===Object,hi=Pe instanceof Object?"":"null prototype",ki=!wi&&ke&&Object(Pe)===Pe&&ke in Pe?J.call(Ee(Pe),8,-1):hi?"Object":"",$i=wi||typeof Pe.constructor!="function"?"":Pe.constructor.name?Pe.constructor.name+" ":"",vi=$i+(ki||hi?"["+Q.call(ee.call([],ki||[],hi||[]),": ")+"] ":"");return mi.length===0?vi+"{}":ri?vi+"{"+ei(mi,ri)+"}":vi+"{ "+Q.call(mi,", ")+" }"}return String(Pe)};function ve(Te,Pe,Le){var Ze=Le.quoteStyle||Pe,He=ce[Ze];return He+Te+He}function je(Te){return G.call(String(Te),/"/g,"&quot;")}function Ce(Te){return!ke||!(typeof Te=="object"&&(ke in Te||typeof Te[ke]<"u"))}function ge(Te){return Ee(Te)==="[object Array]"&&Ce(Te)}function be(Te){return Ee(Te)==="[object Date]"&&Ce(Te)}function pe(Te){return Ee(Te)==="[object RegExp]"&&Ce(Te)}function me(Te){return Ee(Te)==="[object Error]"&&Ce(Te)}function Se(Te){return Ee(Te)==="[object String]"&&Ce(Te)}function le(Te){return Ee(Te)==="[object Number]"&&Ce(Te)}function ue(Te){return Ee(Te)==="[object Boolean]"&&Ce(Te)}function $e(Te){if(de)return Te&&typeof Te=="object"&&Te instanceof Symbol;if(typeof Te=="symbol")return!0;if(!Te||typeof Te!="object"||!oe)return!1;try{return oe.call(Te),!0}catch{}return!1}function Ie(Te){if(!Te||typeof Te!="object"||!ne)return!1;try{return ne.call(Te),!0}catch{}return!1}var Re=Object.prototype.hasOwnProperty||function(Te){return Te in this};function we(Te,Pe){return Re.call(Te,Pe)}function Ee(Te){return W.call(Te)}function Oe(Te){if(Te.name)return Te.name;var Pe=V.call(H.call(Te),/^function\s*([\w$]+)/);return Pe?Pe[1]:null}function Ne(Te,Pe){if(Te.indexOf)return Te.indexOf(Pe);for(var Le=0,Ze=Te.length;Le<Ze;Le++)if(Te[Le]===Pe)return Le;return-1}function Ae(Te){if(!h||!Te||typeof Te!="object")return!1;try{h.call(Te);try{w.call(Te)}catch{return!0}return Te instanceof Map}catch{}return!1}function qe(Te){if(!I||!Te||typeof Te!="object")return!1;try{I.call(Te,I);try{z.call(Te,z)}catch{return!0}return Te instanceof WeakMap}catch{}return!1}function De(Te){if(!B||!Te||typeof Te!="object")return!1;try{return B.call(Te),!0}catch{}return!1}function ze(Te){if(!w||!Te||typeof Te!="object")return!1;try{w.call(Te);try{h.call(Te)}catch{return!0}return Te instanceof Set}catch{}return!1}function Fe(Te){if(!z||!Te||typeof Te!="object")return!1;try{z.call(Te,z);try{I.call(Te,I)}catch{return!0}return Te instanceof WeakSet}catch{}return!1}function Ge(Te){return!Te||typeof Te!="object"?!1:typeof HTMLElement<"u"&&Te instanceof HTMLElement?!0:typeof Te.nodeName=="string"&&typeof Te.getAttribute=="function"}function Me(Te,Pe){if(Te.length>Pe.maxStringLength){var Le=Te.length-Pe.maxStringLength,Ze="... "+Le+" more character"+(Le>1?"s":"");return Me(J.call(Te,0,Pe.maxStringLength),Pe)+Ze}var He=he[Pe.quoteStyle||"single"];He.lastIndex=0;var Ue=G.call(G.call(Te,He,"\\$1"),/[\x00-\x1f]/g,Ve);return ve(Ue,"single",Pe)}function Ve(Te){var Pe=Te.charCodeAt(0),Le={8:"b",9:"t",10:"n",12:"f",13:"r"}[Pe];return Le?"\\"+Le:"\\x"+(Pe<16?"0":"")+X.call(Pe.toString(16))}function Je(Te){return"Object("+Te+")"}function ai(Te){return Te+" { ? }"}function We(Te,Pe,Le,Ze){var He=Ze?ei(Le,Ze):Q.call(Le,", ");return Te+" ("+Pe+") {"+He+"}"}function Be(Te){for(var Pe=0;Pe<Te.length;Pe++)if(Ne(Te[Pe],`
226
226
  `)>=0)return!1;return!0}function Ke(Te,Pe){var Le;if(Te.indent===" ")Le=" ";else if(typeof Te.indent=="number"&&Te.indent>0)Le=Q.call(Array(Te.indent+1)," ");else return null;return{base:Le,prev:Q.call(Array(Pe+1),Le)}}function ei(Te,Pe){if(Te.length===0)return"";var Le=`
227
227
  `+Pe.prev+Pe.base;return Le+Q.call(Te,","+Le)+`
228
- `+Pe.prev}function ii(Te,Pe){var Le=ge(Te),He=[];if(Le){He.length=Te.length;for(var Ze=0;Ze<Te.length;Ze++)He[Ze]=we(Te,Ze)?Pe(Te[Ze],Te):""}var Ue=typeof te=="function"?te(Te):[],Ye;if(de){Ye={};for(var ti=0;ti<Ue.length;ti++)Ye["$"+Ue[ti]]=Ue[ti]}for(var Xe in Te)we(Te,Xe)&&(Le&&String(Number(Xe))===Xe&&Xe<Te.length||de&&Ye["$"+Xe]instanceof Symbol||(Y.call(/[^\w$]/,Xe)?He.push(Pe(Xe,Te)+": "+Pe(Te[Xe],Te)):He.push(Xe+": "+Pe(Te[Xe],Te))));if(typeof te=="function")for(var ni=0;ni<Ue.length;ni++)xe.call(Te,Ue[ni])&&He.push("["+Pe(Ue[ni])+"]: "+Pe(Te[Ue[ni]],Te));return He}},8502:(r,t,u)=>{r.exports=u(9023).inspect},5698:(r,t,u)=>{/*!
228
+ `+Pe.prev}function ii(Te,Pe){var Le=ge(Te),Ze=[];if(Le){Ze.length=Te.length;for(var He=0;He<Te.length;He++)Ze[He]=we(Te,He)?Pe(Te[He],Te):""}var Ue=typeof te=="function"?te(Te):[],Ye;if(de){Ye={};for(var ti=0;ti<Ue.length;ti++)Ye["$"+Ue[ti]]=Ue[ti]}for(var Xe in Te)we(Te,Xe)&&(Le&&String(Number(Xe))===Xe&&Xe<Te.length||de&&Ye["$"+Xe]instanceof Symbol||(Y.call(/[^\w$]/,Xe)?Ze.push(Pe(Xe,Te)+": "+Pe(Te[Xe],Te)):Ze.push(Xe+": "+Pe(Te[Xe],Te))));if(typeof te=="function")for(var ni=0;ni<Ue.length;ni++)xe.call(Te,Ue[ni])&&Ze.push("["+Pe(Ue[ni])+"]: "+Pe(Te[Ue[ni]],Te));return Ze}},8502:(r,t,u)=>{r.exports=u(9023).inspect},5698:(r,t,u)=>{/*!
229
229
  * on-finished
230
230
  * Copyright(c) 2013 Jonathan Ong
231
231
  * Copyright(c) 2014 Douglas Christopher Wilson
@@ -357,7 +357,7 @@ Minimum version required to store current data is: `+ne+`.
357
357
  `+Object.keys(ee).map((Q=>`${Q}: ${ee[Q]}`)).join(`\r
358
358
  `)+`\r
359
359
  \r
360
- `+Y)}function G(X,K,Y,ee,Q,ie){if(X.listenerCount("wsClientError")){const ae=new Error(Q);Error.captureStackTrace(ae,G),X.emit("wsClientError",ae,Y,K)}else J(Y,ee,Q,ie)}},6681:(r,t,u)=>{const d=u(4434),p=u(5692),h=u(8611),x=u(9278),j=u(4756),{randomBytes:b,createHash:w}=u(6982),{Duplex:$,Readable:O}=u(2203),{URL:I}=u(7016),U=u(4376),z=u(893),N=u(7389),{isBlob:B}=u(6615),{BINARY_TYPES:L,EMPTY_BUFFER:W,GUID:H,kForOnEventAttribute:V,kListener:J,kStatusCode:G,kWebSocket:X,NOOP:K}=u(1791),{EventTarget:{addEventListener:Y,removeEventListener:ee}}=u(4634),{format:Q,parse:ie}=u(1335),{toBuffer:ae}=u(5803),ne=30*1e3,te=Symbol("kAborted"),oe=[8,13],de=["CONNECTING","OPEN","CLOSING","CLOSED"],ke=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class xe extends d{constructor(Ee,Oe,Ne){super(),this._binaryType=L[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=W,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=xe.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,Ee!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Oe===void 0?Oe=[]:Array.isArray(Oe)||(typeof Oe=="object"&&Oe!==null?(Ne=Oe,Oe=[]):Oe=[Oe]),_e(this,Ee,Oe,Ne)):(this._autoPong=Ne.autoPong,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(Ee){L.includes(Ee)&&(this._binaryType=Ee,this._receiver&&(this._receiver._binaryType=Ee))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(Ee,Oe,Ne){const Ae=new z({allowSynchronousEvents:Ne.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:Ne.maxPayload,skipUTF8Validation:Ne.skipUTF8Validation}),qe=new N(Ee,this._extensions,Ne.generateMask);this._receiver=Ae,this._sender=qe,this._socket=Ee,Ae[X]=this,qe[X]=this,Ee[X]=this,Ae.on("conclude",he),Ae.on("drain",ve),Ae.on("error",je),Ae.on("message",ge),Ae.on("ping",be),Ae.on("pong",pe),qe.onerror=Se,Ee.setTimeout&&Ee.setTimeout(0),Ee.setNoDelay&&Ee.setNoDelay(),Oe.length>0&&Ee.unshift(Oe),Ee.on("close",ue),Ee.on("data",$e),Ee.on("end",Ie),Ee.on("error",Re),this._readyState=xe.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=xe.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[U.extensionName]&&this._extensions[U.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=xe.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(Ee,Oe){if(this.readyState!==xe.CLOSED){if(this.readyState===xe.CONNECTING){re(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===xe.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=xe.CLOSING,this._sender.close(Ee,Oe,!this._isServer,(Ne=>{Ne||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())})),le(this)}}pause(){this.readyState===xe.CONNECTING||this.readyState===xe.CLOSED||(this._paused=!0,this._socket.pause())}ping(Ee,Oe,Ne){if(this.readyState===xe.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof Ee=="function"?(Ne=Ee,Ee=Oe=void 0):typeof Oe=="function"&&(Ne=Oe,Oe=void 0),typeof Ee=="number"&&(Ee=Ee.toString()),this.readyState!==xe.OPEN){ce(this,Ee,Ne);return}Oe===void 0&&(Oe=!this._isServer),this._sender.ping(Ee||W,Oe,Ne)}pong(Ee,Oe,Ne){if(this.readyState===xe.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof Ee=="function"?(Ne=Ee,Ee=Oe=void 0):typeof Oe=="function"&&(Ne=Oe,Oe=void 0),typeof Ee=="number"&&(Ee=Ee.toString()),this.readyState!==xe.OPEN){ce(this,Ee,Ne);return}Oe===void 0&&(Oe=!this._isServer),this._sender.pong(Ee||W,Oe,Ne)}resume(){this.readyState===xe.CONNECTING||this.readyState===xe.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(Ee,Oe,Ne){if(this.readyState===xe.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof Oe=="function"&&(Ne=Oe,Oe={}),typeof Ee=="number"&&(Ee=Ee.toString()),this.readyState!==xe.OPEN){ce(this,Ee,Ne);return}const Ae={binary:typeof Ee!="string",mask:!this._isServer,compress:!0,fin:!0,...Oe};this._extensions[U.extensionName]||(Ae.compress=!1),this._sender.send(Ee||W,Ae,Ne)}terminate(){if(this.readyState!==xe.CLOSED){if(this.readyState===xe.CONNECTING){re(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=xe.CLOSING,this._socket.destroy())}}}Object.defineProperty(xe,"CONNECTING",{enumerable:!0,value:de.indexOf("CONNECTING")}),Object.defineProperty(xe.prototype,"CONNECTING",{enumerable:!0,value:de.indexOf("CONNECTING")}),Object.defineProperty(xe,"OPEN",{enumerable:!0,value:de.indexOf("OPEN")}),Object.defineProperty(xe.prototype,"OPEN",{enumerable:!0,value:de.indexOf("OPEN")}),Object.defineProperty(xe,"CLOSING",{enumerable:!0,value:de.indexOf("CLOSING")}),Object.defineProperty(xe.prototype,"CLOSING",{enumerable:!0,value:de.indexOf("CLOSING")}),Object.defineProperty(xe,"CLOSED",{enumerable:!0,value:de.indexOf("CLOSED")}),Object.defineProperty(xe.prototype,"CLOSED",{enumerable:!0,value:de.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((we=>{Object.defineProperty(xe.prototype,we,{enumerable:!0})})),["open","error","close","message"].forEach((we=>{Object.defineProperty(xe.prototype,`on${we}`,{enumerable:!0,get(){for(const Ee of this.listeners(we))if(Ee[V])return Ee[J];return null},set(Ee){for(const Oe of this.listeners(we))if(Oe[V]){this.removeListener(we,Oe);break}typeof Ee=="function"&&this.addEventListener(we,Ee,{[V]:!0})}})})),xe.prototype.addEventListener=Y,xe.prototype.removeEventListener=ee,r.exports=xe;function _e(we,Ee,Oe,Ne){const Ae={allowSynchronousEvents:!0,autoPong:!0,protocolVersion:oe[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...Ne,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(we._autoPong=Ae.autoPong,!oe.includes(Ae.protocolVersion))throw new RangeError(`Unsupported protocol version: ${Ae.protocolVersion} (supported versions: ${oe.join(", ")})`);let qe;if(Ee instanceof I)qe=Ee;else try{qe=new I(Ee)}catch{throw new SyntaxError(`Invalid URL: ${Ee}`)}qe.protocol==="http:"?qe.protocol="ws:":qe.protocol==="https:"&&(qe.protocol="wss:"),we._url=qe.href;const De=qe.protocol==="wss:",ze=qe.protocol==="ws+unix:";let Fe;if(qe.protocol!=="ws:"&&!De&&!ze?Fe=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:ze&&!qe.pathname?Fe="The URL's pathname is empty":qe.hash&&(Fe="The URL contains a fragment identifier"),Fe){const Be=new SyntaxError(Fe);if(we._redirects===0)throw Be;se(we,Be);return}const Ge=De?443:80,Me=b(16).toString("base64"),Ve=De?p.request:h.request,Je=new Set;let ai;if(Ae.createConnection=Ae.createConnection||(De?fe:ye),Ae.defaultPort=Ae.defaultPort||Ge,Ae.port=qe.port||Ge,Ae.host=qe.hostname.startsWith("[")?qe.hostname.slice(1,-1):qe.hostname,Ae.headers={...Ae.headers,"Sec-WebSocket-Version":Ae.protocolVersion,"Sec-WebSocket-Key":Me,Connection:"Upgrade",Upgrade:"websocket"},Ae.path=qe.pathname+qe.search,Ae.timeout=Ae.handshakeTimeout,Ae.perMessageDeflate&&(ai=new U(Ae.perMessageDeflate!==!0?Ae.perMessageDeflate:{},!1,Ae.maxPayload),Ae.headers["Sec-WebSocket-Extensions"]=Q({[U.extensionName]:ai.offer()})),Oe.length){for(const Be of Oe){if(typeof Be!="string"||!ke.test(Be)||Je.has(Be))throw new SyntaxError("An invalid or duplicated subprotocol was specified");Je.add(Be)}Ae.headers["Sec-WebSocket-Protocol"]=Oe.join(",")}if(Ae.origin&&(Ae.protocolVersion<13?Ae.headers["Sec-WebSocket-Origin"]=Ae.origin:Ae.headers.Origin=Ae.origin),(qe.username||qe.password)&&(Ae.auth=`${qe.username}:${qe.password}`),ze){const Be=Ae.path.split(":");Ae.socketPath=Be[0],Ae.path=Be[1]}let We;if(Ae.followRedirects){if(we._redirects===0){we._originalIpc=ze,we._originalSecure=De,we._originalHostOrSocketPath=ze?Ae.socketPath:qe.host;const Be=Ne&&Ne.headers;if(Ne={...Ne,headers:{}},Be)for(const[Ke,ei]of Object.entries(Be))Ne.headers[Ke.toLowerCase()]=ei}else if(we.listenerCount("redirect")===0){const Be=ze?we._originalIpc?Ae.socketPath===we._originalHostOrSocketPath:!1:we._originalIpc?!1:qe.host===we._originalHostOrSocketPath;(!Be||we._originalSecure&&!De)&&(delete Ae.headers.authorization,delete Ae.headers.cookie,Be||delete Ae.headers.host,Ae.auth=void 0)}Ae.auth&&!Ne.headers.authorization&&(Ne.headers.authorization="Basic "+Buffer.from(Ae.auth).toString("base64")),We=we._req=Ve(Ae),we._redirects&&we.emit("redirect",we.url,We)}else We=we._req=Ve(Ae);Ae.timeout&&We.on("timeout",(()=>{re(we,We,"Opening handshake has timed out")})),We.on("error",(Be=>{We===null||We[te]||(We=we._req=null,se(we,Be))})),We.on("response",(Be=>{const Ke=Be.headers.location,ei=Be.statusCode;if(Ke&&Ae.followRedirects&&ei>=300&&ei<400){if(++we._redirects>Ae.maxRedirects){re(we,We,"Maximum redirects exceeded");return}We.abort();let ii;try{ii=new I(Ke,Ee)}catch{const Pe=new SyntaxError(`Invalid URL: ${Ke}`);se(we,Pe);return}_e(we,ii,Oe,Ne)}else we.emit("unexpected-response",We,Be)||re(we,We,`Unexpected server response: ${Be.statusCode}`)})),We.on("upgrade",((Be,Ke,ei)=>{if(we.emit("upgrade",Be),we.readyState!==xe.CONNECTING)return;We=we._req=null;const ii=Be.headers.upgrade;if(ii===void 0||ii.toLowerCase()!=="websocket"){re(we,Ke,"Invalid Upgrade header");return}const Te=w("sha1").update(Me+H).digest("base64");if(Be.headers["sec-websocket-accept"]!==Te){re(we,Ke,"Invalid Sec-WebSocket-Accept header");return}const Pe=Be.headers["sec-websocket-protocol"];let Le;if(Pe!==void 0?Je.size?Je.has(Pe)||(Le="Server sent an invalid subprotocol"):Le="Server sent a subprotocol but none was requested":Je.size&&(Le="Server sent no subprotocol"),Le){re(we,Ke,Le);return}Pe&&(we._protocol=Pe);const He=Be.headers["sec-websocket-extensions"];if(He!==void 0){if(!ai){re(we,Ke,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let Ze;try{Ze=ie(He)}catch{re(we,Ke,"Invalid Sec-WebSocket-Extensions header");return}const Ue=Object.keys(Ze);if(Ue.length!==1||Ue[0]!==U.extensionName){re(we,Ke,"Server indicated an extension that was not requested");return}try{ai.accept(Ze[U.extensionName])}catch{re(we,Ke,"Invalid Sec-WebSocket-Extensions header");return}we._extensions[U.extensionName]=ai}we.setSocket(Ke,ei,{allowSynchronousEvents:Ae.allowSynchronousEvents,generateMask:Ae.generateMask,maxPayload:Ae.maxPayload,skipUTF8Validation:Ae.skipUTF8Validation})})),Ae.finishRequest?Ae.finishRequest(We,we):We.end()}function se(we,Ee){we._readyState=xe.CLOSING,we._errorEmitted=!0,we.emit("error",Ee),we.emitClose()}function ye(we){return we.path=we.socketPath,x.connect(we)}function fe(we){return we.path=void 0,!we.servername&&we.servername!==""&&(we.servername=x.isIP(we.host)?"":we.host),j.connect(we)}function re(we,Ee,Oe){we._readyState=xe.CLOSING;const Ne=new Error(Oe);Error.captureStackTrace(Ne,re),Ee.setHeader?(Ee[te]=!0,Ee.abort(),Ee.socket&&!Ee.socket.destroyed&&Ee.socket.destroy(),process.nextTick(se,we,Ne)):(Ee.destroy(Ne),Ee.once("error",we.emit.bind(we,"error")),Ee.once("close",we.emitClose.bind(we)))}function ce(we,Ee,Oe){if(Ee){const Ne=B(Ee)?Ee.size:ae(Ee).length;we._socket?we._sender._bufferedBytes+=Ne:we._bufferedAmount+=Ne}if(Oe){const Ne=new Error(`WebSocket is not open: readyState ${we.readyState} (${de[we.readyState]})`);process.nextTick(Oe,Ne)}}function he(we,Ee){const Oe=this[X];Oe._closeFrameReceived=!0,Oe._closeMessage=Ee,Oe._closeCode=we,Oe._socket[X]!==void 0&&(Oe._socket.removeListener("data",$e),process.nextTick(me,Oe._socket),we===1005?Oe.close():Oe.close(we,Ee))}function ve(){const we=this[X];we.isPaused||we._socket.resume()}function je(we){const Ee=this[X];Ee._socket[X]!==void 0&&(Ee._socket.removeListener("data",$e),process.nextTick(me,Ee._socket),Ee.close(we[G])),Ee._errorEmitted||(Ee._errorEmitted=!0,Ee.emit("error",we))}function Ce(){this[X].emitClose()}function ge(we,Ee){this[X].emit("message",we,Ee)}function be(we){const Ee=this[X];Ee._autoPong&&Ee.pong(we,!this._isServer,K),Ee.emit("ping",we)}function pe(we){this[X].emit("pong",we)}function me(we){we.resume()}function Se(we){const Ee=this[X];Ee.readyState!==xe.CLOSED&&(Ee.readyState===xe.OPEN&&(Ee._readyState=xe.CLOSING,le(Ee)),this._socket.end(),Ee._errorEmitted||(Ee._errorEmitted=!0,Ee.emit("error",we)))}function le(we){we._closeTimer=setTimeout(we._socket.destroy.bind(we._socket),ne)}function ue(){const we=this[X];this.removeListener("close",ue),this.removeListener("data",$e),this.removeListener("end",Ie),we._readyState=xe.CLOSING;let Ee;!this._readableState.endEmitted&&!we._closeFrameReceived&&!we._receiver._writableState.errorEmitted&&(Ee=we._socket.read())!==null&&we._receiver.write(Ee),we._receiver.end(),this[X]=void 0,clearTimeout(we._closeTimer),we._receiver._writableState.finished||we._receiver._writableState.errorEmitted?we.emitClose():(we._receiver.on("error",Ce),we._receiver.on("finish",Ce))}function $e(we){this[X]._receiver.write(we)||this.pause()}function Ie(){const we=this[X];we._readyState=xe.CLOSING,we._receiver.end(),this.end()}function Re(){const we=this[X];this.removeListener("error",Re),this.on("error",K),we&&(we._readyState=xe.CLOSING,this.destroy())}},8327:module=>{module.exports=eval("require")("bufferutil")},75:module=>{module.exports=eval("require")("supports-color")},2414:module=>{module.exports=eval("require")("utf-8-validate")},2613:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("assert")},290:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("async_hooks")},181:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("buffer")},6982:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("crypto")},4434:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("events")},9896:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("fs")},8611:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("http")},5692:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("https")},9278:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("net")},4573:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:buffer")},8474:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:events")},3024:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:fs")},7067:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:http")},7030:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:net")},6760:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:path")},1792:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:querystring")},8522:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:zlib")},857:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("os")},6928:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("path")},3480:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("querystring")},2203:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("stream")},3193:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("string_decoder")},3557:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("timers")},4756:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("tls")},2018:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("tty")},7016:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("url")},9023:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("util")},3106:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("zlib")},2998:(r,t)=>{t.Emitter=u;function u(p){if(p)return d(p)}function d(p){for(var h in u.prototype)p[h]=u.prototype[h];return p}u.prototype.on=u.prototype.addEventListener=function(p,h){return this._callbacks=this._callbacks||{},(this._callbacks["$"+p]=this._callbacks["$"+p]||[]).push(h),this},u.prototype.once=function(p,h){function x(){this.off(p,x),h.apply(this,arguments)}return x.fn=h,this.on(p,x),this},u.prototype.off=u.prototype.removeListener=u.prototype.removeAllListeners=u.prototype.removeEventListener=function(p,h){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var x=this._callbacks["$"+p];if(!x)return this;if(arguments.length==1)return delete this._callbacks["$"+p],this;for(var j,b=0;b<x.length;b++)if(j=x[b],j===h||j.fn===h){x.splice(b,1);break}return x.length===0&&delete this._callbacks["$"+p],this},u.prototype.emit=function(p){this._callbacks=this._callbacks||{};for(var h=new Array(arguments.length-1),x=this._callbacks["$"+p],j=1;j<arguments.length;j++)h[j-1]=arguments[j];if(x){x=x.slice(0);for(var j=0,b=x.length;j<b;++j)x[j].apply(this,h)}return this},u.prototype.emitReserved=u.prototype.emit,u.prototype.listeners=function(p){return this._callbacks=this._callbacks||{},this._callbacks["$"+p]||[]},u.prototype.hasListeners=function(p){return!!this.listeners(p).length}},2717:(r,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ERROR_PACKET=t.PACKET_TYPES_REVERSE=t.PACKET_TYPES=void 0;const u=Object.create(null);t.PACKET_TYPES=u,u.open="0",u.close="1",u.ping="2",u.pong="3",u.message="4",u.upgrade="5",u.noop="6";const d=Object.create(null);t.PACKET_TYPES_REVERSE=d,Object.keys(u).forEach((h=>{d[u[h]]=h}));const p={type:"error",data:"parser error"};t.ERROR_PACKET=p},3377:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.decodePacket=void 0;const d=u(2717),p=(x,j)=>{if(typeof x!="string")return{type:"message",data:h(x,j)};const b=x.charAt(0);if(b==="b"){const w=Buffer.from(x.substring(1),"base64");return{type:"message",data:h(w,j)}}return d.PACKET_TYPES_REVERSE[b]?x.length>1?{type:d.PACKET_TYPES_REVERSE[b],data:x.substring(1)}:{type:d.PACKET_TYPES_REVERSE[b]}:d.ERROR_PACKET};t.decodePacket=p;const h=(x,j)=>j==="arraybuffer"?x instanceof ArrayBuffer?x:Buffer.isBuffer(x)?x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength):x.buffer:Buffer.isBuffer(x)?x:Buffer.from(x)},5897:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.encodePacket=void 0,t.encodePacketToBinary=j;const d=u(2717),p=({type:b,data:w},$,O)=>w instanceof ArrayBuffer||ArrayBuffer.isView(w)?O($?w:"b"+h(w,!0).toString("base64")):O(d.PACKET_TYPES[b]+(w||""));t.encodePacket=p;const h=(b,w)=>Buffer.isBuffer(b)||b instanceof Uint8Array&&!w?b:b instanceof ArrayBuffer?Buffer.from(b):Buffer.from(b.buffer,b.byteOffset,b.byteLength);let x;function j(b,w){if(b.data instanceof ArrayBuffer||ArrayBuffer.isView(b.data))return w(h(b.data,!1));(0,t.encodePacket)(b,!0,($=>{x||(x=new TextEncoder),w(x.encode($))}))}},8007:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.decodePayload=t.decodePacket=t.encodePayload=t.encodePacket=t.protocol=void 0,t.createPacketEncoderStream=w,t.createPacketDecoderStream=U;const d=u(5897);Object.defineProperty(t,"encodePacket",{enumerable:!0,get:function(){return d.encodePacket}});const p=u(3377);Object.defineProperty(t,"decodePacket",{enumerable:!0,get:function(){return p.decodePacket}});const h=u(2717),x="",j=(z,N)=>{const B=z.length,L=new Array(B);let W=0;z.forEach(((H,V)=>{(0,d.encodePacket)(H,!1,(J=>{L[V]=J,++W===B&&N(L.join(x))}))}))};t.encodePayload=j;const b=(z,N)=>{const B=z.split(x),L=[];for(let W=0;W<B.length;W++){const H=(0,p.decodePacket)(B[W],N);if(L.push(H),H.type==="error")break}return L};t.decodePayload=b;function w(){return new TransformStream({transform(z,N){(0,d.encodePacketToBinary)(z,(B=>{const L=B.length;let W;if(L<126)W=new Uint8Array(1),new DataView(W.buffer).setUint8(0,L);else if(L<65536){W=new Uint8Array(3);const H=new DataView(W.buffer);H.setUint8(0,126),H.setUint16(1,L)}else{W=new Uint8Array(9);const H=new DataView(W.buffer);H.setUint8(0,127),H.setBigUint64(1,BigInt(L))}z.data&&typeof z.data!="string"&&(W[0]|=128),N.enqueue(W),N.enqueue(B)}))}})}let $;function O(z){return z.reduce(((N,B)=>N+B.length),0)}function I(z,N){if(z[0].length===N)return z.shift();const B=new Uint8Array(N);let L=0;for(let W=0;W<N;W++)B[W]=z[0][L++],L===z[0].length&&(z.shift(),L=0);return z.length&&L<z[0].length&&(z[0]=z[0].slice(L)),B}function U(z,N){$||($=new TextDecoder);const B=[];let L=0,W=-1,H=!1;return new TransformStream({transform(V,J){for(B.push(V);;){if(L===0){if(O(B)<1)break;const G=I(B,1);H=(G[0]&128)===128,W=G[0]&127,W<126?L=3:W===126?L=1:L=2}else if(L===1){if(O(B)<2)break;const G=I(B,2);W=new DataView(G.buffer,G.byteOffset,G.length).getUint16(0),L=3}else if(L===2){if(O(B)<8)break;const G=I(B,8),X=new DataView(G.buffer,G.byteOffset,G.length),K=X.getUint32(0);if(K>Math.pow(2,21)-1){J.enqueue(h.ERROR_PACKET);break}W=K*Math.pow(2,32)+X.getUint32(4),L=3}else{if(O(B)<W)break;const G=I(B,W);J.enqueue((0,p.decodePacket)(H?G:$.decode(G),N)),L=0}if(W===0||W>z){J.enqueue(h.ERROR_PACKET);break}}}})}t.protocol=4},68:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.protocol=t.Transport=t.Socket=t.uServer=t.parser=t.transports=t.Server=void 0,t.listen=$,t.attach=O;const d=u(8611),p=u(2317);Object.defineProperty(t,"Server",{enumerable:!0,get:function(){return p.Server}});const h=u(2975);t.transports=h.default;const x=u(8007);t.parser=x;var j=u(2056);Object.defineProperty(t,"uServer",{enumerable:!0,get:function(){return j.uServer}});var b=u(3739);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return b.Socket}});var w=u(4621);Object.defineProperty(t,"Transport",{enumerable:!0,get:function(){return w.Transport}}),t.protocol=x.protocol;function $(I,U,z){typeof U=="function"&&(z=U,U={});const N=(0,d.createServer)((function(L,W){W.writeHead(501),W.end("Not Implemented")})),B=O(N,U);return B.httpServer=N,N.listen(I,z),B}function O(I,U){const z=new p.Server(U);return z.attach(I,U),z}},2674:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.packets=t.protocol=void 0,t.encodePacket=b,t.encodeBase64Packet=$,t.decodePacket=O,t.decodeBase64Packet=U,t.encodePayload=z,t.decodePayload=L,t.encodePayloadAsBinary=J,t.decodePayloadAsBinary=X;var d=u(4875);t.protocol=3;const p=K=>{for(const Y of K)if(Y.data instanceof ArrayBuffer||ArrayBuffer.isView(Y.data))return!0;return!1};t.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6};var h=Object.keys(t.packets),x={type:"error",data:"parser error"};const j=Buffer.concat([]);function b(K,Y,ee,Q){if(typeof Y=="function"&&(Q=Y,Y=null),typeof ee=="function"&&(Q=ee,ee=null),Buffer.isBuffer(K.data))return w(K,Y,Q);if(K.data&&(K.data.buffer||K.data)instanceof ArrayBuffer)return w({type:K.type,data:V(K.data)},Y,Q);var ie=t.packets[K.type];return K.data!==void 0&&(ie+=ee?d.encode(String(K.data),{strict:!1}):String(K.data)),Q(""+ie)}function w(K,Y,ee){if(!Y)return $(K,ee);var Q=K.data,ie=Buffer.allocUnsafe(1);return ie[0]=t.packets[K.type],ee(Buffer.concat([ie,Q]))}function $(K,Y){var ee=Buffer.isBuffer(K.data)?K.data:V(K.data),Q="b"+t.packets[K.type];return Q+=ee.toString("base64"),Y(Q)}function O(K,Y,ee){if(K===void 0)return x;let Q;if(typeof K=="string")return Q=K.charAt(0),Q==="b"?U(K.slice(1),Y):ee&&(K=I(K),K===!1)||Number(Q)!=Q||!h[Q]?x:K.length>1?{type:h[Q],data:K.slice(1)}:{type:h[Q]};if(Y==="arraybuffer"){var ie=new Uint8Array(K);return Q=ie[0],{type:h[Q],data:ie.buffer.slice(1)}}return K instanceof ArrayBuffer&&(K=V(K)),Q=K[0],{type:h[Q],data:K.slice(1)}}function I(K){try{K=d.decode(K,{strict:!1})}catch{return!1}return K}function U(K,Y){var ee=h[K.charAt(0)],Q=Buffer.from(K.slice(1),"base64");if(Y==="arraybuffer"){for(var ie=new Uint8Array(Q.length),ae=0;ae<ie.length;ae++)ie[ae]=Q[ae];Q=ie.buffer}return{type:ee,data:Q}}function z(K,Y,ee){if(typeof Y=="function"&&(ee=Y,Y=null),Y&&p(K))return J(K,ee);if(!K.length)return ee("0:");function Q(ie,ae){b(ie,Y,!1,(function(ne){ae(null,N(ne))}))}B(K,Q,(function(ie,ae){return ee(ae.join(""))}))}function N(K){return K.length+":"+K}function B(K,Y,ee){const Q=new Array(K.length);let ie=0;for(let ae=0;ae<K.length;ae++)Y(K[ae],((ne,te)=>{Q[ae]=te,++ie===K.length&&ee(null,Q)}))}function L(K,Y,ee){if(typeof K!="string")return X(K,Y,ee);if(typeof Y=="function"&&(ee=Y,Y=null),K==="")return ee(x,0,1);for(var Q="",ie,ae,ne,te=0,oe=K.length;te<oe;te++){var de=K.charAt(te);if(de!==":"){Q+=de;continue}if(Q===""||Q!=(ie=Number(Q))||(ae=K.slice(te+1,te+1+ie),Q!=ae.length))return ee(x,0,1);if(ae.length){if(ne=O(ae,Y,!1),x.type===ne.type&&x.data===ne.data)return ee(x,0,1);var ke=ee(ne,te+ie,oe);if(ke===!1)return}te+=ie,Q=""}if(Q!=="")return ee(x,0,1)}function W(K){for(var Y="",ee=0,Q=K.length;ee<Q;ee++)Y+=String.fromCharCode(K[ee]);return Y}function H(K){for(var Y=Buffer.allocUnsafe(K.length),ee=0,Q=K.length;ee<Q;ee++)Y.writeUInt8(K.charCodeAt(ee),ee);return Y}function V(K){var Y=K.byteLength||K.length,ee=K.byteOffset||0;return Buffer.from(K.buffer||K,ee,Y)}function J(K,Y){if(!K.length)return Y(j);B(K,G,(function(ee,Q){return Y(Buffer.concat(Q))}))}function G(K,Y){function ee(Q){var ie=""+Q.length,ae;if(typeof Q=="string"){ae=Buffer.allocUnsafe(ie.length+2),ae[0]=0;for(var ne=0;ne<ie.length;ne++)ae[ne+1]=parseInt(ie[ne],10);return ae[ae.length-1]=255,Y(null,Buffer.concat([ae,H(Q)]))}ae=Buffer.allocUnsafe(ie.length+2),ae[0]=1;for(var ne=0;ne<ie.length;ne++)ae[ne+1]=parseInt(ie[ne],10);ae[ae.length-1]=255,Y(null,Buffer.concat([ae,Q]))}b(K,!0,!0,ee)}function X(K,Y,ee){typeof Y=="function"&&(ee=Y,Y=null);for(var Q=K,ie=[],ae;Q.length>0;){var ne="",te=Q[0]===0;for(ae=1;Q[ae]!==255;ae++){if(ne.length>310)return ee(x,0,1);ne+=""+Q[ae]}Q=Q.slice(ne.length+1);var oe=parseInt(ne,10),de=Q.slice(1,oe+1);te&&(de=W(de)),ie.push(de),Q=Q.slice(oe+1)}var ke=ie.length;for(ae=0;ae<ke;ae++){var xe=ie[ae];ee(O(xe,Y,!0),ae,ke)}}},4875:r=>{/*! https://mths.be/utf8js v2.1.2 by @mathias */var t=String.fromCharCode;function u(z){for(var N=[],B=0,L=z.length,W,H;B<L;)W=z.charCodeAt(B++),W>=55296&&W<=56319&&B<L?(H=z.charCodeAt(B++),(H&64512)==56320?N.push(((W&1023)<<10)+(H&1023)+65536):(N.push(W),B--)):N.push(W);return N}function d(z){for(var N=z.length,B=-1,L,W="";++B<N;)L=z[B],L>65535&&(L-=65536,W+=t(L>>>10&1023|55296),L=56320|L&1023),W+=t(L);return W}function p(z,N){if(z>=55296&&z<=57343){if(N)throw Error("Lone surrogate U+"+z.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function h(z,N){return t(z>>N&63|128)}function x(z,N){if((z&4294967168)==0)return t(z);var B="";return(z&4294965248)==0?B=t(z>>6&31|192):(z&4294901760)==0?(p(z,N)||(z=65533),B=t(z>>12&15|224),B+=h(z,6)):(z&4292870144)==0&&(B=t(z>>18&7|240),B+=h(z,12),B+=h(z,6)),B+=t(z&63|128),B}function j(z,N){N=N||{};for(var B=N.strict!==!1,L=u(z),W=L.length,H=-1,V,J="";++H<W;)V=L[H],J+=x(V,B);return J}function b(){if(I>=O)throw Error("Invalid byte index");var z=$[I]&255;if(I++,(z&192)==128)return z&63;throw Error("Invalid continuation byte")}function w(z){var N,B,L,W,H;if(I>O)throw Error("Invalid byte index");if(I==O)return!1;if(N=$[I]&255,I++,(N&128)==0)return N;if((N&224)==192){if(B=b(),H=(N&31)<<6|B,H>=128)return H;throw Error("Invalid continuation byte")}if((N&240)==224){if(B=b(),L=b(),H=(N&15)<<12|B<<6|L,H>=2048)return p(H,z)?H:65533;throw Error("Invalid continuation byte")}if((N&248)==240&&(B=b(),L=b(),W=b(),H=(N&7)<<18|B<<12|L<<6|W,H>=65536&&H<=1114111))return H;throw Error("Invalid UTF-8 detected")}var $,O,I;function U(z,N){N=N||{};var B=N.strict!==!1;$=u(z),O=$.length,I=0;for(var L=[],W;(W=w(B))!==!1;)L.push(W);return d(L)}r.exports={version:"2.1.2",encode:j,decode:U}},2317:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Server=t.BaseServer=void 0;const d=u(1942),p=u(2975),h=u(4434),x=u(3739),j=u(2830),b=u(3814),w=u(1354),$=u(8868),O=u(8007),I=(0,j.default)("engine"),U=Symbol("responseHeaders");function z(G){try{const X=JSON.parse(G);if(typeof X.sid=="string")return X.sid}catch{}}class N extends h.EventEmitter{constructor(X={}){super(),this.middlewares=[],this.clients={},this.clientsCount=0,this.opts=Object.assign({wsEngine:w.Server,pingTimeout:2e4,pingInterval:25e3,upgradeTimeout:1e4,maxHttpBufferSize:1e6,transports:["polling","websocket"],allowUpgrades:!0,httpCompression:{threshold:1024},cors:!1,allowEIO3:!1},X),X.cookie&&(this.opts.cookie=Object.assign({name:"io",path:"/",httpOnly:X.cookie.path!==!1,sameSite:"lax"},X.cookie)),this.opts.cors&&this.use(u(4085)(this.opts.cors)),X.perMessageDeflate&&(this.opts.perMessageDeflate=Object.assign({threshold:1024},X.perMessageDeflate)),this.init()}_computePath(X){let K=(X.path||"/engine.io").replace(/\/$/,"");return X.addTrailingSlash!==!1&&(K+="/"),K}upgrades(X){return this.opts.allowUpgrades?p.default[X].upgradesTo||[]:[]}verify(X,K,Y){const ee=X._query.transport;if(!~this.opts.transports.indexOf(ee)||ee==="webtransport")return I('unknown transport "%s"',ee),Y(L.errors.UNKNOWN_TRANSPORT,{transport:ee});if(J(X.headers.origin)){const ae=X.headers.origin;return X.headers.origin=null,I("origin header invalid"),Y(L.errors.BAD_REQUEST,{name:"INVALID_ORIGIN",origin:ae})}const ie=X._query.sid;if(ie){if(!this.clients.hasOwnProperty(ie))return I('unknown sid "%s"',ie),Y(L.errors.UNKNOWN_SID,{sid:ie});const ae=this.clients[ie].transport.name;if(!K&&ae!==ee)return I("bad request: unexpected transport without upgrade"),Y(L.errors.BAD_REQUEST,{name:"TRANSPORT_MISMATCH",transport:ee,previousTransport:ae})}else return X.method!=="GET"?Y(L.errors.BAD_HANDSHAKE_METHOD,{method:X.method}):ee==="websocket"&&!K?(I("invalid transport upgrade"),Y(L.errors.BAD_REQUEST,{name:"TRANSPORT_HANDSHAKE_ERROR"})):this.opts.allowRequest?this.opts.allowRequest(X,((ae,ne)=>{if(!ne)return Y(L.errors.FORBIDDEN,{message:ae});Y()})):Y();Y()}use(X){this.middlewares.push(X)}_applyMiddlewares(X,K,Y){if(this.middlewares.length===0)return I("no middleware to apply, skipping"),Y();const ee=Q=>{I("applying middleware n\xB0%d",Q+1),this.middlewares[Q](X,K,(ie=>{if(ie)return Y(ie);Q+1<this.middlewares.length?ee(Q+1):Y()}))};ee(0)}close(){I("closing all open clients");for(let X in this.clients)this.clients.hasOwnProperty(X)&&this.clients[X].close(!0);return this.cleanup(),this}generateId(X){return d.generateId()}async handshake(X,K,Y){const ee=K._query.EIO==="4"?4:3;if(ee===3&&!this.opts.allowEIO3){I("unsupported protocol version"),this.emit("connection_error",{req:K,code:L.errors.UNSUPPORTED_PROTOCOL_VERSION,message:L.errorMessages[L.errors.UNSUPPORTED_PROTOCOL_VERSION],context:{protocol:ee}}),Y(L.errors.UNSUPPORTED_PROTOCOL_VERSION);return}let Q;try{Q=await this.generateId(K)}catch(ne){I("error while generating an id"),this.emit("connection_error",{req:K,code:L.errors.BAD_REQUEST,message:L.errorMessages[L.errors.BAD_REQUEST],context:{name:"ID_GENERATION_ERROR",error:ne}}),Y(L.errors.BAD_REQUEST);return}I('handshaking client "%s"',Q);try{var ie=this.createTransport(X,K);X==="polling"?(ie.maxHttpBufferSize=this.opts.maxHttpBufferSize,ie.httpCompression=this.opts.httpCompression):X==="websocket"&&(ie.perMessageDeflate=this.opts.perMessageDeflate)}catch(ne){I('error handshaking to transport "%s"',X),this.emit("connection_error",{req:K,code:L.errors.BAD_REQUEST,message:L.errorMessages[L.errors.BAD_REQUEST],context:{name:"TRANSPORT_HANDSHAKE_ERROR",error:ne}}),Y(L.errors.BAD_REQUEST);return}const ae=new x.Socket(Q,this,ie,K,ee);return ie.on("headers",((ne,te)=>{!te._query.sid&&(this.opts.cookie&&(ne["Set-Cookie"]=[(0,b.serialize)(this.opts.cookie.name,Q,this.opts.cookie)]),this.emit("initial_headers",ne,te)),this.emit("headers",ne,te)})),ie.onRequest(K),this.clients[Q]=ae,this.clientsCount++,ae.once("close",(()=>{delete this.clients[Q],this.clientsCount--})),this.emit("connection",ae),ie}async onWebTransportSession(X){const K=setTimeout((()=>{I("the client failed to establish a bidirectional stream in the given period"),X.close()}),this.opts.upgradeTimeout),ee=await X.incomingBidirectionalStreams.getReader().read();if(ee.done){I("session is closed");return}const Q=ee.value,ie=(0,O.createPacketDecoderStream)(this.opts.maxHttpBufferSize,"nodebuffer"),ae=Q.readable.pipeThrough(ie).getReader(),{value:ne,done:te}=await ae.read();if(te){I("stream is closed");return}if(clearTimeout(K),ne.type!=="open")return I("invalid WebTransport handshake"),X.close();if(ne.data===void 0){const ke=new $.WebTransport(X,Q,ae),xe=d.generateId();I('handshaking client "%s" (WebTransport)',xe);const _e=new x.Socket(xe,this,ke,null,4);this.clients[xe]=_e,this.clientsCount++,_e.once("close",(()=>{delete this.clients[xe],this.clientsCount--})),this.emit("connection",_e);return}const oe=z(ne.data);if(!oe)return I("invalid WebTransport handshake"),X.close();const de=this.clients[oe];if(!de)I("upgrade attempt for closed client"),X.close();else if(de.upgrading)I("transport has already been trying to upgrade"),X.close();else if(de.upgraded)I("transport had already been upgraded"),X.close();else{I("upgrading existing transport");const ke=new $.WebTransport(X,Q,ae);de._maybeUpgrade(ke)}}}t.BaseServer=N,N.errors={UNKNOWN_TRANSPORT:0,UNKNOWN_SID:1,BAD_HANDSHAKE_METHOD:2,BAD_REQUEST:3,FORBIDDEN:4,UNSUPPORTED_PROTOCOL_VERSION:5},N.errorMessages={0:"Transport unknown",1:"Session ID unknown",2:"Bad handshake method",3:"Bad request",4:"Forbidden",5:"Unsupported protocol version"};class B{constructor(X,K){this.req=X,this.socket=K,X[U]={}}setHeader(X,K){this.req[U][X]=K}getHeader(X){return this.req[U][X]}removeHeader(X){delete this.req[U][X]}write(){}writeHead(){}end(){this.socket.destroy()}}class L extends N{init(){~this.opts.transports.indexOf("websocket")&&(this.ws&&this.ws.close(),this.ws=new this.opts.wsEngine({noServer:!0,clientTracking:!1,perMessageDeflate:this.opts.perMessageDeflate,maxPayload:this.opts.maxHttpBufferSize}),typeof this.ws.on=="function"&&this.ws.on("headers",((X,K)=>{const Y=K[U]||{};delete K[U],!K._query.sid&&this.emit("initial_headers",Y,K),this.emit("headers",Y,K),I("writing headers: %j",Y),Object.keys(Y).forEach((Q=>{X.push(`${Q}: ${Y[Q]}`)}))})))}cleanup(){this.ws&&(I("closing webSocketServer"),this.ws.close())}prepare(X){if(!X._query){const K=new URL(X.url,"https://socket.io");X._query=Object.fromEntries(K.searchParams.entries())}}createTransport(X,K){return new p.default[X](K)}handleRequest(X,K){I('handling "%s" http request "%s"',X.method,X.url),this.prepare(X),X.res=K;const Y=(ee,Q)=>{if(ee!==void 0){this.emit("connection_error",{req:X,code:ee,message:L.errorMessages[ee],context:Q}),W(K,ee,Q);return}if(X._query.sid)I("setting new request for existing client"),this.clients[X._query.sid].transport.onRequest(X);else{const ie=(ae,ne)=>W(K,ae,ne);this.handshake(X._query.transport,X,ie)}};this._applyMiddlewares(X,K,(ee=>{ee?Y(L.errors.BAD_REQUEST,{name:"MIDDLEWARE_FAILURE"}):this.verify(X,!1,Y)}))}handleUpgrade(X,K,Y){this.prepare(X);const ee=new B(X,K),Q=(ie,ae)=>{if(ie!==void 0){this.emit("connection_error",{req:X,code:ie,message:L.errorMessages[ie],context:ae}),H(K,ie,ae);return}const ne=Buffer.from(Y);Y=null,ee.writeHead(),this.ws.handleUpgrade(X,K,ne,(te=>{this.onWebSocket(X,K,te)}))};this._applyMiddlewares(X,ee,(ie=>{ie?Q(L.errors.BAD_REQUEST,{name:"MIDDLEWARE_FAILURE"}):this.verify(X,!0,Q)}))}onWebSocket(X,K,Y){if(Y.on("error",Q),p.default[X._query.transport]!==void 0&&!p.default[X._query.transport].prototype.handlesUpgrades){I("transport doesnt handle upgraded requests"),Y.close();return}const ee=X._query.sid;if(X.websocket=Y,ee){const ie=this.clients[ee];if(!ie)I("upgrade attempt for closed client"),Y.close();else if(ie.upgrading)I("transport has already been trying to upgrade"),Y.close();else if(ie.upgraded)I("transport had already been upgraded"),Y.close();else{I("upgrading existing transport"),Y.removeListener("error",Q);const ae=this.createTransport(X._query.transport,X);ae.perMessageDeflate=this.opts.perMessageDeflate,ie._maybeUpgrade(ae)}}else{const ie=(ae,ne)=>H(K,ae,ne);this.handshake(X._query.transport,X,ie)}function Q(){I("websocket error before upgrade")}}attach(X,K={}){const Y=this._computePath(K),ee=K.destroyUpgradeTimeout||1e3;function Q(ae){return Y===ae.url.slice(0,Y.length)}const ie=X.listeners("request").slice(0);X.removeAllListeners("request"),X.on("close",this.close.bind(this)),X.on("listening",this.init.bind(this)),X.on("request",((ae,ne)=>{if(Q(ae))I('intercepting request for path "%s"',Y),this.handleRequest(ae,ne);else{let te=0;const oe=ie.length;for(;te<oe;te++)ie[te].call(X,ae,ne)}})),~this.opts.transports.indexOf("websocket")&&X.on("upgrade",((ae,ne,te)=>{Q(ae)?this.handleUpgrade(ae,ne,te):K.destroyUpgrade!==!1&&setTimeout((function(){if(ne.writable&&ne.bytesWritten<=0)return ne.on("error",(oe=>{I("error while destroying upgrade: %s",oe.message)})),ne.end()}),ee)}))}}t.Server=L;function W(G,X,K){const Y=X===L.errors.FORBIDDEN?403:400,ee=K&&K.message?K.message:L.errorMessages[X];G.writeHead(Y,{"Content-Type":"application/json"}),G.end(JSON.stringify({code:X,message:ee}))}function H(G,X,K={}){if(G.on("error",(()=>{I("ignoring error from closed connection")})),G.writable){const Y=K.message||L.errorMessages[X],ee=Buffer.byteLength(Y);G.write(`HTTP/1.1 400 Bad Request\r
360
+ `+Y)}function G(X,K,Y,ee,Q,ie){if(X.listenerCount("wsClientError")){const ae=new Error(Q);Error.captureStackTrace(ae,G),X.emit("wsClientError",ae,Y,K)}else J(Y,ee,Q,ie)}},6681:(r,t,u)=>{const d=u(4434),p=u(5692),h=u(8611),x=u(9278),j=u(4756),{randomBytes:b,createHash:w}=u(6982),{Duplex:$,Readable:O}=u(2203),{URL:I}=u(7016),U=u(4376),z=u(893),N=u(7389),{isBlob:B}=u(6615),{BINARY_TYPES:L,EMPTY_BUFFER:W,GUID:H,kForOnEventAttribute:V,kListener:J,kStatusCode:G,kWebSocket:X,NOOP:K}=u(1791),{EventTarget:{addEventListener:Y,removeEventListener:ee}}=u(4634),{format:Q,parse:ie}=u(1335),{toBuffer:ae}=u(5803),ne=30*1e3,te=Symbol("kAborted"),oe=[8,13],de=["CONNECTING","OPEN","CLOSING","CLOSED"],ke=/^[!#$%&'*+\-.0-9A-Z^_`|a-z~]+$/;class xe extends d{constructor(Ee,Oe,Ne){super(),this._binaryType=L[0],this._closeCode=1006,this._closeFrameReceived=!1,this._closeFrameSent=!1,this._closeMessage=W,this._closeTimer=null,this._errorEmitted=!1,this._extensions={},this._paused=!1,this._protocol="",this._readyState=xe.CONNECTING,this._receiver=null,this._sender=null,this._socket=null,Ee!==null?(this._bufferedAmount=0,this._isServer=!1,this._redirects=0,Oe===void 0?Oe=[]:Array.isArray(Oe)||(typeof Oe=="object"&&Oe!==null?(Ne=Oe,Oe=[]):Oe=[Oe]),_e(this,Ee,Oe,Ne)):(this._autoPong=Ne.autoPong,this._isServer=!0)}get binaryType(){return this._binaryType}set binaryType(Ee){L.includes(Ee)&&(this._binaryType=Ee,this._receiver&&(this._receiver._binaryType=Ee))}get bufferedAmount(){return this._socket?this._socket._writableState.length+this._sender._bufferedBytes:this._bufferedAmount}get extensions(){return Object.keys(this._extensions).join()}get isPaused(){return this._paused}get onclose(){return null}get onerror(){return null}get onopen(){return null}get onmessage(){return null}get protocol(){return this._protocol}get readyState(){return this._readyState}get url(){return this._url}setSocket(Ee,Oe,Ne){const Ae=new z({allowSynchronousEvents:Ne.allowSynchronousEvents,binaryType:this.binaryType,extensions:this._extensions,isServer:this._isServer,maxPayload:Ne.maxPayload,skipUTF8Validation:Ne.skipUTF8Validation}),qe=new N(Ee,this._extensions,Ne.generateMask);this._receiver=Ae,this._sender=qe,this._socket=Ee,Ae[X]=this,qe[X]=this,Ee[X]=this,Ae.on("conclude",he),Ae.on("drain",ve),Ae.on("error",je),Ae.on("message",ge),Ae.on("ping",be),Ae.on("pong",pe),qe.onerror=Se,Ee.setTimeout&&Ee.setTimeout(0),Ee.setNoDelay&&Ee.setNoDelay(),Oe.length>0&&Ee.unshift(Oe),Ee.on("close",ue),Ee.on("data",$e),Ee.on("end",Ie),Ee.on("error",Re),this._readyState=xe.OPEN,this.emit("open")}emitClose(){if(!this._socket){this._readyState=xe.CLOSED,this.emit("close",this._closeCode,this._closeMessage);return}this._extensions[U.extensionName]&&this._extensions[U.extensionName].cleanup(),this._receiver.removeAllListeners(),this._readyState=xe.CLOSED,this.emit("close",this._closeCode,this._closeMessage)}close(Ee,Oe){if(this.readyState!==xe.CLOSED){if(this.readyState===xe.CONNECTING){re(this,this._req,"WebSocket was closed before the connection was established");return}if(this.readyState===xe.CLOSING){this._closeFrameSent&&(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end();return}this._readyState=xe.CLOSING,this._sender.close(Ee,Oe,!this._isServer,(Ne=>{Ne||(this._closeFrameSent=!0,(this._closeFrameReceived||this._receiver._writableState.errorEmitted)&&this._socket.end())})),le(this)}}pause(){this.readyState===xe.CONNECTING||this.readyState===xe.CLOSED||(this._paused=!0,this._socket.pause())}ping(Ee,Oe,Ne){if(this.readyState===xe.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof Ee=="function"?(Ne=Ee,Ee=Oe=void 0):typeof Oe=="function"&&(Ne=Oe,Oe=void 0),typeof Ee=="number"&&(Ee=Ee.toString()),this.readyState!==xe.OPEN){ce(this,Ee,Ne);return}Oe===void 0&&(Oe=!this._isServer),this._sender.ping(Ee||W,Oe,Ne)}pong(Ee,Oe,Ne){if(this.readyState===xe.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof Ee=="function"?(Ne=Ee,Ee=Oe=void 0):typeof Oe=="function"&&(Ne=Oe,Oe=void 0),typeof Ee=="number"&&(Ee=Ee.toString()),this.readyState!==xe.OPEN){ce(this,Ee,Ne);return}Oe===void 0&&(Oe=!this._isServer),this._sender.pong(Ee||W,Oe,Ne)}resume(){this.readyState===xe.CONNECTING||this.readyState===xe.CLOSED||(this._paused=!1,this._receiver._writableState.needDrain||this._socket.resume())}send(Ee,Oe,Ne){if(this.readyState===xe.CONNECTING)throw new Error("WebSocket is not open: readyState 0 (CONNECTING)");if(typeof Oe=="function"&&(Ne=Oe,Oe={}),typeof Ee=="number"&&(Ee=Ee.toString()),this.readyState!==xe.OPEN){ce(this,Ee,Ne);return}const Ae={binary:typeof Ee!="string",mask:!this._isServer,compress:!0,fin:!0,...Oe};this._extensions[U.extensionName]||(Ae.compress=!1),this._sender.send(Ee||W,Ae,Ne)}terminate(){if(this.readyState!==xe.CLOSED){if(this.readyState===xe.CONNECTING){re(this,this._req,"WebSocket was closed before the connection was established");return}this._socket&&(this._readyState=xe.CLOSING,this._socket.destroy())}}}Object.defineProperty(xe,"CONNECTING",{enumerable:!0,value:de.indexOf("CONNECTING")}),Object.defineProperty(xe.prototype,"CONNECTING",{enumerable:!0,value:de.indexOf("CONNECTING")}),Object.defineProperty(xe,"OPEN",{enumerable:!0,value:de.indexOf("OPEN")}),Object.defineProperty(xe.prototype,"OPEN",{enumerable:!0,value:de.indexOf("OPEN")}),Object.defineProperty(xe,"CLOSING",{enumerable:!0,value:de.indexOf("CLOSING")}),Object.defineProperty(xe.prototype,"CLOSING",{enumerable:!0,value:de.indexOf("CLOSING")}),Object.defineProperty(xe,"CLOSED",{enumerable:!0,value:de.indexOf("CLOSED")}),Object.defineProperty(xe.prototype,"CLOSED",{enumerable:!0,value:de.indexOf("CLOSED")}),["binaryType","bufferedAmount","extensions","isPaused","protocol","readyState","url"].forEach((we=>{Object.defineProperty(xe.prototype,we,{enumerable:!0})})),["open","error","close","message"].forEach((we=>{Object.defineProperty(xe.prototype,`on${we}`,{enumerable:!0,get(){for(const Ee of this.listeners(we))if(Ee[V])return Ee[J];return null},set(Ee){for(const Oe of this.listeners(we))if(Oe[V]){this.removeListener(we,Oe);break}typeof Ee=="function"&&this.addEventListener(we,Ee,{[V]:!0})}})})),xe.prototype.addEventListener=Y,xe.prototype.removeEventListener=ee,r.exports=xe;function _e(we,Ee,Oe,Ne){const Ae={allowSynchronousEvents:!0,autoPong:!0,protocolVersion:oe[1],maxPayload:104857600,skipUTF8Validation:!1,perMessageDeflate:!0,followRedirects:!1,maxRedirects:10,...Ne,socketPath:void 0,hostname:void 0,protocol:void 0,timeout:void 0,method:"GET",host:void 0,path:void 0,port:void 0};if(we._autoPong=Ae.autoPong,!oe.includes(Ae.protocolVersion))throw new RangeError(`Unsupported protocol version: ${Ae.protocolVersion} (supported versions: ${oe.join(", ")})`);let qe;if(Ee instanceof I)qe=Ee;else try{qe=new I(Ee)}catch{throw new SyntaxError(`Invalid URL: ${Ee}`)}qe.protocol==="http:"?qe.protocol="ws:":qe.protocol==="https:"&&(qe.protocol="wss:"),we._url=qe.href;const De=qe.protocol==="wss:",ze=qe.protocol==="ws+unix:";let Fe;if(qe.protocol!=="ws:"&&!De&&!ze?Fe=`The URL's protocol must be one of "ws:", "wss:", "http:", "https:", or "ws+unix:"`:ze&&!qe.pathname?Fe="The URL's pathname is empty":qe.hash&&(Fe="The URL contains a fragment identifier"),Fe){const Be=new SyntaxError(Fe);if(we._redirects===0)throw Be;se(we,Be);return}const Ge=De?443:80,Me=b(16).toString("base64"),Ve=De?p.request:h.request,Je=new Set;let ai;if(Ae.createConnection=Ae.createConnection||(De?fe:ye),Ae.defaultPort=Ae.defaultPort||Ge,Ae.port=qe.port||Ge,Ae.host=qe.hostname.startsWith("[")?qe.hostname.slice(1,-1):qe.hostname,Ae.headers={...Ae.headers,"Sec-WebSocket-Version":Ae.protocolVersion,"Sec-WebSocket-Key":Me,Connection:"Upgrade",Upgrade:"websocket"},Ae.path=qe.pathname+qe.search,Ae.timeout=Ae.handshakeTimeout,Ae.perMessageDeflate&&(ai=new U(Ae.perMessageDeflate!==!0?Ae.perMessageDeflate:{},!1,Ae.maxPayload),Ae.headers["Sec-WebSocket-Extensions"]=Q({[U.extensionName]:ai.offer()})),Oe.length){for(const Be of Oe){if(typeof Be!="string"||!ke.test(Be)||Je.has(Be))throw new SyntaxError("An invalid or duplicated subprotocol was specified");Je.add(Be)}Ae.headers["Sec-WebSocket-Protocol"]=Oe.join(",")}if(Ae.origin&&(Ae.protocolVersion<13?Ae.headers["Sec-WebSocket-Origin"]=Ae.origin:Ae.headers.Origin=Ae.origin),(qe.username||qe.password)&&(Ae.auth=`${qe.username}:${qe.password}`),ze){const Be=Ae.path.split(":");Ae.socketPath=Be[0],Ae.path=Be[1]}let We;if(Ae.followRedirects){if(we._redirects===0){we._originalIpc=ze,we._originalSecure=De,we._originalHostOrSocketPath=ze?Ae.socketPath:qe.host;const Be=Ne&&Ne.headers;if(Ne={...Ne,headers:{}},Be)for(const[Ke,ei]of Object.entries(Be))Ne.headers[Ke.toLowerCase()]=ei}else if(we.listenerCount("redirect")===0){const Be=ze?we._originalIpc?Ae.socketPath===we._originalHostOrSocketPath:!1:we._originalIpc?!1:qe.host===we._originalHostOrSocketPath;(!Be||we._originalSecure&&!De)&&(delete Ae.headers.authorization,delete Ae.headers.cookie,Be||delete Ae.headers.host,Ae.auth=void 0)}Ae.auth&&!Ne.headers.authorization&&(Ne.headers.authorization="Basic "+Buffer.from(Ae.auth).toString("base64")),We=we._req=Ve(Ae),we._redirects&&we.emit("redirect",we.url,We)}else We=we._req=Ve(Ae);Ae.timeout&&We.on("timeout",(()=>{re(we,We,"Opening handshake has timed out")})),We.on("error",(Be=>{We===null||We[te]||(We=we._req=null,se(we,Be))})),We.on("response",(Be=>{const Ke=Be.headers.location,ei=Be.statusCode;if(Ke&&Ae.followRedirects&&ei>=300&&ei<400){if(++we._redirects>Ae.maxRedirects){re(we,We,"Maximum redirects exceeded");return}We.abort();let ii;try{ii=new I(Ke,Ee)}catch{const Pe=new SyntaxError(`Invalid URL: ${Ke}`);se(we,Pe);return}_e(we,ii,Oe,Ne)}else we.emit("unexpected-response",We,Be)||re(we,We,`Unexpected server response: ${Be.statusCode}`)})),We.on("upgrade",((Be,Ke,ei)=>{if(we.emit("upgrade",Be),we.readyState!==xe.CONNECTING)return;We=we._req=null;const ii=Be.headers.upgrade;if(ii===void 0||ii.toLowerCase()!=="websocket"){re(we,Ke,"Invalid Upgrade header");return}const Te=w("sha1").update(Me+H).digest("base64");if(Be.headers["sec-websocket-accept"]!==Te){re(we,Ke,"Invalid Sec-WebSocket-Accept header");return}const Pe=Be.headers["sec-websocket-protocol"];let Le;if(Pe!==void 0?Je.size?Je.has(Pe)||(Le="Server sent an invalid subprotocol"):Le="Server sent a subprotocol but none was requested":Je.size&&(Le="Server sent no subprotocol"),Le){re(we,Ke,Le);return}Pe&&(we._protocol=Pe);const Ze=Be.headers["sec-websocket-extensions"];if(Ze!==void 0){if(!ai){re(we,Ke,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let He;try{He=ie(Ze)}catch{re(we,Ke,"Invalid Sec-WebSocket-Extensions header");return}const Ue=Object.keys(He);if(Ue.length!==1||Ue[0]!==U.extensionName){re(we,Ke,"Server indicated an extension that was not requested");return}try{ai.accept(He[U.extensionName])}catch{re(we,Ke,"Invalid Sec-WebSocket-Extensions header");return}we._extensions[U.extensionName]=ai}we.setSocket(Ke,ei,{allowSynchronousEvents:Ae.allowSynchronousEvents,generateMask:Ae.generateMask,maxPayload:Ae.maxPayload,skipUTF8Validation:Ae.skipUTF8Validation})})),Ae.finishRequest?Ae.finishRequest(We,we):We.end()}function se(we,Ee){we._readyState=xe.CLOSING,we._errorEmitted=!0,we.emit("error",Ee),we.emitClose()}function ye(we){return we.path=we.socketPath,x.connect(we)}function fe(we){return we.path=void 0,!we.servername&&we.servername!==""&&(we.servername=x.isIP(we.host)?"":we.host),j.connect(we)}function re(we,Ee,Oe){we._readyState=xe.CLOSING;const Ne=new Error(Oe);Error.captureStackTrace(Ne,re),Ee.setHeader?(Ee[te]=!0,Ee.abort(),Ee.socket&&!Ee.socket.destroyed&&Ee.socket.destroy(),process.nextTick(se,we,Ne)):(Ee.destroy(Ne),Ee.once("error",we.emit.bind(we,"error")),Ee.once("close",we.emitClose.bind(we)))}function ce(we,Ee,Oe){if(Ee){const Ne=B(Ee)?Ee.size:ae(Ee).length;we._socket?we._sender._bufferedBytes+=Ne:we._bufferedAmount+=Ne}if(Oe){const Ne=new Error(`WebSocket is not open: readyState ${we.readyState} (${de[we.readyState]})`);process.nextTick(Oe,Ne)}}function he(we,Ee){const Oe=this[X];Oe._closeFrameReceived=!0,Oe._closeMessage=Ee,Oe._closeCode=we,Oe._socket[X]!==void 0&&(Oe._socket.removeListener("data",$e),process.nextTick(me,Oe._socket),we===1005?Oe.close():Oe.close(we,Ee))}function ve(){const we=this[X];we.isPaused||we._socket.resume()}function je(we){const Ee=this[X];Ee._socket[X]!==void 0&&(Ee._socket.removeListener("data",$e),process.nextTick(me,Ee._socket),Ee.close(we[G])),Ee._errorEmitted||(Ee._errorEmitted=!0,Ee.emit("error",we))}function Ce(){this[X].emitClose()}function ge(we,Ee){this[X].emit("message",we,Ee)}function be(we){const Ee=this[X];Ee._autoPong&&Ee.pong(we,!this._isServer,K),Ee.emit("ping",we)}function pe(we){this[X].emit("pong",we)}function me(we){we.resume()}function Se(we){const Ee=this[X];Ee.readyState!==xe.CLOSED&&(Ee.readyState===xe.OPEN&&(Ee._readyState=xe.CLOSING,le(Ee)),this._socket.end(),Ee._errorEmitted||(Ee._errorEmitted=!0,Ee.emit("error",we)))}function le(we){we._closeTimer=setTimeout(we._socket.destroy.bind(we._socket),ne)}function ue(){const we=this[X];this.removeListener("close",ue),this.removeListener("data",$e),this.removeListener("end",Ie),we._readyState=xe.CLOSING;let Ee;!this._readableState.endEmitted&&!we._closeFrameReceived&&!we._receiver._writableState.errorEmitted&&(Ee=we._socket.read())!==null&&we._receiver.write(Ee),we._receiver.end(),this[X]=void 0,clearTimeout(we._closeTimer),we._receiver._writableState.finished||we._receiver._writableState.errorEmitted?we.emitClose():(we._receiver.on("error",Ce),we._receiver.on("finish",Ce))}function $e(we){this[X]._receiver.write(we)||this.pause()}function Ie(){const we=this[X];we._readyState=xe.CLOSING,we._receiver.end(),this.end()}function Re(){const we=this[X];this.removeListener("error",Re),this.on("error",K),we&&(we._readyState=xe.CLOSING,this.destroy())}},8327:module=>{module.exports=eval("require")("bufferutil")},75:module=>{module.exports=eval("require")("supports-color")},2414:module=>{module.exports=eval("require")("utf-8-validate")},2613:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("assert")},290:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("async_hooks")},181:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("buffer")},6982:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("crypto")},4434:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("events")},9896:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("fs")},8611:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("http")},5692:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("https")},9278:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("net")},4573:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:buffer")},8474:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:events")},3024:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:fs")},7067:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:http")},7030:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:net")},6760:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:path")},1792:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:querystring")},8522:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("node:zlib")},857:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("os")},6928:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("path")},3480:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("querystring")},2203:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("stream")},3193:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("string_decoder")},3557:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("timers")},4756:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("tls")},2018:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("tty")},7016:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("url")},9023:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("util")},3106:r=>{r.exports=__WEBPACK_EXTERNAL_createRequire(import.meta.url)("zlib")},2998:(r,t)=>{t.Emitter=u;function u(p){if(p)return d(p)}function d(p){for(var h in u.prototype)p[h]=u.prototype[h];return p}u.prototype.on=u.prototype.addEventListener=function(p,h){return this._callbacks=this._callbacks||{},(this._callbacks["$"+p]=this._callbacks["$"+p]||[]).push(h),this},u.prototype.once=function(p,h){function x(){this.off(p,x),h.apply(this,arguments)}return x.fn=h,this.on(p,x),this},u.prototype.off=u.prototype.removeListener=u.prototype.removeAllListeners=u.prototype.removeEventListener=function(p,h){if(this._callbacks=this._callbacks||{},arguments.length==0)return this._callbacks={},this;var x=this._callbacks["$"+p];if(!x)return this;if(arguments.length==1)return delete this._callbacks["$"+p],this;for(var j,b=0;b<x.length;b++)if(j=x[b],j===h||j.fn===h){x.splice(b,1);break}return x.length===0&&delete this._callbacks["$"+p],this},u.prototype.emit=function(p){this._callbacks=this._callbacks||{};for(var h=new Array(arguments.length-1),x=this._callbacks["$"+p],j=1;j<arguments.length;j++)h[j-1]=arguments[j];if(x){x=x.slice(0);for(var j=0,b=x.length;j<b;++j)x[j].apply(this,h)}return this},u.prototype.emitReserved=u.prototype.emit,u.prototype.listeners=function(p){return this._callbacks=this._callbacks||{},this._callbacks["$"+p]||[]},u.prototype.hasListeners=function(p){return!!this.listeners(p).length}},2717:(r,t)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.ERROR_PACKET=t.PACKET_TYPES_REVERSE=t.PACKET_TYPES=void 0;const u=Object.create(null);t.PACKET_TYPES=u,u.open="0",u.close="1",u.ping="2",u.pong="3",u.message="4",u.upgrade="5",u.noop="6";const d=Object.create(null);t.PACKET_TYPES_REVERSE=d,Object.keys(u).forEach((h=>{d[u[h]]=h}));const p={type:"error",data:"parser error"};t.ERROR_PACKET=p},3377:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.decodePacket=void 0;const d=u(2717),p=(x,j)=>{if(typeof x!="string")return{type:"message",data:h(x,j)};const b=x.charAt(0);if(b==="b"){const w=Buffer.from(x.substring(1),"base64");return{type:"message",data:h(w,j)}}return d.PACKET_TYPES_REVERSE[b]?x.length>1?{type:d.PACKET_TYPES_REVERSE[b],data:x.substring(1)}:{type:d.PACKET_TYPES_REVERSE[b]}:d.ERROR_PACKET};t.decodePacket=p;const h=(x,j)=>j==="arraybuffer"?x instanceof ArrayBuffer?x:Buffer.isBuffer(x)?x.buffer.slice(x.byteOffset,x.byteOffset+x.byteLength):x.buffer:Buffer.isBuffer(x)?x:Buffer.from(x)},5897:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.encodePacket=void 0,t.encodePacketToBinary=j;const d=u(2717),p=({type:b,data:w},$,O)=>w instanceof ArrayBuffer||ArrayBuffer.isView(w)?O($?w:"b"+h(w,!0).toString("base64")):O(d.PACKET_TYPES[b]+(w||""));t.encodePacket=p;const h=(b,w)=>Buffer.isBuffer(b)||b instanceof Uint8Array&&!w?b:b instanceof ArrayBuffer?Buffer.from(b):Buffer.from(b.buffer,b.byteOffset,b.byteLength);let x;function j(b,w){if(b.data instanceof ArrayBuffer||ArrayBuffer.isView(b.data))return w(h(b.data,!1));(0,t.encodePacket)(b,!0,($=>{x||(x=new TextEncoder),w(x.encode($))}))}},8007:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.decodePayload=t.decodePacket=t.encodePayload=t.encodePacket=t.protocol=void 0,t.createPacketEncoderStream=w,t.createPacketDecoderStream=U;const d=u(5897);Object.defineProperty(t,"encodePacket",{enumerable:!0,get:function(){return d.encodePacket}});const p=u(3377);Object.defineProperty(t,"decodePacket",{enumerable:!0,get:function(){return p.decodePacket}});const h=u(2717),x="",j=(z,N)=>{const B=z.length,L=new Array(B);let W=0;z.forEach(((H,V)=>{(0,d.encodePacket)(H,!1,(J=>{L[V]=J,++W===B&&N(L.join(x))}))}))};t.encodePayload=j;const b=(z,N)=>{const B=z.split(x),L=[];for(let W=0;W<B.length;W++){const H=(0,p.decodePacket)(B[W],N);if(L.push(H),H.type==="error")break}return L};t.decodePayload=b;function w(){return new TransformStream({transform(z,N){(0,d.encodePacketToBinary)(z,(B=>{const L=B.length;let W;if(L<126)W=new Uint8Array(1),new DataView(W.buffer).setUint8(0,L);else if(L<65536){W=new Uint8Array(3);const H=new DataView(W.buffer);H.setUint8(0,126),H.setUint16(1,L)}else{W=new Uint8Array(9);const H=new DataView(W.buffer);H.setUint8(0,127),H.setBigUint64(1,BigInt(L))}z.data&&typeof z.data!="string"&&(W[0]|=128),N.enqueue(W),N.enqueue(B)}))}})}let $;function O(z){return z.reduce(((N,B)=>N+B.length),0)}function I(z,N){if(z[0].length===N)return z.shift();const B=new Uint8Array(N);let L=0;for(let W=0;W<N;W++)B[W]=z[0][L++],L===z[0].length&&(z.shift(),L=0);return z.length&&L<z[0].length&&(z[0]=z[0].slice(L)),B}function U(z,N){$||($=new TextDecoder);const B=[];let L=0,W=-1,H=!1;return new TransformStream({transform(V,J){for(B.push(V);;){if(L===0){if(O(B)<1)break;const G=I(B,1);H=(G[0]&128)===128,W=G[0]&127,W<126?L=3:W===126?L=1:L=2}else if(L===1){if(O(B)<2)break;const G=I(B,2);W=new DataView(G.buffer,G.byteOffset,G.length).getUint16(0),L=3}else if(L===2){if(O(B)<8)break;const G=I(B,8),X=new DataView(G.buffer,G.byteOffset,G.length),K=X.getUint32(0);if(K>Math.pow(2,21)-1){J.enqueue(h.ERROR_PACKET);break}W=K*Math.pow(2,32)+X.getUint32(4),L=3}else{if(O(B)<W)break;const G=I(B,W);J.enqueue((0,p.decodePacket)(H?G:$.decode(G),N)),L=0}if(W===0||W>z){J.enqueue(h.ERROR_PACKET);break}}}})}t.protocol=4},68:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.protocol=t.Transport=t.Socket=t.uServer=t.parser=t.transports=t.Server=void 0,t.listen=$,t.attach=O;const d=u(8611),p=u(2317);Object.defineProperty(t,"Server",{enumerable:!0,get:function(){return p.Server}});const h=u(2975);t.transports=h.default;const x=u(8007);t.parser=x;var j=u(2056);Object.defineProperty(t,"uServer",{enumerable:!0,get:function(){return j.uServer}});var b=u(3739);Object.defineProperty(t,"Socket",{enumerable:!0,get:function(){return b.Socket}});var w=u(4621);Object.defineProperty(t,"Transport",{enumerable:!0,get:function(){return w.Transport}}),t.protocol=x.protocol;function $(I,U,z){typeof U=="function"&&(z=U,U={});const N=(0,d.createServer)((function(L,W){W.writeHead(501),W.end("Not Implemented")})),B=O(N,U);return B.httpServer=N,N.listen(I,z),B}function O(I,U){const z=new p.Server(U);return z.attach(I,U),z}},2674:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.packets=t.protocol=void 0,t.encodePacket=b,t.encodeBase64Packet=$,t.decodePacket=O,t.decodeBase64Packet=U,t.encodePayload=z,t.decodePayload=L,t.encodePayloadAsBinary=J,t.decodePayloadAsBinary=X;var d=u(4875);t.protocol=3;const p=K=>{for(const Y of K)if(Y.data instanceof ArrayBuffer||ArrayBuffer.isView(Y.data))return!0;return!1};t.packets={open:0,close:1,ping:2,pong:3,message:4,upgrade:5,noop:6};var h=Object.keys(t.packets),x={type:"error",data:"parser error"};const j=Buffer.concat([]);function b(K,Y,ee,Q){if(typeof Y=="function"&&(Q=Y,Y=null),typeof ee=="function"&&(Q=ee,ee=null),Buffer.isBuffer(K.data))return w(K,Y,Q);if(K.data&&(K.data.buffer||K.data)instanceof ArrayBuffer)return w({type:K.type,data:V(K.data)},Y,Q);var ie=t.packets[K.type];return K.data!==void 0&&(ie+=ee?d.encode(String(K.data),{strict:!1}):String(K.data)),Q(""+ie)}function w(K,Y,ee){if(!Y)return $(K,ee);var Q=K.data,ie=Buffer.allocUnsafe(1);return ie[0]=t.packets[K.type],ee(Buffer.concat([ie,Q]))}function $(K,Y){var ee=Buffer.isBuffer(K.data)?K.data:V(K.data),Q="b"+t.packets[K.type];return Q+=ee.toString("base64"),Y(Q)}function O(K,Y,ee){if(K===void 0)return x;let Q;if(typeof K=="string")return Q=K.charAt(0),Q==="b"?U(K.slice(1),Y):ee&&(K=I(K),K===!1)||Number(Q)!=Q||!h[Q]?x:K.length>1?{type:h[Q],data:K.slice(1)}:{type:h[Q]};if(Y==="arraybuffer"){var ie=new Uint8Array(K);return Q=ie[0],{type:h[Q],data:ie.buffer.slice(1)}}return K instanceof ArrayBuffer&&(K=V(K)),Q=K[0],{type:h[Q],data:K.slice(1)}}function I(K){try{K=d.decode(K,{strict:!1})}catch{return!1}return K}function U(K,Y){var ee=h[K.charAt(0)],Q=Buffer.from(K.slice(1),"base64");if(Y==="arraybuffer"){for(var ie=new Uint8Array(Q.length),ae=0;ae<ie.length;ae++)ie[ae]=Q[ae];Q=ie.buffer}return{type:ee,data:Q}}function z(K,Y,ee){if(typeof Y=="function"&&(ee=Y,Y=null),Y&&p(K))return J(K,ee);if(!K.length)return ee("0:");function Q(ie,ae){b(ie,Y,!1,(function(ne){ae(null,N(ne))}))}B(K,Q,(function(ie,ae){return ee(ae.join(""))}))}function N(K){return K.length+":"+K}function B(K,Y,ee){const Q=new Array(K.length);let ie=0;for(let ae=0;ae<K.length;ae++)Y(K[ae],((ne,te)=>{Q[ae]=te,++ie===K.length&&ee(null,Q)}))}function L(K,Y,ee){if(typeof K!="string")return X(K,Y,ee);if(typeof Y=="function"&&(ee=Y,Y=null),K==="")return ee(x,0,1);for(var Q="",ie,ae,ne,te=0,oe=K.length;te<oe;te++){var de=K.charAt(te);if(de!==":"){Q+=de;continue}if(Q===""||Q!=(ie=Number(Q))||(ae=K.slice(te+1,te+1+ie),Q!=ae.length))return ee(x,0,1);if(ae.length){if(ne=O(ae,Y,!1),x.type===ne.type&&x.data===ne.data)return ee(x,0,1);var ke=ee(ne,te+ie,oe);if(ke===!1)return}te+=ie,Q=""}if(Q!=="")return ee(x,0,1)}function W(K){for(var Y="",ee=0,Q=K.length;ee<Q;ee++)Y+=String.fromCharCode(K[ee]);return Y}function H(K){for(var Y=Buffer.allocUnsafe(K.length),ee=0,Q=K.length;ee<Q;ee++)Y.writeUInt8(K.charCodeAt(ee),ee);return Y}function V(K){var Y=K.byteLength||K.length,ee=K.byteOffset||0;return Buffer.from(K.buffer||K,ee,Y)}function J(K,Y){if(!K.length)return Y(j);B(K,G,(function(ee,Q){return Y(Buffer.concat(Q))}))}function G(K,Y){function ee(Q){var ie=""+Q.length,ae;if(typeof Q=="string"){ae=Buffer.allocUnsafe(ie.length+2),ae[0]=0;for(var ne=0;ne<ie.length;ne++)ae[ne+1]=parseInt(ie[ne],10);return ae[ae.length-1]=255,Y(null,Buffer.concat([ae,H(Q)]))}ae=Buffer.allocUnsafe(ie.length+2),ae[0]=1;for(var ne=0;ne<ie.length;ne++)ae[ne+1]=parseInt(ie[ne],10);ae[ae.length-1]=255,Y(null,Buffer.concat([ae,Q]))}b(K,!0,!0,ee)}function X(K,Y,ee){typeof Y=="function"&&(ee=Y,Y=null);for(var Q=K,ie=[],ae;Q.length>0;){var ne="",te=Q[0]===0;for(ae=1;Q[ae]!==255;ae++){if(ne.length>310)return ee(x,0,1);ne+=""+Q[ae]}Q=Q.slice(ne.length+1);var oe=parseInt(ne,10),de=Q.slice(1,oe+1);te&&(de=W(de)),ie.push(de),Q=Q.slice(oe+1)}var ke=ie.length;for(ae=0;ae<ke;ae++){var xe=ie[ae];ee(O(xe,Y,!0),ae,ke)}}},4875:r=>{/*! https://mths.be/utf8js v2.1.2 by @mathias */var t=String.fromCharCode;function u(z){for(var N=[],B=0,L=z.length,W,H;B<L;)W=z.charCodeAt(B++),W>=55296&&W<=56319&&B<L?(H=z.charCodeAt(B++),(H&64512)==56320?N.push(((W&1023)<<10)+(H&1023)+65536):(N.push(W),B--)):N.push(W);return N}function d(z){for(var N=z.length,B=-1,L,W="";++B<N;)L=z[B],L>65535&&(L-=65536,W+=t(L>>>10&1023|55296),L=56320|L&1023),W+=t(L);return W}function p(z,N){if(z>=55296&&z<=57343){if(N)throw Error("Lone surrogate U+"+z.toString(16).toUpperCase()+" is not a scalar value");return!1}return!0}function h(z,N){return t(z>>N&63|128)}function x(z,N){if((z&4294967168)==0)return t(z);var B="";return(z&4294965248)==0?B=t(z>>6&31|192):(z&4294901760)==0?(p(z,N)||(z=65533),B=t(z>>12&15|224),B+=h(z,6)):(z&4292870144)==0&&(B=t(z>>18&7|240),B+=h(z,12),B+=h(z,6)),B+=t(z&63|128),B}function j(z,N){N=N||{};for(var B=N.strict!==!1,L=u(z),W=L.length,H=-1,V,J="";++H<W;)V=L[H],J+=x(V,B);return J}function b(){if(I>=O)throw Error("Invalid byte index");var z=$[I]&255;if(I++,(z&192)==128)return z&63;throw Error("Invalid continuation byte")}function w(z){var N,B,L,W,H;if(I>O)throw Error("Invalid byte index");if(I==O)return!1;if(N=$[I]&255,I++,(N&128)==0)return N;if((N&224)==192){if(B=b(),H=(N&31)<<6|B,H>=128)return H;throw Error("Invalid continuation byte")}if((N&240)==224){if(B=b(),L=b(),H=(N&15)<<12|B<<6|L,H>=2048)return p(H,z)?H:65533;throw Error("Invalid continuation byte")}if((N&248)==240&&(B=b(),L=b(),W=b(),H=(N&7)<<18|B<<12|L<<6|W,H>=65536&&H<=1114111))return H;throw Error("Invalid UTF-8 detected")}var $,O,I;function U(z,N){N=N||{};var B=N.strict!==!1;$=u(z),O=$.length,I=0;for(var L=[],W;(W=w(B))!==!1;)L.push(W);return d(L)}r.exports={version:"2.1.2",encode:j,decode:U}},2317:(r,t,u)=>{Object.defineProperty(t,"__esModule",{value:!0}),t.Server=t.BaseServer=void 0;const d=u(1942),p=u(2975),h=u(4434),x=u(3739),j=u(2830),b=u(3814),w=u(1354),$=u(8868),O=u(8007),I=(0,j.default)("engine"),U=Symbol("responseHeaders");function z(G){try{const X=JSON.parse(G);if(typeof X.sid=="string")return X.sid}catch{}}class N extends h.EventEmitter{constructor(X={}){super(),this.middlewares=[],this.clients={},this.clientsCount=0,this.opts=Object.assign({wsEngine:w.Server,pingTimeout:2e4,pingInterval:25e3,upgradeTimeout:1e4,maxHttpBufferSize:1e6,transports:["polling","websocket"],allowUpgrades:!0,httpCompression:{threshold:1024},cors:!1,allowEIO3:!1},X),X.cookie&&(this.opts.cookie=Object.assign({name:"io",path:"/",httpOnly:X.cookie.path!==!1,sameSite:"lax"},X.cookie)),this.opts.cors&&this.use(u(4085)(this.opts.cors)),X.perMessageDeflate&&(this.opts.perMessageDeflate=Object.assign({threshold:1024},X.perMessageDeflate)),this.init()}_computePath(X){let K=(X.path||"/engine.io").replace(/\/$/,"");return X.addTrailingSlash!==!1&&(K+="/"),K}upgrades(X){return this.opts.allowUpgrades?p.default[X].upgradesTo||[]:[]}verify(X,K,Y){const ee=X._query.transport;if(!~this.opts.transports.indexOf(ee)||ee==="webtransport")return I('unknown transport "%s"',ee),Y(L.errors.UNKNOWN_TRANSPORT,{transport:ee});if(J(X.headers.origin)){const ae=X.headers.origin;return X.headers.origin=null,I("origin header invalid"),Y(L.errors.BAD_REQUEST,{name:"INVALID_ORIGIN",origin:ae})}const ie=X._query.sid;if(ie){if(!this.clients.hasOwnProperty(ie))return I('unknown sid "%s"',ie),Y(L.errors.UNKNOWN_SID,{sid:ie});const ae=this.clients[ie].transport.name;if(!K&&ae!==ee)return I("bad request: unexpected transport without upgrade"),Y(L.errors.BAD_REQUEST,{name:"TRANSPORT_MISMATCH",transport:ee,previousTransport:ae})}else return X.method!=="GET"?Y(L.errors.BAD_HANDSHAKE_METHOD,{method:X.method}):ee==="websocket"&&!K?(I("invalid transport upgrade"),Y(L.errors.BAD_REQUEST,{name:"TRANSPORT_HANDSHAKE_ERROR"})):this.opts.allowRequest?this.opts.allowRequest(X,((ae,ne)=>{if(!ne)return Y(L.errors.FORBIDDEN,{message:ae});Y()})):Y();Y()}use(X){this.middlewares.push(X)}_applyMiddlewares(X,K,Y){if(this.middlewares.length===0)return I("no middleware to apply, skipping"),Y();const ee=Q=>{I("applying middleware n\xB0%d",Q+1),this.middlewares[Q](X,K,(ie=>{if(ie)return Y(ie);Q+1<this.middlewares.length?ee(Q+1):Y()}))};ee(0)}close(){I("closing all open clients");for(let X in this.clients)this.clients.hasOwnProperty(X)&&this.clients[X].close(!0);return this.cleanup(),this}generateId(X){return d.generateId()}async handshake(X,K,Y){const ee=K._query.EIO==="4"?4:3;if(ee===3&&!this.opts.allowEIO3){I("unsupported protocol version"),this.emit("connection_error",{req:K,code:L.errors.UNSUPPORTED_PROTOCOL_VERSION,message:L.errorMessages[L.errors.UNSUPPORTED_PROTOCOL_VERSION],context:{protocol:ee}}),Y(L.errors.UNSUPPORTED_PROTOCOL_VERSION);return}let Q;try{Q=await this.generateId(K)}catch(ne){I("error while generating an id"),this.emit("connection_error",{req:K,code:L.errors.BAD_REQUEST,message:L.errorMessages[L.errors.BAD_REQUEST],context:{name:"ID_GENERATION_ERROR",error:ne}}),Y(L.errors.BAD_REQUEST);return}I('handshaking client "%s"',Q);try{var ie=this.createTransport(X,K);X==="polling"?(ie.maxHttpBufferSize=this.opts.maxHttpBufferSize,ie.httpCompression=this.opts.httpCompression):X==="websocket"&&(ie.perMessageDeflate=this.opts.perMessageDeflate)}catch(ne){I('error handshaking to transport "%s"',X),this.emit("connection_error",{req:K,code:L.errors.BAD_REQUEST,message:L.errorMessages[L.errors.BAD_REQUEST],context:{name:"TRANSPORT_HANDSHAKE_ERROR",error:ne}}),Y(L.errors.BAD_REQUEST);return}const ae=new x.Socket(Q,this,ie,K,ee);return ie.on("headers",((ne,te)=>{!te._query.sid&&(this.opts.cookie&&(ne["Set-Cookie"]=[(0,b.serialize)(this.opts.cookie.name,Q,this.opts.cookie)]),this.emit("initial_headers",ne,te)),this.emit("headers",ne,te)})),ie.onRequest(K),this.clients[Q]=ae,this.clientsCount++,ae.once("close",(()=>{delete this.clients[Q],this.clientsCount--})),this.emit("connection",ae),ie}async onWebTransportSession(X){const K=setTimeout((()=>{I("the client failed to establish a bidirectional stream in the given period"),X.close()}),this.opts.upgradeTimeout),ee=await X.incomingBidirectionalStreams.getReader().read();if(ee.done){I("session is closed");return}const Q=ee.value,ie=(0,O.createPacketDecoderStream)(this.opts.maxHttpBufferSize,"nodebuffer"),ae=Q.readable.pipeThrough(ie).getReader(),{value:ne,done:te}=await ae.read();if(te){I("stream is closed");return}if(clearTimeout(K),ne.type!=="open")return I("invalid WebTransport handshake"),X.close();if(ne.data===void 0){const ke=new $.WebTransport(X,Q,ae),xe=d.generateId();I('handshaking client "%s" (WebTransport)',xe);const _e=new x.Socket(xe,this,ke,null,4);this.clients[xe]=_e,this.clientsCount++,_e.once("close",(()=>{delete this.clients[xe],this.clientsCount--})),this.emit("connection",_e);return}const oe=z(ne.data);if(!oe)return I("invalid WebTransport handshake"),X.close();const de=this.clients[oe];if(!de)I("upgrade attempt for closed client"),X.close();else if(de.upgrading)I("transport has already been trying to upgrade"),X.close();else if(de.upgraded)I("transport had already been upgraded"),X.close();else{I("upgrading existing transport");const ke=new $.WebTransport(X,Q,ae);de._maybeUpgrade(ke)}}}t.BaseServer=N,N.errors={UNKNOWN_TRANSPORT:0,UNKNOWN_SID:1,BAD_HANDSHAKE_METHOD:2,BAD_REQUEST:3,FORBIDDEN:4,UNSUPPORTED_PROTOCOL_VERSION:5},N.errorMessages={0:"Transport unknown",1:"Session ID unknown",2:"Bad handshake method",3:"Bad request",4:"Forbidden",5:"Unsupported protocol version"};class B{constructor(X,K){this.req=X,this.socket=K,X[U]={}}setHeader(X,K){this.req[U][X]=K}getHeader(X){return this.req[U][X]}removeHeader(X){delete this.req[U][X]}write(){}writeHead(){}end(){this.socket.destroy()}}class L extends N{init(){~this.opts.transports.indexOf("websocket")&&(this.ws&&this.ws.close(),this.ws=new this.opts.wsEngine({noServer:!0,clientTracking:!1,perMessageDeflate:this.opts.perMessageDeflate,maxPayload:this.opts.maxHttpBufferSize}),typeof this.ws.on=="function"&&this.ws.on("headers",((X,K)=>{const Y=K[U]||{};delete K[U],!K._query.sid&&this.emit("initial_headers",Y,K),this.emit("headers",Y,K),I("writing headers: %j",Y),Object.keys(Y).forEach((Q=>{X.push(`${Q}: ${Y[Q]}`)}))})))}cleanup(){this.ws&&(I("closing webSocketServer"),this.ws.close())}prepare(X){if(!X._query){const K=new URL(X.url,"https://socket.io");X._query=Object.fromEntries(K.searchParams.entries())}}createTransport(X,K){return new p.default[X](K)}handleRequest(X,K){I('handling "%s" http request "%s"',X.method,X.url),this.prepare(X),X.res=K;const Y=(ee,Q)=>{if(ee!==void 0){this.emit("connection_error",{req:X,code:ee,message:L.errorMessages[ee],context:Q}),W(K,ee,Q);return}if(X._query.sid)I("setting new request for existing client"),this.clients[X._query.sid].transport.onRequest(X);else{const ie=(ae,ne)=>W(K,ae,ne);this.handshake(X._query.transport,X,ie)}};this._applyMiddlewares(X,K,(ee=>{ee?Y(L.errors.BAD_REQUEST,{name:"MIDDLEWARE_FAILURE"}):this.verify(X,!1,Y)}))}handleUpgrade(X,K,Y){this.prepare(X);const ee=new B(X,K),Q=(ie,ae)=>{if(ie!==void 0){this.emit("connection_error",{req:X,code:ie,message:L.errorMessages[ie],context:ae}),H(K,ie,ae);return}const ne=Buffer.from(Y);Y=null,ee.writeHead(),this.ws.handleUpgrade(X,K,ne,(te=>{this.onWebSocket(X,K,te)}))};this._applyMiddlewares(X,ee,(ie=>{ie?Q(L.errors.BAD_REQUEST,{name:"MIDDLEWARE_FAILURE"}):this.verify(X,!0,Q)}))}onWebSocket(X,K,Y){if(Y.on("error",Q),p.default[X._query.transport]!==void 0&&!p.default[X._query.transport].prototype.handlesUpgrades){I("transport doesnt handle upgraded requests"),Y.close();return}const ee=X._query.sid;if(X.websocket=Y,ee){const ie=this.clients[ee];if(!ie)I("upgrade attempt for closed client"),Y.close();else if(ie.upgrading)I("transport has already been trying to upgrade"),Y.close();else if(ie.upgraded)I("transport had already been upgraded"),Y.close();else{I("upgrading existing transport"),Y.removeListener("error",Q);const ae=this.createTransport(X._query.transport,X);ae.perMessageDeflate=this.opts.perMessageDeflate,ie._maybeUpgrade(ae)}}else{const ie=(ae,ne)=>H(K,ae,ne);this.handshake(X._query.transport,X,ie)}function Q(){I("websocket error before upgrade")}}attach(X,K={}){const Y=this._computePath(K),ee=K.destroyUpgradeTimeout||1e3;function Q(ae){return Y===ae.url.slice(0,Y.length)}const ie=X.listeners("request").slice(0);X.removeAllListeners("request"),X.on("close",this.close.bind(this)),X.on("listening",this.init.bind(this)),X.on("request",((ae,ne)=>{if(Q(ae))I('intercepting request for path "%s"',Y),this.handleRequest(ae,ne);else{let te=0;const oe=ie.length;for(;te<oe;te++)ie[te].call(X,ae,ne)}})),~this.opts.transports.indexOf("websocket")&&X.on("upgrade",((ae,ne,te)=>{Q(ae)?this.handleUpgrade(ae,ne,te):K.destroyUpgrade!==!1&&setTimeout((function(){if(ne.writable&&ne.bytesWritten<=0)return ne.on("error",(oe=>{I("error while destroying upgrade: %s",oe.message)})),ne.end()}),ee)}))}}t.Server=L;function W(G,X,K){const Y=X===L.errors.FORBIDDEN?403:400,ee=K&&K.message?K.message:L.errorMessages[X];G.writeHead(Y,{"Content-Type":"application/json"}),G.end(JSON.stringify({code:X,message:ee}))}function H(G,X,K={}){if(G.on("error",(()=>{I("ignoring error from closed connection")})),G.writable){const Y=K.message||L.errorMessages[X],ee=Buffer.byteLength(Y);G.write(`HTTP/1.1 400 Bad Request\r
361
361
  Connection: close\r
362
362
  Content-type: text/html\r
363
363
  Content-Length: `+ee+`\r
@@ -465,7 +465,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
465
465
  `).filter(Boolean).slice(-20);for(const x of h)try{const j=JSON.parse(x);if(j.type==="human"&&j.message?.content){const b=typeof j.message.content=="string"?j.message.content:j.message.content.find((w=>w.type==="text"))?.text||"";b&&this._history.push({type:"user",content:b,timestamp:j.timestamp})}else j.type==="assistant"&&j.message?.content?this._history.push({type:"assistant",message:j.message,timestamp:j.timestamp}):j.type==="result"&&this._history.push({type:"result",total_cost_usd:j.costUSD||j.total_cost_usd,timestamp:j.timestamp})}catch{}return}}catch(t){console.warn("[agent] \u52A0\u8F7D\u6062\u590D\u4F1A\u8BDD\u5386\u53F2\u5931\u8D25:",t.message)}}get isBusy(){return this._busy}addViewer(t,u){this._viewers.add(t),u&&this._viewerNames.set(t,u)}removeViewer(t){this._viewers.delete(t),this._viewerNames.delete(t)}get viewerCount(){return new Set(this._viewerNames.values()).size||this._viewers.size}takeControl(t,u){this.controlHolder=t,this.controlHolderName=u||null,this.lastInputTime=Date.now()}releaseControl(){this.controlHolder=null,this.controlHolderName=null,this.lastInputTime=null}isController(t){return this.controlHolder===t}toJSON(){return{id:this.id,title:this.title,cwd:this.cwd,createdAt:this.createdAt,mode:"agent",alive:this.alive,viewers:this.viewerCount,controlHolder:this.controlHolder,controlHolderName:this.controlHolderName,permissionMode:this.permissionMode,owner:this.owner,claudeSessionId:this.claudeSessionId,busy:this._busy,usage:this._usage}}}let _claudeSessionsCache=null,_claudeSessionsCacheTime=0;const CLAUDE_SESSIONS_CACHE_TTL=3e4;function listLocalClaudeSessions(r){const t=Date.now();if(_claudeSessionsCache&&t-_claudeSessionsCacheTime<CLAUDE_SESSIONS_CACHE_TTL){if(!r)return _claudeSessionsCache;const h=(0,external_path_.resolve)((0,external_path_.normalize)(r)).replace(/[\\/]+$/,"");return _claudeSessionsCache.filter((x=>(0,external_path_.resolve)((0,external_path_.normalize)(x.projectPath)).replace(/[\\/]+$/,"").startsWith(h)))}const u=[],d=r?(0,external_path_.resolve)((0,external_path_.normalize)(r)).replace(/[\\/]+$/,""):null;try{const h=(0,external_path_.join)((0,external_os_.homedir)(),".claude","projects");if(!(0,external_fs_.existsSync)(h))return u;for(const x of(0,external_fs_.readdirSync)(h,{withFileTypes:!0})){if(!x.isDirectory())continue;const j=(0,external_path_.join)(h,x.name);try{for(const b of(0,external_fs_.readdirSync)(j)){if(!b.endsWith(".jsonl"))continue;const w=b.replace(".jsonl",""),$=(0,external_path_.join)(j,b);try{const O=(0,external_fs_.readFileSync)($,"utf8").split(`
466
466
  `).filter(Boolean);let I=null,U=null,z=0,N="";for(const L of O)try{const W=JSON.parse(L);if(I||(I=W),U=W,z++,!N&&W.type==="human"&&W.message?.content){const H=W.message.content;if(typeof H=="string")N=H.slice(0,120);else if(Array.isArray(H)){const V=H.find((J=>J.type==="text"));V&&(N=V.text?.slice(0,120)||"")}}}catch{}let B=x.name;if(process.platform==="win32"&&/^[A-Za-z]--/.test(B)?B=B[0]+":\\"+B.slice(3).replace(/-/g,"\\"):B.startsWith("-")&&(B=B.replace(/-/g,"/")),d&&!(0,external_path_.resolve)((0,external_path_.normalize)(B)).replace(/[\\/]+$/,"").startsWith(d))continue;u.push({sessionId:w,projectDir:x.name,projectPath:B,messageCount:z,summary:N,createdAt:I?.timestamp||null,updatedAt:U?.timestamp||null})}catch{}}}catch{}}}catch{}u.sort(((h,x)=>new Date(x.updatedAt||0).getTime()-new Date(h.updatedAt||0).getTime()));const p=u.slice(0,50);return _claudeSessionsCache=p,_claudeSessionsCacheTime=Date.now(),p.slice(0,20)}const CONFIG_DIR=(0,external_path_.join)((0,external_os_.homedir)(),".zihi"),SESSIONS_FILE=(0,external_path_.join)(CONFIG_DIR,"sessions.json");function loadSavedConfigs(){try{return JSON.parse((0,external_fs_.readFileSync)(SESSIONS_FILE,"utf8"))}catch{return[]}}function writeSavedConfigs(r){try{(0,external_fs_.mkdirSync)(CONFIG_DIR,{recursive:!0});const t=SESSIONS_FILE+".tmp";(0,external_fs_.writeFileSync)(t,JSON.stringify(r,null,2),{mode:384}),(0,external_fs_.renameSync)(t,SESSIONS_FILE)}catch(t){console.error("[sessions] \u6301\u4E45\u5316\u5199\u5165\u5931\u8D25:",t.message)}}class SessionManager{constructor(){this._agentSessions=new Map;for(const t of loadSavedConfigs())try{if(t.claudeSessionId){const u=(0,external_crypto_.randomUUID)(),d=new AgentSession(u,{...t,resumeSessionId:t.claudeSessionId});d.on("session-id",(()=>this._persist())),this._agentSessions.set(u,d),console.log(`[\u4F1A\u8BDD] \u6062\u590D Agent "${t.title}" (claude: ${t.claudeSessionId.slice(0,8)}...)`)}}catch(u){console.warn(`[\u4F1A\u8BDD] \u6062\u590D "${t.title}" \u5931\u8D25:`,u.message)}}createAgent(t={}){const u=(0,external_crypto_.randomUUID)(),d=new AgentSession(u,t);return this._agentSessions.set(u,d),d.on("session-id",(()=>this._persist())),this._persist(),d}get(t){return this._agentSessions.get(t)}list(t,u=!1){let d=[...this._agentSessions.values()].map((p=>p.toJSON()));return t&&!u&&(d=d.filter((p=>!p.owner||p.owner===t))),d}listSessions(){return[...this._agentSessions.values()]}kill(t){const u=this._agentSessions.get(t);u&&(u.kill(),this._agentSessions.delete(t),this._persist())}persist(){this._persist()}_persist(){const t=[...this._agentSessions.values()].filter((u=>u.alive)).map((u=>({mode:"agent",title:u.title,cwd:u.cwd,permissionMode:u.permissionMode||void 0,owner:u.owner||void 0,userDir:u.userDir||void 0,claudeSessionId:u.claudeSessionId||void 0})));writeSavedConfigs(t)}}const roles_CONFIG_DIR=(0,external_path_.join)((0,external_os_.homedir)(),".zihi"),ROLES_FILE=(0,external_path_.join)(roles_CONFIG_DIR,"roles.json"),USERS_FILE=(0,external_path_.join)(roles_CONFIG_DIR,"users.json"),ROLE_LEVELS={admin:3,operator:2,viewer:1};let rolesConfig=null;function loadRoles(){try{if((0,external_fs_.existsSync)(ROLES_FILE))return rolesConfig=JSON.parse((0,external_fs_.readFileSync)(ROLES_FILE,"utf8")),rolesConfig}catch(r){console.warn("[\u89D2\u8272] \u52A0\u8F7D roles.json \u5931\u8D25:",r.message)}return rolesConfig=null,null}function lookupPassword(r){if(!rolesConfig?.passwords)return null;const t=rolesConfig.passwords[r];return t?{name:t.name||"\u7528\u6237",role:t.role||"viewer"}:null}function hasPermission(r,t){return(ROLE_LEVELS[r]||0)>=(ROLE_LEVELS[t]||0)}function isMultiUserMode(){return rolesConfig!==null&&rolesConfig.passwords&&Object.keys(rolesConfig.passwords).length>0}function getDefaultRole(){return rolesConfig?.defaultRole||"admin"}let usersConfig=null;function loadUsers(){try{if((0,external_fs_.existsSync)(USERS_FILE))return usersConfig=JSON.parse((0,external_fs_.readFileSync)(USERS_FILE,"utf8")),usersConfig}catch(r){console.warn("[\u7528\u6237] \u52A0\u8F7D users.json \u5931\u8D25:",r.message)}return usersConfig=null,null}function hasUsers(){return usersConfig!==null&&usersConfig.users&&Object.keys(usersConfig.users).length>0}function isExclusiveMode(){return hasUsers()&&usersConfig.exclusive===!0}function setExclusiveMode(r){usersConfig||(usersConfig={users:{}}),usersConfig.exclusive=!!r,_writeUsers()}function lookupUser(r){if(!usersConfig?.users)return null;const t=usersConfig.users[r];return t?{name:t.name||"\u7528\u6237",dir:t.dir}:null}function listUsers(){return usersConfig?.users?Object.entries(usersConfig.users).map((([r,t])=>({password:r.slice(0,2)+"*".repeat(r.length-2),name:t.name,dir:t.dir}))):[]}function addUser(r,t,u){usersConfig||(usersConfig={users:{}}),usersConfig.users||(usersConfig.users={}),usersConfig.users[r]={name:t,dir:u},_writeUsers()}function removeUser(r){return!usersConfig?.users||!usersConfig.users[r]?!1:(delete usersConfig.users[r],_writeUsers(),!0)}function _writeUsers(){(0,external_fs_.mkdirSync)(roles_CONFIG_DIR,{recursive:!0}),(0,external_fs_.writeFileSync)(USERS_FILE,JSON.stringify(usersConfig,null,2),{mode:384})}const server_dirname=(0,external_path_.dirname)((0,external_url_.fileURLToPath)(import.meta.url));let PORT=parseInt(process.env.PORT,10)||12345;const HOST=process.env.HOST||"0.0.0.0",PORT_EXPLICIT=!!process.env.PORT,configDir=(0,external_path_.join)((0,external_os_.homedir)(),".zihi");(0,external_fs_.mkdirSync)(configDir,{recursive:!0});const pidFile=(0,external_path_.join)(configDir,"daemon.pid"),IS_DAEMON_CHILD=!!process.env.ZIHI_DAEMON;(function r(){if(!IS_DAEMON_CHILD){try{const t=parseInt((0,external_fs_.readFileSync)(pidFile,"utf8").trim(),10);if(t&&t!==process.pid){let u=!1;try{process.kill(t,0),u=!0}catch{}if(u){console.log(`[zihi] \u68C0\u6D4B\u5230\u5DF2\u8FD0\u884C\u7684\u5B9E\u4F8B (PID ${t})\uFF0C\u6B63\u5728\u505C\u6B62...`);try{process.platform==="win32"?(0,external_child_process_namespaceObject.execSync)(`taskkill /PID ${t} /F /T`,{stdio:"pipe",timeout:5e3}):process.kill(t,"SIGTERM")}catch(h){console.warn(`[zihi] \u505C\u6B62\u65E7\u8FDB\u7A0B\u5931\u8D25: ${h.message?.split(`
467
467
  `)[0]||h}`)}const d=Date.now()+5e3;for(;Date.now()<d;){try{process.kill(t,0)}catch{break}const h=Date.now()+200;for(;Date.now()<h;);}let p=!1;try{process.kill(t,0),p=!0}catch{}p&&(console.error(`[zihi] \u65E0\u6CD5\u505C\u6B62\u65E7\u8FDB\u7A0B (PID ${t})\uFF0C\u8BF7\u624B\u52A8\u6267\u884C\uFF1A`),console.error(" zihi stop"),console.error(` \u6216: ${process.platform==="win32"?`taskkill /PID ${t} /F`:`kill -9 ${t}`}`),process.exit(1))}}}catch{}IS_DAEMON_CHILD||(0,external_fs_.writeFileSync)(pidFile,String(process.pid))}})();function cleanupPid(){try{parseInt((0,external_fs_.readFileSync)(pidFile,"utf8").trim(),10)===process.pid&&(0,external_fs_.unlinkSync)(pidFile)}catch{}}function gracefulShutdown(){try{if(typeof manager<"u"){try{manager.persist()}catch{}for(const r of manager.listSessions())try{r.kill()}catch{}}}catch{}cleanupPid()}process.on("exit",cleanupPid),process.on("SIGTERM",(()=>{gracefulShutdown(),process.exit(0)})),process.on("SIGINT",(()=>{gracefulShutdown(),process.exit(0)})),process.on("uncaughtException",(r=>{console.error("[zihi] \u672A\u6355\u83B7\u5F02\u5E38:",r.message),gracefulShutdown(),process.exit(1)})),process.on("unhandledRejection",(r=>{console.error("[zihi] \u672A\u5904\u7406\u7684 Promise \u62D2\u7EDD:",r)}));function readOrCreate(r,t){try{if((0,external_fs_.existsSync)(r))return(0,external_fs_.readFileSync)(r,"utf8").trim()}catch{}const u=t();return(0,external_fs_.writeFileSync)(r,u,{mode:384}),u}const TOKEN=readOrCreate((0,external_path_.join)(configDir,"token"),(()=>(0,external_crypto_.randomBytes)(16).toString("hex")));let PASSWORD=readOrCreate((0,external_path_.join)(configDir,"password"),(()=>String(Math.floor(1e3+Math.random()*9e3))));loadRoles(),loadUsers();let activeUser=null;const userSessions=new Map;userSessions.set(TOKEN,{role:"admin",name:"\u7BA1\u7406\u5458",permanent:!0});const SESSION_MAX_AGE=10080*60*1e3;setInterval((()=>{const r=Date.now();for(const[t,u]of userSessions)u.permanent||(!u.lastUsed||r-u.lastUsed>SESSION_MAX_AGE)&&userSessions.delete(t)}),3600*1e3);function getTailscaleIP(){try{return(0,external_child_process_namespaceObject.execSync)("tailscale ip -4",{timeout:3e3,stdio:"pipe"}).toString().trim().split(`
468
- `)[0]}catch{}try{if(process.platform==="win32"){const t=(0,external_child_process_namespaceObject.execSync)("route print 0.0.0.0",{timeout:3e3,stdio:"pipe"}).toString().match(/0\.0\.0\.0\s+0\.0\.0\.0\s+\S+\s+(\d+\.\d+\.\d+\.\d+)/);if(t)return t[1]}else try{const t=(0,external_child_process_namespaceObject.execSync)("ip route get 1.1.1.1",{timeout:3e3,stdio:"pipe"}).toString().match(/src\s+(\d+\.\d+\.\d+\.\d+)/);if(t)return t[1]}catch{const r=(0,external_child_process_namespaceObject.execSync)("route -n get default 2>/dev/null || route -n 2>/dev/null",{timeout:3e3,stdio:"pipe"}).toString(),t=r.match(/interface:\s*(\S+)/i)||r.match(/0\.0\.0\.0\s+(\d+\.\d+\.\d+\.\d+)/);if(t){const u=(0,external_os_.networkInterfaces)()[t[1]];if(u){const d=u.find((p=>p.family==="IPv4"&&!p.internal));if(d)return d.address}if(/^\d+\.\d+\.\d+\.\d+$/.test(t[1]))return t[1]}}}catch{}for(const r of Object.values((0,external_os_.networkInterfaces)()))for(const t of r)if(t.family==="IPv4"&&!t.internal)return t.address;return"localhost"}function parseCookies(r=""){const t={};for(const u of r.split(";")){const d=u.indexOf("=");d>0&&(t[u.slice(0,d).trim()]=u.slice(d+1).trim())}return t}const SESSION_COOKIE="zihi_sid",COOKIE_OPTS="HttpOnly; SameSite=Lax; Path=/; Max-Age=31536000";function setSessionCookie(r,t){r.setHeader("Set-Cookie",`${SESSION_COOKIE}=${t||TOKEN}; ${COOKIE_OPTS}`)}function getSessionToken(r){return parseCookies(r)[SESSION_COOKIE]||null}function hasValidSession(r){const t=getSessionToken(r);if(t&&userSessions.has(t)){const u=userSessions.get(t);return u&&(u.lastUsed=Date.now()),!0}return!1}function getUserInfo(r){const t=getSessionToken(r);return t?userSessions.get(t):null}const MIME_MAP={".html":"text/html",".css":"text/css",".js":"text/javascript",".mjs":"text/javascript",".json":"application/json",".xml":"application/xml",".txt":"text/plain",".md":"text/plain",".csv":"text/csv",".log":"text/plain",".sh":"text/plain",".py":"text/plain",".ts":"text/plain",".jsx":"text/plain",".tsx":"text/plain",".yml":"text/plain",".yaml":"text/plain",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".bmp":"image/bmp",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".flac":"audio/flac",".m4a":"audio/mp4",".aac":"audio/aac",".wma":"audio/x-ms-wma",".mp4":"video/mp4",".webm":"video/webm",".mkv":"video/x-matroska",".avi":"video/x-msvideo",".mov":"video/quicktime",".flv":"video/x-flv",".pdf":"application/pdf",".zip":"application/zip",".gz":"application/gzip",".tar":"application/x-tar",".7z":"application/x-7z-compressed",".rar":"application/x-rar-compressed",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject"};function getMime(r){return MIME_MAP[(0,external_path_.extname)(r).toLowerCase()]||"application/octet-stream"}function resolveUserFilePath(r,t){const u=getUserInfo(r.headers.cookie),d=r.query.sessionId||r.body?.sessionId,p=d?manager.get(d):null,x=(p?.cwd?(0,external_path_.resolve)((0,external_path_.normalize)(p.cwd)):null)||(u?.dir?(0,external_path_.resolve)((0,external_path_.normalize)(u.dir)):process.env.ZIHI_CWD||(0,external_os_.homedir)());let j=t?(0,external_path_.resolve)((0,external_path_.normalize)(x),(0,external_path_.normalize)(t)):x;if(process.platform==="win32"&&/^[A-Za-z]:$/.test(j)&&(j+="\\"),!j.startsWith(x))return{error:"\u8BBF\u95EE\u88AB\u62D2\u7EDD\uFF1A\u8DEF\u5F84\u8D85\u51FA\u5141\u8BB8\u8303\u56F4",status:403};try{if(!(0,external_fs_.realpathSync)(j).startsWith(x))return{error:"\u8BBF\u95EE\u88AB\u62D2\u7EDD\uFF1A\u7B26\u53F7\u94FE\u63A5\u6307\u5411\u5141\u8BB8\u8303\u56F4\u5916",status:403}}catch{}return{resolved:j,userRoot:x,info:u}}const syncConfigFile=(0,external_path_.join)(configDir,"sync.json");function loadSyncConfig(){try{return JSON.parse((0,external_fs_.readFileSync)(syncConfigFile,"utf8"))}catch{return{}}}function saveSyncConfig(r){(0,external_fs_.writeFileSync)(syncConfigFile,JSON.stringify(r,null,2))}const DEFAULT_IGNORE=["node_modules",".git",".DS_Store","Thumbs.db","__pycache__",".env",".env.local","*.pyc",".cache","dist","build"];function shouldIgnore(r,t){for(const u of t)if(u.startsWith("*.")){if(r.endsWith(u.slice(1)))return!0}else if(r===u)return!0;return!1}function scanDirTree(r,t,u={}){const d={},p=u.maxDepth||20,h=u.withHash||!1;function x(j,b,w){if(w>p)return;let $;try{$=(0,external_fs_.readdirSync)(j,{withFileTypes:!0})}catch{return}for(const O of $){if(O.name.startsWith(".")&&!u.showHidden||shouldIgnore(O.name,t))continue;const I=(0,external_path_.join)(j,O.name),U=b?b+"/"+O.name:O.name;if(O.isDirectory())x(I,U,w+1);else if(O.isFile())try{const z=(0,external_fs_.statSync)(I),N={size:z.size,mtime:z.mtimeMs};if(h&&z.size<50*1024*1024){const B=(0,external_crypto_.createHash)("sha256"),L=(0,external_fs_.readFileSync)(I);B.update(L),N.hash=B.digest("hex")}d[U]=N}catch{}}}return x(r,"",0),d}function fileHash(r){const t=(0,external_crypto_.createHash)("sha256");return t.update((0,external_fs_.readFileSync)(r)),t.digest("hex")}function walkFiles(r,t,u=[]){try{for(const d of(0,external_fs_.readdirSync)(r,{withFileTypes:!0})){if(d.name.startsWith("."))continue;const p=(0,external_path_.join)(r,d.name),h=t?t+"/"+d.name:d.name;if(d.isDirectory())walkFiles(p,h,u);else if(d.isFile())try{const x=(0,external_fs_.statSync)(p),j={name:h,size:x.size,mtime:x.mtimeMs};x.size<50*1024*1024&&(j.hash=fileHash(p)),u.push(j)}catch{}}}catch{}return u}const app=express();app.set("trust proxy",!0),app.use(((r,t,u)=>{t.setHeader("Referrer-Policy","no-referrer"),t.setHeader("X-Content-Type-Options","nosniff"),u()}));const httpServer=(0,external_http_.createServer)(app),_corsAllowed=/^https?:\/\/(localhost|127\.0\.0\.1|\[::1\]|10\.\d+\.\d+\.\d+|172\.(1[6-9]|2\d|3[01])\.\d+\.\d+|192\.168\.\d+\.\d+|100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\.\d+\.\d+)(:\d+)?$/,io=new Server({cors:{origin:(r,t)=>{if(!r||_corsAllowed.test(r))return t(null,!0);t(new Error("CORS \u4E0D\u5141\u8BB8\u6B64\u6765\u6E90"),!1)},credentials:!0},transports:["polling","websocket"],pingTimeout:6e4,pingInterval:25e3,upgradeTimeout:3e4,allowUpgrades:!0,maxHttpBufferSize:5e6});io.attach(httpServer);const manager=new SessionManager,uploadDir=(0,external_path_.join)(configDir,"uploads");(0,external_fs_.mkdirSync)(uploadDir,{recursive:!0});function checkAuth(r,t,u){const d=r.query.token;if(d&&(d===TOKEN||userSessions.has(d))){const p=userSessions.get(d);if(p?.onetime){userSessions.delete(d);const x=(0,external_crypto_.randomBytes)(16).toString("hex");userSessions.set(x,{role:p.role,name:p.name,lastUsed:Date.now()}),setSessionCookie(t,x)}else setSessionCookie(t,d===TOKEN?TOKEN:d);const h=r.path+(Object.keys(r.query).filter((x=>x!=="token")).length?"?"+new URLSearchParams(Object.fromEntries(Object.entries(r.query).filter((([x])=>x!=="token")))):"");return t.redirect(h)}if(hasValidSession(r.headers.cookie)){if(isExclusiveMode()&&activeUser){const p=getSessionToken(r.headers.cookie);if(p!==TOKEN){const h=userSessions.get(p);if(!h||h.name!==activeUser.name)return t.setHeader("Set-Cookie",`${SESSION_COOKIE}=; HttpOnly; SameSite=Strict; Path=/; Max-Age=0`),t.redirect("/login")}}return u()}t.redirect("/login")}const server_require=(0,external_module_namespaceObject.createRequire)(import.meta.url);function pkgDirSafe(r){try{return(0,external_path_.dirname)(server_require.resolve(`${r}/package.json`))}catch{return null}}const libDir=(0,external_path_.join)(server_dirname,"lib"),staticOpts={maxAge:864e5};app.use("/lib/xterm",express.static(pkgDirSafe("xterm")||(0,external_path_.join)(libDir,"xterm"),staticOpts)),app.use("/lib/xterm-fit",express.static(pkgDirSafe("xterm-addon-fit")||(0,external_path_.join)(libDir,"xterm-fit"),staticOpts)),app.use("/lib/xterm-links",express.static(pkgDirSafe("xterm-addon-web-links")||(0,external_path_.join)(libDir,"xterm-links"),staticOpts));const _loginAttempts=new Map,LOGIN_MAX_ATTEMPTS=5,LOGIN_LOCKOUT_MS=300*1e3;function checkLoginRate(r){const t=Date.now(),u=_loginAttempts.get(r);return!u||t>u.resetAt?!0:u.count<LOGIN_MAX_ATTEMPTS}function recordLoginFailure(r){const t=Date.now(),u=_loginAttempts.get(r);!u||t>u.resetAt?_loginAttempts.set(r,{count:1,resetAt:t+LOGIN_LOCKOUT_MS}):u.count++}function clearLoginFailures(r){_loginAttempts.delete(r)}setInterval((()=>{const r=Date.now();for(const[t,u]of _loginAttempts)r>u.resetAt&&_loginAttempts.delete(t)}),600*1e3),app.get("/login",((r,t)=>{t.sendFile(__nccwpck_require__.ab+"login.html")})),app.post("/login",express.urlencoded({extended:!1}),((r,t)=>{const u=r.ip;if(!checkLoginRate(u))return t.redirect("/login?error=locked");loadRoles(),loadUsers();const d=r.body?.password,p=r.query.from,h=p&&p.startsWith("/")&&!p.startsWith("//")?p:"/";if(hasUsers()){const j=lookupUser(d);if(!j)return recordLoginFailure(u),t.redirect("/login?error=1");if(isExclusiveMode()&&activeUser&&activeUser.name!==j.name)return t.redirect("/login?error=occupied&user="+encodeURIComponent(activeUser.name));clearLoginFailures(u);const b=(0,external_crypto_.randomBytes)(16).toString("hex");return userSessions.set(b,{role:"operator",name:j.name,dir:j.dir,lastUsed:Date.now()}),isExclusiveMode()&&(activeUser?activeUser.tokens.add(b):activeUser={name:j.name,dir:j.dir,tokens:new Set([b]),loginAt:Date.now()}),setSessionCookie(t,b),console.log(`[\u767B\u5F55] ${j.name} \u767B\u5F55\uFF08${isExclusiveMode()?"\u72EC\u5360":"\u5171\u4EAB"}\u6A21\u5F0F\uFF09`),t.redirect(h)}const x=lookupPassword(d);if(x){clearLoginFailures(u);const j=(0,external_crypto_.randomBytes)(16).toString("hex");return userSessions.set(j,{role:x.role,name:x.name,lastUsed:Date.now()}),setSessionCookie(t,j),t.redirect(h)}if(d===PASSWORD){clearLoginFailures(u);const j=(0,external_crypto_.randomBytes)(16).toString("hex");return userSessions.set(j,{role:"admin",name:"\u7BA1\u7406\u5458",lastUsed:Date.now()}),setSessionCookie(t,j),t.redirect(h)}recordLoginFailure(u),t.redirect("/login?error=1")})),app.post("/logout",((r,t)=>{const u=getSessionToken(r.headers.cookie);u&&(activeUser&&activeUser.tokens.has(u)&&(activeUser.tokens.delete(u),activeUser.tokens.size===0?(console.log(`[\u9000\u51FA] ${activeUser.name} \u5168\u90E8\u8BBE\u5907\u9000\u51FA\uFF0C\u91CA\u653E\u767B\u5F55\u72B6\u6001\uFF08\u4F1A\u8BDD\u4FDD\u7559\uFF09`),activeUser=null):console.log(`[\u9000\u51FA] ${activeUser.name} \u4E00\u4E2A\u8BBE\u5907\u9000\u51FA\uFF08\u5269\u4F59 ${activeUser.tokens.size} \u4E2A\uFF09`)),userSessions.delete(u)),t.setHeader("Set-Cookie",`${SESSION_COOKIE}=; HttpOnly; SameSite=Strict; Path=/; Max-Age=0`),t.redirect("/login")})),app.get("/api/status",((r,t)=>{if(isExclusiveMode()&&activeUser)return t.json({occupied:!0,userName:activeUser.name,releasing:!!_exclusiveReleaseTimer});if(hasUsers()&&!isExclusiveMode()){const u=new Set;for(const[,d]of io.sockets.sockets){if(!d.data.userName||d.data.userName==="\u7BA1\u7406\u5458")continue;const p=d.handshake.headers.cookie;p&&!hasValidSession(p)||u.add(d.data.userName)}return t.json({occupied:!1,onlineUsers:[...u]})}t.json({occupied:!1})})),app.get("/admin",((r,t)=>t.sendFile(__nccwpck_require__.ab+"admin.html"))),app.get("/sw.js",((r,t)=>{t.setHeader("Service-Worker-Allowed","/"),t.sendFile(__nccwpck_require__.ab+"sw.js")})),app.get("/",checkAuth,((r,t)=>t.sendFile(__nccwpck_require__.ab+"index.html"))),app.get("/terminal/:id",checkAuth,((r,t)=>t.sendFile(__nccwpck_require__.ab+"chat.html"))),app.get("/files",checkAuth,((r,t)=>t.sendFile(__nccwpck_require__.ab+"files.html"))),app.get("/sync",checkAuth,((r,t)=>t.sendFile(__nccwpck_require__.ab+"sync.html"))),app.use("/lib",express.static(__nccwpck_require__.ab+"lib",staticOpts)),app.get("/api/sessions",checkAuth,((r,t)=>{const u=getUserInfo(r.headers.cookie);t.json(manager.list(u?.name,u?.role==="admin"))})),app.get("/api/usage",((r,t)=>{try{const u=manager.listSessions().filter((p=>p.mode==="agent"&&p.alive)).map((p=>({id:p.id,title:p.title,owner:p.owner,usage:p._usage})));let d=null;for(const p of u)if(p.usage?.rateLimitInfo){d=p.usage.rateLimitInfo;break}t.json({rateLimit:d,activeSessions:u})}catch(u){t.status(500).json({error:u.message})}})),app.post("/api/sessions",checkAuth,express.json(),((r,t)=>{const u=getUserInfo(r.headers.cookie),d=manager.createAgent({...r.body,owner:u?.name,userDir:u?.dir});t.status(201).json(d.toJSON())})),app.delete("/api/sessions/:id",checkAuth,((r,t)=>{manager.kill(r.params.id),t.status(204).end()})),app.get("/api/claude-sessions",checkAuth,((r,t)=>{const u=getUserInfo(r.headers.cookie);t.json(listLocalClaudeSessions(u?.dir))})),app.get("/api/dirs",checkAuth,((r,t)=>{const u=getUserInfo(r.headers.cookie);if(!u||u.role!=="admin")return t.status(403).json({error:"\u6CA1\u6709\u76EE\u5F55\u6D4F\u89C8\u6743\u9650"});const d=u.dir?(0,external_path_.resolve)((0,external_path_.normalize)(u.dir)):null,p=process.platform==="win32"?"\\":"/";let h=r.query.path||d||process.env.ZIHI_CWD||(0,external_os_.homedir)(),x=(0,external_path_.resolve)((0,external_path_.normalize)(h)).replace(/[/\\]+$/,"");process.platform==="win32"&&/^[A-Za-z]:$/.test(x)&&(x+="\\"),d&&!x.startsWith(d)&&(x=d);try{const j=(0,external_fs_.readdirSync)(x,{withFileTypes:!0}).filter(($=>$.isDirectory()&&!$.name.startsWith("."))).map(($=>({name:$.name,path:x.replace(/[/\\]+$/,"")+p+$.name}))).sort((($,O)=>$.name.localeCompare(O.name))),b=(0,external_path_.join)(x,".."),w=!d||(0,external_path_.resolve)((0,external_path_.normalize)(b)).startsWith(d);t.json({current:x,parent:w&&b!==x?b:null,dirs:j})}catch(j){t.status(400).json({error:j.message})}})),app.get("/api/me",checkAuth,((r,t)=>{const u=getUserInfo(r.headers.cookie);t.json({name:u?.name||"\u7528\u6237",exclusive:isExclusiveMode(),hasUsers:hasUsers(),dir:u?.dir||null})}));function getPkgVersion(){for(const r of["../package.json","./package.json","package.json"])try{const t=JSON.parse((0,external_fs_.readFileSync)((0,external_path_.join)(server_dirname,r),"utf8")).version;if(t&&t!=="0.0.0")return t}catch{}return"0.0.0"}const PKG_VERSION=getPkgVersion();let _latestVersion=null,_lastVersionCheck=0;const VERSION_CHECK_INTERVAL=600*1e3;async function checkLatestVersion(){const r=Date.now();if(_latestVersion&&r-_lastVersionCheck<VERSION_CHECK_INTERVAL)return _latestVersion;try{const t=await fetch("https://registry.npmjs.org/@wendongfly/zihi/latest",{headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3)});t.ok&&(_latestVersion=(await t.json()).version,_lastVersionCheck=r)}catch{}return _latestVersion}app.get("/api/version",(async(r,t)=>{const u=getPkgVersion(),d=await checkLatestVersion();t.json({current:u,latest:d||u,updateAvailable:d&&d!==u})})),app.post("/api/git/push",checkAuth,express.json(),(async(r,t)=>{const{sessionId:u,url:d,username:p,password:h,message:x,branch:j}=r.body||{};if(!u||!x)return t.status(400).json({ok:!1,error:"\u7F3A\u5C11\u53C2\u6570"});const b=manager.get(u);if(!b)return t.status(404).json({ok:!1,error:"\u4F1A\u8BDD\u4E0D\u5B58\u5728"});const w=b.cwd||process.cwd(),$=process.platform==="win32",O="git";function I(U,z={}){return new Promise(((N,B)=>{const L={...process.env,GIT_TERMINAL_PROMPT:"0"},W=(0,external_path_.join)(w,".gitconfig");(0,external_fs_.existsSync)(W)&&(L.GIT_CONFIG_GLOBAL=W);const H=(0,external_child_process_namespaceObject.spawn)(O,U,{cwd:w,env:L,timeout:6e4});let V="",J="";H.stdout.on("data",(G=>V+=G)),H.stderr.on("data",(G=>J+=G)),H.on("close",(G=>G===0?N(V.trim()):B(new Error(J.trim()||`exit ${G}`)))),H.on("error",B)}))}try{try{await I(["rev-parse","--git-dir"])}catch{await I(["init"])}if(d&&p&&h){const B=new URL(d);B.username=encodeURIComponent(p),B.password=encodeURIComponent(h);const L=B.toString(),W=(0,external_path_.join)(w,".git-credentials");(0,external_fs_.writeFileSync)(W,L+`
468
+ `)[0]}catch{}try{if(process.platform==="win32"){const t=(0,external_child_process_namespaceObject.execSync)("route print 0.0.0.0",{timeout:3e3,stdio:"pipe"}).toString().match(/0\.0\.0\.0\s+0\.0\.0\.0\s+\S+\s+(\d+\.\d+\.\d+\.\d+)/);if(t)return t[1]}else try{const t=(0,external_child_process_namespaceObject.execSync)("ip route get 1.1.1.1",{timeout:3e3,stdio:"pipe"}).toString().match(/src\s+(\d+\.\d+\.\d+\.\d+)/);if(t)return t[1]}catch{const r=(0,external_child_process_namespaceObject.execSync)("route -n get default 2>/dev/null || route -n 2>/dev/null",{timeout:3e3,stdio:"pipe"}).toString(),t=r.match(/interface:\s*(\S+)/i)||r.match(/0\.0\.0\.0\s+(\d+\.\d+\.\d+\.\d+)/);if(t){const u=(0,external_os_.networkInterfaces)()[t[1]];if(u){const d=u.find((p=>p.family==="IPv4"&&!p.internal));if(d)return d.address}if(/^\d+\.\d+\.\d+\.\d+$/.test(t[1]))return t[1]}}}catch{}for(const r of Object.values((0,external_os_.networkInterfaces)()))for(const t of r)if(t.family==="IPv4"&&!t.internal)return t.address;return"localhost"}function parseCookies(r=""){const t={};for(const u of r.split(";")){const d=u.indexOf("=");d>0&&(t[u.slice(0,d).trim()]=u.slice(d+1).trim())}return t}const SESSION_COOKIE="zihi_sid",COOKIE_OPTS="HttpOnly; SameSite=Lax; Path=/; Max-Age=31536000";function setSessionCookie(r,t){r.setHeader("Set-Cookie",`${SESSION_COOKIE}=${t||TOKEN}; ${COOKIE_OPTS}`)}function getSessionToken(r){return parseCookies(r)[SESSION_COOKIE]||null}function hasValidSession(r){const t=getSessionToken(r);if(t&&userSessions.has(t)){const u=userSessions.get(t);return u&&(u.lastUsed=Date.now()),!0}return!1}function getUserInfo(r){const t=getSessionToken(r);return t?userSessions.get(t):null}const MIME_MAP={".html":"text/html",".css":"text/css",".js":"text/javascript",".mjs":"text/javascript",".json":"application/json",".xml":"application/xml",".txt":"text/plain",".md":"text/plain",".csv":"text/csv",".log":"text/plain",".sh":"text/plain",".py":"text/plain",".ts":"text/plain",".jsx":"text/plain",".tsx":"text/plain",".yml":"text/plain",".yaml":"text/plain",".png":"image/png",".jpg":"image/jpeg",".jpeg":"image/jpeg",".gif":"image/gif",".svg":"image/svg+xml",".webp":"image/webp",".ico":"image/x-icon",".bmp":"image/bmp",".mp3":"audio/mpeg",".wav":"audio/wav",".ogg":"audio/ogg",".flac":"audio/flac",".m4a":"audio/mp4",".aac":"audio/aac",".wma":"audio/x-ms-wma",".mp4":"video/mp4",".webm":"video/webm",".mkv":"video/x-matroska",".avi":"video/x-msvideo",".mov":"video/quicktime",".flv":"video/x-flv",".pdf":"application/pdf",".zip":"application/zip",".gz":"application/gzip",".tar":"application/x-tar",".7z":"application/x-7z-compressed",".rar":"application/x-rar-compressed",".doc":"application/msword",".docx":"application/vnd.openxmlformats-officedocument.wordprocessingml.document",".xls":"application/vnd.ms-excel",".xlsx":"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",".ppt":"application/vnd.ms-powerpoint",".pptx":"application/vnd.openxmlformats-officedocument.presentationml.presentation",".woff":"font/woff",".woff2":"font/woff2",".ttf":"font/ttf",".eot":"application/vnd.ms-fontobject"};function getMime(r){return MIME_MAP[(0,external_path_.extname)(r).toLowerCase()]||"application/octet-stream"}function sanitizeError(r){return(r||"\u64CD\u4F5C\u5931\u8D25").replace(/[<>"'&]/g,(t=>({"<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","&":"&amp;"})[t]))}function resolveUserFilePath(r,t){const u=getUserInfo(r.headers.cookie),d=r.query.sessionId||r.body?.sessionId,p=d?manager.get(d):null,x=(p?.cwd?(0,external_path_.resolve)((0,external_path_.normalize)(p.cwd)):null)||(u?.dir?(0,external_path_.resolve)((0,external_path_.normalize)(u.dir)):process.env.ZIHI_CWD||(0,external_os_.homedir)());let j=t?(0,external_path_.resolve)((0,external_path_.normalize)(x),(0,external_path_.normalize)(t)):x;if(process.platform==="win32"&&/^[A-Za-z]:$/.test(j)&&(j+="\\"),!j.startsWith(x))return{error:"\u8BBF\u95EE\u88AB\u62D2\u7EDD\uFF1A\u8DEF\u5F84\u8D85\u51FA\u5141\u8BB8\u8303\u56F4",status:403};try{if(!(0,external_fs_.realpathSync)(j).startsWith(x))return{error:"\u8BBF\u95EE\u88AB\u62D2\u7EDD\uFF1A\u7B26\u53F7\u94FE\u63A5\u6307\u5411\u5141\u8BB8\u8303\u56F4\u5916",status:403}}catch{}return{resolved:j,userRoot:x,info:u}}const app=express();app.set("trust proxy","loopback"),app.use(((r,t,u)=>{t.setHeader("Referrer-Policy","no-referrer"),t.setHeader("X-Content-Type-Options","nosniff"),u()}));const httpServer=(0,external_http_.createServer)(app),_corsAllowed=/^https?:\/\/(localhost|127\.0\.0\.1|\[::1\]|10\.\d+\.\d+\.\d+|172\.(1[6-9]|2\d|3[01])\.\d+\.\d+|192\.168\.\d+\.\d+|100\.(6[4-9]|[7-9]\d|1[01]\d|12[0-7])\.\d+\.\d+)(:\d+)?$/,io=new Server({cors:{origin:(r,t)=>{if(!r||_corsAllowed.test(r))return t(null,!0);t(new Error("CORS \u4E0D\u5141\u8BB8\u6B64\u6765\u6E90"),!1)},credentials:!0},transports:["polling","websocket"],pingTimeout:6e4,pingInterval:25e3,upgradeTimeout:3e4,allowUpgrades:!0,maxHttpBufferSize:5e6});io.attach(httpServer);const manager=new SessionManager,uploadDir=(0,external_path_.join)(configDir,"uploads");(0,external_fs_.mkdirSync)(uploadDir,{recursive:!0});function checkAuth(r,t,u){const d=r.query.token;if(d&&userSessions.has(d)){const p=userSessions.get(d);if(p?.onetime){userSessions.delete(d);const x=(0,external_crypto_.randomBytes)(16).toString("hex");userSessions.set(x,{role:p.role,name:p.name,lastUsed:Date.now()}),setSessionCookie(t,x)}else setSessionCookie(t,d);const h=r.path+(Object.keys(r.query).filter((x=>x!=="token")).length?"?"+new URLSearchParams(Object.fromEntries(Object.entries(r.query).filter((([x])=>x!=="token")))):"");return t.redirect(h)}if(hasValidSession(r.headers.cookie)){if(isExclusiveMode()&&activeUser){const p=getSessionToken(r.headers.cookie);if(p!==TOKEN){const h=userSessions.get(p);if(!h||h.name!==activeUser.name)return t.setHeader("Set-Cookie",`${SESSION_COOKIE}=; HttpOnly; SameSite=Strict; Path=/; Max-Age=0`),t.redirect("/login")}}return u()}t.redirect("/login")}const server_require=(0,external_module_namespaceObject.createRequire)(import.meta.url);function pkgDirSafe(r){try{return(0,external_path_.dirname)(server_require.resolve(`${r}/package.json`))}catch{return null}}const libDir=(0,external_path_.join)(server_dirname,"lib"),staticOpts={maxAge:864e5};app.use("/lib/xterm",express.static(pkgDirSafe("@xterm/xterm")||(0,external_path_.join)(libDir,"xterm"),staticOpts)),app.use("/lib/xterm-fit",express.static(pkgDirSafe("@xterm/addon-fit")||(0,external_path_.join)(libDir,"xterm-fit"),staticOpts)),app.use("/lib/xterm-links",express.static(pkgDirSafe("@xterm/addon-web-links")||(0,external_path_.join)(libDir,"xterm-links"),staticOpts));const _loginAttempts=new Map,LOGIN_MAX_ATTEMPTS=5,LOGIN_LOCKOUT_MS=300*1e3;function checkLoginRate(r){const t=Date.now(),u=_loginAttempts.get(r);return!u||t>u.resetAt?!0:u.count<LOGIN_MAX_ATTEMPTS}function recordLoginFailure(r){const t=Date.now(),u=_loginAttempts.get(r);!u||t>u.resetAt?_loginAttempts.set(r,{count:1,resetAt:t+LOGIN_LOCKOUT_MS}):u.count++}function clearLoginFailures(r){_loginAttempts.delete(r)}setInterval((()=>{const r=Date.now();for(const[t,u]of _loginAttempts)r>u.resetAt&&_loginAttempts.delete(t)}),600*1e3),app.get("/login",((r,t)=>{t.sendFile(__nccwpck_require__.ab+"login.html")})),app.post("/login",express.urlencoded({extended:!1}),((r,t)=>{const u=r.ip;if(!checkLoginRate(u))return t.redirect("/login?error=locked");loadRoles(),loadUsers();const d=r.body?.password,p=r.query.from,h=p&&p.startsWith("/")&&!p.startsWith("//")?p:"/";if(hasUsers()){const j=lookupUser(d);if(!j)return recordLoginFailure(u),t.redirect("/login?error=1");if(isExclusiveMode()&&activeUser&&activeUser.name!==j.name)return t.redirect("/login?error=occupied&user="+encodeURIComponent(activeUser.name));clearLoginFailures(u);const b=(0,external_crypto_.randomBytes)(16).toString("hex");return userSessions.set(b,{role:"operator",name:j.name,dir:j.dir,lastUsed:Date.now()}),isExclusiveMode()&&(activeUser?activeUser.tokens.add(b):activeUser={name:j.name,dir:j.dir,tokens:new Set([b]),loginAt:Date.now()}),setSessionCookie(t,b),console.log(`[\u767B\u5F55] ${j.name} \u767B\u5F55\uFF08${isExclusiveMode()?"\u72EC\u5360":"\u5171\u4EAB"}\u6A21\u5F0F\uFF09`),t.redirect(h)}const x=lookupPassword(d);if(x){clearLoginFailures(u);const j=(0,external_crypto_.randomBytes)(16).toString("hex");return userSessions.set(j,{role:x.role,name:x.name,lastUsed:Date.now()}),setSessionCookie(t,j),t.redirect(h)}if(d===PASSWORD){clearLoginFailures(u);const j=(0,external_crypto_.randomBytes)(16).toString("hex");return userSessions.set(j,{role:"admin",name:"\u7BA1\u7406\u5458",lastUsed:Date.now()}),setSessionCookie(t,j),t.redirect(h)}recordLoginFailure(u),t.redirect("/login?error=1")})),app.post("/logout",((r,t)=>{const u=getSessionToken(r.headers.cookie);u&&(activeUser&&activeUser.tokens.has(u)&&(activeUser.tokens.delete(u),activeUser.tokens.size===0?(console.log(`[\u9000\u51FA] ${activeUser.name} \u5168\u90E8\u8BBE\u5907\u9000\u51FA\uFF0C\u91CA\u653E\u767B\u5F55\u72B6\u6001\uFF08\u4F1A\u8BDD\u4FDD\u7559\uFF09`),activeUser=null):console.log(`[\u9000\u51FA] ${activeUser.name} \u4E00\u4E2A\u8BBE\u5907\u9000\u51FA\uFF08\u5269\u4F59 ${activeUser.tokens.size} \u4E2A\uFF09`)),userSessions.delete(u)),t.setHeader("Set-Cookie",`${SESSION_COOKIE}=; HttpOnly; SameSite=Strict; Path=/; Max-Age=0`),t.redirect("/login")})),app.get("/api/status",((r,t)=>{if(isExclusiveMode()&&activeUser)return t.json({occupied:!0,userName:activeUser.name,releasing:!!_exclusiveReleaseTimer});if(hasUsers()&&!isExclusiveMode()){const u=new Set;for(const[,d]of io.sockets.sockets){if(!d.data.userName||d.data.userName==="\u7BA1\u7406\u5458")continue;const p=d.handshake.headers.cookie;p&&!hasValidSession(p)||u.add(d.data.userName)}return t.json({occupied:!1,onlineUsers:[...u]})}t.json({occupied:!1})})),app.get("/admin",((r,t)=>t.sendFile(__nccwpck_require__.ab+"admin.html"))),app.get("/sw.js",((r,t)=>{t.setHeader("Service-Worker-Allowed","/"),t.sendFile(__nccwpck_require__.ab+"sw.js")})),app.get("/",checkAuth,((r,t)=>t.sendFile(__nccwpck_require__.ab+"index.html"))),app.get("/terminal/:id",checkAuth,((r,t)=>t.sendFile(__nccwpck_require__.ab+"chat.html"))),app.get("/files",checkAuth,((r,t)=>t.sendFile(__nccwpck_require__.ab+"files.html"))),app.use("/lib",express.static(__nccwpck_require__.ab+"lib",staticOpts)),app.get("/api/sessions",checkAuth,((r,t)=>{const u=getUserInfo(r.headers.cookie);t.json(manager.list(u?.name,u?.role==="admin"))})),app.get("/api/usage",checkAuth,((r,t)=>{try{const u=manager.listSessions().filter((p=>p.mode==="agent"&&p.alive)).map((p=>({id:p.id,title:p.title,owner:p.owner,usage:p._usage})));let d=null;for(const p of u)if(p.usage?.rateLimitInfo){d=p.usage.rateLimitInfo;break}t.json({rateLimit:d,activeSessions:u})}catch(u){t.status(500).json({error:u.message})}})),app.post("/api/sessions",checkAuth,express.json(),((r,t)=>{const u=getUserInfo(r.headers.cookie),d=manager.createAgent({...r.body,owner:u?.name,userDir:u?.dir});t.status(201).json(d.toJSON())})),app.delete("/api/sessions/:id",checkAuth,((r,t)=>{manager.kill(r.params.id),t.status(204).end()})),app.get("/api/claude-sessions",checkAuth,((r,t)=>{const u=getUserInfo(r.headers.cookie);t.json(listLocalClaudeSessions(u?.dir))})),app.get("/api/dirs",checkAuth,((r,t)=>{const u=getUserInfo(r.headers.cookie);if(!u||u.role!=="admin")return t.status(403).json({error:"\u6CA1\u6709\u76EE\u5F55\u6D4F\u89C8\u6743\u9650"});const d=u.dir?(0,external_path_.resolve)((0,external_path_.normalize)(u.dir)):null,p=process.platform==="win32"?"\\":"/";let h=r.query.path||d||process.env.ZIHI_CWD||(0,external_os_.homedir)(),x=(0,external_path_.resolve)((0,external_path_.normalize)(h)).replace(/[/\\]+$/,"");process.platform==="win32"&&/^[A-Za-z]:$/.test(x)&&(x+="\\"),d&&!x.startsWith(d)&&(x=d);try{const j=(0,external_fs_.readdirSync)(x,{withFileTypes:!0}).filter(($=>$.isDirectory()&&!$.name.startsWith("."))).map(($=>({name:$.name,path:x.replace(/[/\\]+$/,"")+p+$.name}))).sort((($,O)=>$.name.localeCompare(O.name))),b=(0,external_path_.join)(x,".."),w=!d||(0,external_path_.resolve)((0,external_path_.normalize)(b)).startsWith(d);t.json({current:x,parent:w&&b!==x?b:null,dirs:j})}catch(j){t.status(400).json({error:sanitizeError(j.message)})}})),app.get("/api/me",checkAuth,((r,t)=>{const u=getUserInfo(r.headers.cookie);t.json({name:u?.name||"\u7528\u6237",exclusive:isExclusiveMode(),hasUsers:hasUsers(),dir:u?.dir||null})}));function getPkgVersion(){for(const r of["../package.json","./package.json","package.json"])try{const t=JSON.parse((0,external_fs_.readFileSync)((0,external_path_.join)(server_dirname,r),"utf8")).version;if(t&&t!=="0.0.0")return t}catch{}return"0.0.0"}const PKG_VERSION=getPkgVersion();let _latestVersion=null,_lastVersionCheck=0;const VERSION_CHECK_INTERVAL=600*1e3;async function checkLatestVersion(){const r=Date.now();if(_latestVersion&&r-_lastVersionCheck<VERSION_CHECK_INTERVAL)return _latestVersion;try{const t=await fetch("https://registry.npmjs.org/@wendongfly/zihi/latest",{headers:{Accept:"application/json"},signal:AbortSignal.timeout(8e3)});t.ok&&(_latestVersion=(await t.json()).version,_lastVersionCheck=r)}catch{}return _latestVersion}app.get("/api/version",(async(r,t)=>{const u=getPkgVersion(),d=await checkLatestVersion();t.json({current:u,latest:d||u,updateAvailable:d&&d!==u})})),app.post("/api/git/push",checkAuth,express.json(),(async(r,t)=>{const{sessionId:u,url:d,username:p,password:h,message:x,branch:j}=r.body||{};if(!u||!x)return t.status(400).json({ok:!1,error:"\u7F3A\u5C11\u53C2\u6570"});const b=manager.get(u);if(!b)return t.status(404).json({ok:!1,error:"\u4F1A\u8BDD\u4E0D\u5B58\u5728"});const w=b.cwd||process.cwd(),$=process.platform==="win32",O="git";function I(U,z={}){return new Promise(((N,B)=>{const L={...process.env,GIT_TERMINAL_PROMPT:"0"},W=(0,external_path_.join)(w,".gitconfig");(0,external_fs_.existsSync)(W)&&(L.GIT_CONFIG_GLOBAL=W);const H=(0,external_child_process_namespaceObject.spawn)(O,U,{cwd:w,env:L,timeout:6e4});let V="",J="";H.stdout.on("data",(G=>V+=G)),H.stderr.on("data",(G=>J+=G)),H.on("close",(G=>G===0?N(V.trim()):B(new Error(J.trim()||`exit ${G}`)))),H.on("error",B)}))}try{try{await I(["rev-parse","--git-dir"])}catch{await I(["init"])}if(d&&p&&h){const B=new URL(d);B.username=encodeURIComponent(p),B.password=encodeURIComponent(h);const L=B.toString(),W=(0,external_path_.join)(w,".git-credentials");(0,external_fs_.writeFileSync)(W,L+`
469
469
  `,{mode:384});const H=(0,external_path_.join)(w,".gitconfig"),J=`[credential]
470
470
  helper = store --file ${W.replace(/\\/g,"/")}
471
471
  [user]
@@ -475,7 +475,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
475
475
  helper = store --file ${x.replace(/\\/g,"/")}
476
476
  [user]
477
477
  name = ${d}
478
- `,{mode:384})}catch{}console.log(`[\u7BA1\u7406] \u6DFB\u52A0\u7528\u6237 ${d} (\u76EE\u5F55: ${p})`),t.json({ok:!0})})),app.delete("/api/admin/user",checkAdminAuth,express.json(),((r,t)=>{const{name:u}=r.body||{};if(!u)return t.json({ok:!1,error:"\u8BF7\u6307\u5B9A\u7528\u6237\u540D\u79F0"});if(loadUsers(),!listUsers().find((h=>h.name===u)))return t.json({ok:!1,error:"\u7528\u6237\u4E0D\u5B58\u5728"});try{const h=(0,external_path_.join)(configDir,"users.json"),x=JSON.parse((0,external_fs_.readFileSync)(h,"utf8"));for(const[j,b]of Object.entries(x.users||{}))if(b.name===u){delete x.users[j];break}(0,external_fs_.writeFileSync)(h,JSON.stringify(x,null,2),{mode:384}),loadUsers(),console.log(`[\u7BA1\u7406] \u5220\u9664\u7528\u6237 ${u}`),t.json({ok:!0})}catch(h){t.json({ok:!1,error:h.message})}})),app.post("/api/admin/user/password",checkAdminAuth,express.json(),((r,t)=>{const{name:u,password:d}=r.body||{};if(!u||!d)return t.json({ok:!1,error:"\u540D\u79F0\u548C\u65B0\u5BC6\u7801\u5FC5\u586B"});try{const p=(0,external_path_.join)(configDir,"users.json"),h=JSON.parse((0,external_fs_.readFileSync)(p,"utf8"));let x=null;for(const[j,b]of Object.entries(h.users||{}))if(b.name===u){x=b,delete h.users[j];break}if(!x)return t.json({ok:!1,error:"\u7528\u6237\u4E0D\u5B58\u5728"});h.users[d]=x,(0,external_fs_.writeFileSync)(p,JSON.stringify(h,null,2),{mode:384}),loadUsers(),console.log(`[\u7BA1\u7406] \u4FEE\u6539\u7528\u6237 ${u} \u7684\u5BC6\u7801`),t.json({ok:!0})}catch(p){t.json({ok:!1,error:p.message})}})),app.post("/api/admin/password",checkAdminAuth,express.json(),((r,t)=>{const{password:u}=r.body||{};if(!u||u.length<4)return t.json({ok:!1,error:"\u5BC6\u7801\u81F3\u5C114\u4F4D"});try{(0,external_fs_.writeFileSync)((0,external_path_.join)(configDir,"password"),u,{mode:384}),PASSWORD=u,t.json({ok:!0}),console.log("[\u7BA1\u7406] \u7BA1\u7406\u5BC6\u7801\u5DF2\u4FEE\u6539")}catch(d){t.json({ok:!1,error:d.message})}})),app.post("/upload",checkAuth,((r,t)=>{const u=r.query.sessionId,d=u?manager.get(u):null,p=d?.cwd?(0,external_path_.join)(d.cwd,"upload"):uploadDir;(0,external_fs_.mkdirSync)(p,{recursive:!0}),multer({storage:multer.diskStorage({destination:p,filename:(x,j,b)=>{const w=j.originalname.match(/\.[^.]+$/)?.[0]||".jpg";b(null,`${Date.now()}-${(0,external_crypto_.randomBytes)(3).toString("hex")}${w}`)}}),limits:{fileSize:20*1024*1024},fileFilter:(x,j,b)=>b(null,j.mimetype.startsWith("image/")),defParamCharset:"utf-8"}).single("image")(r,t,(x=>{if(x)return t.status(400).json({error:x.message});if(!r.file)return t.status(400).json({error:"\u6CA1\u6709\u56FE\u7247"});t.json({path:(0,external_path_.resolve)(r.file.path).replace(/\\/g,"/")})}))})),app.get("/api/files/list",checkAuth,((r,t)=>{const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});try{if(!(0,external_fs_.statSync)(u.resolved).isDirectory())return t.status(400).json({error:"\u4E0D\u662F\u76EE\u5F55"});const p=r.query.showHidden==="1",h=(0,external_fs_.readdirSync)(u.resolved,{withFileTypes:!0}).filter(($=>p||!$.name.startsWith("."))).map(($=>{try{const O=(0,external_path_.join)(u.resolved,$.name),I=(0,external_fs_.statSync)(O);return{name:$.name,type:$.isDirectory()?"dir":"file",size:I.size,mtime:I.mtime}}catch{return{name:$.name,type:$.isDirectory()?"dir":"file",size:0,mtime:null}}})).sort((($,O)=>$.type===O.type?$.name.localeCompare(O.name):$.type==="dir"?-1:1)),x=(0,external_path_.join)(u.resolved,".."),j=(0,external_path_.resolve)((0,external_path_.normalize)(x)),b=j.startsWith(u.userRoot)&&j!==u.resolved,w=u.resolved.startsWith(u.userRoot)?u.resolved.slice(u.userRoot.length).replace(/^[/\\]+/,""):"";t.json({current:u.resolved.replace(/\\/g,"/"),currentRel:w.replace(/\\/g,"/"),parent:b?j.replace(/\\/g,"/"):null,root:u.userRoot.replace(/\\/g,"/"),entries:h})}catch(d){t.status(400).json({error:d.message})}})),app.post("/api/files/upload",checkAuth,((r,t)=>{const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});(0,external_fs_.mkdirSync)(u.resolved,{recursive:!0}),multer({storage:multer.diskStorage({destination:(p,h,x)=>{const j=h.originalname||"",b=j.lastIndexOf("/"),w=b>0?j.slice(0,b):"",$=w?(0,external_path_.join)(u.resolved,w):u.resolved;(0,external_fs_.mkdirSync)($,{recursive:!0}),x(null,$)},filename:(p,h,x)=>{const j=h.originalname||"",b=j.lastIndexOf("/"),w=b>0?j.slice(b+1):(0,external_path_.basename)(j);x(null,w||`${Date.now()}.bin`)}}),limits:{fileSize:500*1024*1024},defParamCharset:"utf-8"}).array("files",100)(r,t,(p=>{if(p)return t.status(400).json({error:p.message});if(!r.files?.length)return t.status(400).json({error:"\u6CA1\u6709\u6587\u4EF6"});const h={ok:!0,files:r.files.map((j=>({name:j.filename,path:(0,external_path_.resolve)(j.path).replace(/\\/g,"/"),size:j.size})))};t.json(h);const x=r.query.sessionId;x&&io.to(x).emit("files:changed",{sessionId:x})}))})),app.get("/api/files/download",checkAuth,((r,t)=>{if(!r.query.path)return t.status(400).json({error:"\u7F3A\u5C11 path \u53C2\u6570"});const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});try{const d=(0,external_fs_.statSync)(u.resolved);if(!d.isFile())return t.status(400).json({error:"\u4E0D\u662F\u6587\u4EF6"});const p=(0,external_path_.basename)(u.resolved);t.setHeader("Content-Type",getMime(p)),t.setHeader("Content-Length",d.size),t.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(p)}`),(0,external_fs_.createReadStream)(u.resolved).pipe(t)}catch(d){t.status(404).json({error:d.message})}})),app.get("/api/files/preview",checkAuth,((r,t)=>{if(!r.query.path)return t.status(400).json({error:"\u7F3A\u5C11 path \u53C2\u6570"});const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});try{const d=(0,external_fs_.statSync)(u.resolved);if(!d.isFile())return t.status(400).json({error:"\u4E0D\u662F\u6587\u4EF6"});const p=(0,external_path_.basename)(u.resolved),h=getMime(p);t.setHeader("Content-Type",h),t.setHeader("Content-Length",d.size),t.setHeader("Content-Disposition",`inline; filename*=UTF-8''${encodeURIComponent(p)}`),(0,external_fs_.createReadStream)(u.resolved).pipe(t)}catch(d){t.status(404).json({error:d.message})}})),app.post("/api/files/mkdir",checkAuth,express.json(),((r,t)=>{const{path:u}=r.body||{};if(!u)return t.status(400).json({error:"\u7F3A\u5C11 path"});const d=resolveUserFilePath(r,u);if(d.error)return t.status(d.status).json({error:d.error});try{(0,external_fs_.mkdirSync)(d.resolved,{recursive:!0}),t.json({ok:!0,path:d.resolved.replace(/\\/g,"/")})}catch(p){t.status(400).json({error:p.message})}})),app.delete("/api/files/delete",checkAuth,express.json(),((r,t)=>{const u=getUserInfo(r.headers.cookie);if(!u||u.role!=="admin")return t.status(403).json({error:"\u4EC5\u7BA1\u7406\u5458\u53EF\u5220\u9664"});const{path:d}=r.body||{};if(!d)return t.status(400).json({error:"\u7F3A\u5C11 path"});const p=resolveUserFilePath(r,d);if(p.error)return t.status(p.status).json({error:p.error});if(p.resolved===p.userRoot)return t.status(403).json({error:"\u4E0D\u5141\u8BB8\u5220\u9664\u6839\u76EE\u5F55"});try{(0,external_fs_.statSync)(p.resolved).isDirectory()?(0,external_fs_.rmSync)(p.resolved,{recursive:!1}):(0,external_fs_.unlinkSync)(p.resolved),t.json({ok:!0});const x=r.body?.sessionId||r.query.sessionId;x&&io.to(x).emit("files:changed",{sessionId:x})}catch(h){t.status(400).json({error:h.message})}})),app.get("/api/files/manifest",checkAuth,((r,t)=>{const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});try{if(!(0,external_fs_.statSync)(u.resolved).isDirectory())return t.status(400).json({error:"\u4E0D\u662F\u76EE\u5F55"});const p=walkFiles(u.resolved,"");t.json({ok:!0,cwd:u.resolved.replace(/\\/g,"/"),path:(r.query.path||"").replace(/\\/g,"/"),files:p})}catch(d){t.status(400).json({error:d.message})}})),app.get("/api/sync/config",checkAuth,((r,t)=>{const u=getUserInfo(r.headers.cookie),d=loadSyncConfig(),p=u?.name||"_default";t.json(d[p]||{projects:[]})})),app.post("/api/sync/config",checkAuth,express.json(),((r,t)=>{const d=getUserInfo(r.headers.cookie)?.name||"_default",p=loadSyncConfig();p[d]=r.body,saveSyncConfig(p),t.json({ok:!0})})),app.get("/api/sync/tree",checkAuth,((r,t)=>{const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});try{if(!(0,external_fs_.statSync)(u.resolved).isDirectory())return t.status(400).json({error:"\u4E0D\u662F\u76EE\u5F55"});const p=r.query.ignore?JSON.parse(r.query.ignore):DEFAULT_IGNORE,h=scanDirTree(u.resolved,p,{withHash:r.query.hash==="1",showHidden:r.query.showHidden==="1"});t.json({root:u.resolved.replace(/\\/g,"/"),tree:h})}catch(d){t.status(400).json({error:d.message})}})),app.post("/api/sync/pull-file",checkAuth,express.json(),((r,t)=>{const{path:u}=r.body||{};if(!u)return t.status(400).json({error:"\u7F3A\u5C11 path"});const d=resolveUserFilePath(r,u);if(d.error)return t.status(d.status).json({error:d.error});try{const p=(0,external_fs_.statSync)(d.resolved);if(!p.isFile())return t.status(400).json({error:"\u4E0D\u662F\u6587\u4EF6"});t.setHeader("Content-Type","application/octet-stream"),t.setHeader("Content-Length",p.size),(0,external_fs_.createReadStream)(d.resolved).pipe(t)}catch(p){t.status(404).json({error:p.message})}})),app.post("/api/sync/push-file",checkAuth,((r,t)=>{const u=r.query.path;if(!u)return t.status(400).json({error:"\u7F3A\u5C11 path"});const d=resolveUserFilePath(r,u);if(d.error)return t.status(d.status).json({error:d.error});const p=(0,external_path_.join)(d.resolved,"..");(0,external_fs_.mkdirSync)(p,{recursive:!0}),multer({storage:multer.diskStorage({destination:p,filename:(x,j,b)=>b(null,(0,external_path_.basename)(d.resolved))}),limits:{fileSize:500*1024*1024}}).single("file")(r,t,(x=>{if(x)return t.status(400).json({error:x.message});if(!r.file)return t.status(400).json({error:"\u6CA1\u6709\u6587\u4EF6"});t.json({ok:!0,path:d.resolved.replace(/\\/g,"/"),size:r.file.size})}))})),app.post("/api/sync/delete-file",checkAuth,express.json(),((r,t)=>{const{path:u}=r.body||{};if(!u)return t.status(400).json({error:"\u7F3A\u5C11 path"});const d=resolveUserFilePath(r,u);if(d.error)return t.status(d.status).json({error:d.error});if(d.resolved===d.userRoot)return t.status(403).json({error:"\u4E0D\u5141\u8BB8\u5220\u9664\u6839\u76EE\u5F55"});try{if((0,external_fs_.statSync)(d.resolved).isDirectory())return t.status(400).json({error:"\u4E0D\u80FD\u901A\u8FC7\u540C\u6B65\u5220\u9664\u76EE\u5F55"});(0,external_fs_.unlinkSync)(d.resolved),t.json({ok:!0})}catch(p){t.status(400).json({error:p.message})}})),app.get("/qr/:sessionId",checkAuth,(async(r,t)=>{const u=getTailscaleIP(),d=(0,external_crypto_.randomBytes)(16).toString("hex");userSessions.set(d,{role:"admin",name:"\u626B\u7801\u7528\u6237",onetime:!0,lastUsed:Date.now()});const p=`http://${u}:${PORT}/terminal/${r.params.sessionId}?token=${d}`;try{const h=await lib.toString(p,{type:"svg"});t.setHeader("Content-Type","image/svg+xml"),t.send(h)}catch(h){t.status(500).send(h.message)}})),io.use(((r,t)=>{const u=r.handshake.headers.cookie;if(hasValidSession(u)){const h=getUserInfo(u);return r.data.role=h?.role||"admin",r.data.userName=h?.name||"\u7528\u6237",r.data.dir=h?.dir||null,t()}const d=r.handshake.auth?.password;if(d){loadUsers();const h=lookupUser(d);if(h)return r.data.role="operator",r.data.userName=h.name,r.data.dir=h.dir,t()}if((r.handshake.auth?.token||r.handshake.query?.token)===TOKEN)return r.data.role="admin",r.data.userName="\u7BA1\u7406\u5458",t();t(new Error("\u672A\u6388\u6743"))}));const EXCLUSIVE_RELEASE_DELAY=120*1e3;let _exclusiveReleaseTimer=null;function checkExclusiveRelease(){if(!isExclusiveMode()||!activeUser)return;let r=!1;for(const[,t]of io.sockets.sockets)if(t.data.userName===activeUser.name){r=!0;break}if(r){_exclusiveReleaseTimer&&(clearTimeout(_exclusiveReleaseTimer),_exclusiveReleaseTimer=null);return}_exclusiveReleaseTimer||(_exclusiveReleaseTimer=setTimeout((()=>{if(_exclusiveReleaseTimer=null,!!activeUser){for(const[,t]of io.sockets.sockets)if(t.data.userName===activeUser.name)return;console.log(`[\u72EC\u5360] ${activeUser.name} \u5DF2\u79BB\u7EBF\u8D85\u65F6\uFF0C\u91CA\u653E\u767B\u5F55\u72B6\u6001\uFF08\u4F1A\u8BDD\u4FDD\u7559\uFF09`);for(const t of activeUser.tokens)userSessions.delete(t);activeUser=null}}),EXCLUSIVE_RELEASE_DELAY))}let _broadcastTimer=null;function broadcastSessions(){_broadcastTimer||(_broadcastTimer=setTimeout((()=>{_broadcastTimer=null;for(const[,r]of io.sockets.sockets)r.emit("sessions",manager.list(r.data.userName,r.data.role==="admin"))}),100))}io.on("connection",(r=>{const t=r.handshake.address?.replace("::ffff:","")||"?",u=r.handshake.headers?.referer||"?";console.log(`[\u8FDE\u63A5] ${r.data.userName}(${r.data.role}) \u4ECE ${t} \u63A5\u5165 id=${r.id} \u9875\u9762=${u}`),_exclusiveReleaseTimer&&activeUser&&r.data.userName===activeUser.name&&(clearTimeout(_exclusiveReleaseTimer),_exclusiveReleaseTimer=null);let d=null,p=null,h=null,x=null,j=null;function b(){d&&(d.isController(r.id)&&(d.releaseControl(),io.emit("control-changed",{sessionId:d.id,holder:null,holderName:null})),d.removeViewer(r.id),p&&d.off("data",p),h&&d.off("agent:message",h),x&&d.off("agent:busy",x),j&&d.off("agent:error",j),p=null,h=null,x=null,j=null)}r.on("join",(w=>{const $=manager.get(w);if(!$){r.emit("error",{message:`\u4F1A\u8BDD ${w} \u672A\u627E\u5230`});return}b(),d=$,d.addViewer(r.id,r.data.userName),r.join(w),h=O=>r.emit("agent:message",O),d.on("agent:message",h),x=O=>r.emit("agent:busy",O),d.on("agent:busy",x),j=O=>r.emit("agent:error",O),d.on("agent:error",j),console.log(`[\u52A0\u5165] ${r.data.userName} \u52A0\u5165\u4F1A\u8BDD "${$.title}" (${w})`),r.emit("joined",{...$.toJSON(),role:r.data.role}),$._history?.length&&r.emit("agent:history",$._history),broadcastSessions()})),r.on("disconnect",(w=>{console.log(`[\u65AD\u5F00] ${r.data.userName} \u79BB\u5F00\u4F1A\u8BDD "${d?.title||"?"}" id=${r.id} \u539F\u56E0=${w}`),b(),broadcastSessions(),checkExclusiveRelease(),manager.persist()})),r.on("agent:query",(async({prompt:w}={})=>{if(!d||d.mode!=="agent"){r.emit("agent:error",{message:"\u5F53\u524D\u4E0D\u662F Agent \u6A21\u5F0F\u4F1A\u8BDD"});return}if(!d.isController(r.id)){r.emit("control-denied",{reason:"\u4F60\u6CA1\u6709\u5F53\u524D\u4F1A\u8BDD\u7684\u63A7\u5236\u6743"});return}if(d.isBusy){r.emit("agent:error",{message:"\u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u8BF7\u7B49\u5F85\u5B8C\u6210"});return}try{await d.query(w)}catch($){console.error("[agent:query] \u9519\u8BEF:",$.message);try{r.connected&&r.emit("agent:error",{message:$.message})}catch{}}})),r.on("agent:interrupt",(()=>{!d||d.mode!=="agent"||d.interrupt()})),r.on("agent:permission",(({requestId:w,allow:$,toolName:O,approveAll:I}={})=>{if(!(!d||d.mode!=="agent")){if(!d.isController(r.id)){r.emit("control-denied",{reason:"\u4F60\u6CA1\u6709\u5F53\u524D\u4F1A\u8BDD\u7684\u63A7\u5236\u6743"});return}d.respondPermission(w,$,O,I)}})),r.on("set-mode",(({sessionId:w,mode:$}={})=>{const O=w?manager.get(w):d;O&&(O.setPermissionMode&&(O.setPermissionMode($),console.log(`[\u6A21\u5F0F] ${r.data.userName} \u5207\u6362\u4F1A\u8BDD "${O.title}" \u4E3A ${$}`)),io.emit("mode-changed",{sessionId:O.id,mode:$}),manager.persist())})),r.on("create-agent",((w,$)=>{if(!hasPermission(r.data.role,"operator")){typeof $=="function"&&$({ok:!1,error:"\u6CA1\u6709\u521B\u5EFA\u4F1A\u8BDD\u7684\u6743\u9650"});return}if(r.data.dir){const I=(0,external_path_.resolve)((0,external_path_.normalize)(r.data.dir)),U=w?.cwd?(0,external_path_.resolve)((0,external_path_.normalize)(w.cwd)):null;if(U&&U!==I&&!U.startsWith(I+external_path_.sep)){typeof $=="function"&&$({ok:!1,error:"\u4E0D\u80FD\u5728\u7ED1\u5B9A\u76EE\u5F55\u4E4B\u5916\u521B\u5EFA\u4F1A\u8BDD"});return}U||(w={...w,cwd:I})}const O=w?.cwd||process.env.ZIHI_CWD||process.cwd();if(!(0,external_fs_.existsSync)(O))try{(0,external_fs_.mkdirSync)(O,{recursive:!0}),console.log(`[\u521B\u5EFA] \u81EA\u52A8\u521B\u5EFA\u76EE\u5F55: ${O}`)}catch(I){typeof $=="function"&&$({ok:!1,error:`\u521B\u5EFA\u76EE\u5F55\u5931\u8D25: ${I.message}`});return}try{const I=manager.createAgent({...w,owner:r.data.userName,userDir:r.data.dir});console.log(`[\u4F1A\u8BDD] ${r.data.userName} \u521B\u5EFA Agent \u4F1A\u8BDD "${I.title}" (${I.id})`),broadcastSessions(),typeof $=="function"&&$({ok:!0,session:I.toJSON()})}catch(I){typeof $=="function"&&$({ok:!1,error:I.message})}})),r.on("take-control",(({sessionId:w}={})=>{const $=w?manager.get(w):d;if($){if(!hasPermission(r.data.role,"operator")){r.emit("control-denied",{reason:"\u4F60\u7684\u89D2\u8272\u6CA1\u6709\u63A7\u5236\u6743\u9650"});return}if($.controlHolder&&$.controlHolder!==r.id){const O=$.controlHolderName===r.data.userName;if(r.data.role!=="admin"&&!O){r.emit("control-denied",{reason:"\u5176\u4ED6\u7528\u6237\u6B63\u5728\u63A7\u5236\u4E2D\uFF0C\u8BF7\u7B49\u5F85\u91CA\u653E"});return}}$.takeControl(r.id,r.data.userName),console.log(`[\u63A7\u5236] ${r.data.userName} \u83B7\u53D6\u4F1A\u8BDD "${$.title}" \u7684\u63A7\u5236\u6743`),io.emit("control-changed",{sessionId:$.id,holder:r.id,holderName:r.data.userName})}})),r.on("release-control",(({sessionId:w}={})=>{const $=w?manager.get(w):d;$&&$.isController(r.id)&&(console.log(`[\u63A7\u5236] ${r.data.userName} \u91CA\u653E\u4F1A\u8BDD "${$.title}" \u7684\u63A7\u5236\u6743`),$.releaseControl(),io.emit("control-changed",{sessionId:$.id,holder:null,holderName:null}))})),r.on("rename",(({sessionId:w,title:$}={})=>{const O=w?manager.get(w):d;!O||!$||(O.title=$,io.emit("session-renamed",{sessionId:O.id,title:$}),broadcastSessions(),manager.persist())})),r.on("resize",(({cols:w,rows:$})=>d?.resize(w,$))),r.on("list",(()=>r.emit("sessions",manager.list(r.data.userName,r.data.role==="admin")))),r.on("dirs",((w,$)=>{if(typeof $!="function")return;const O=r.data.dir?(0,external_path_.resolve)((0,external_path_.normalize)(r.data.dir)):null,I=process.platform==="win32"?"\\":"/";let U=(w||O||process.env.ZIHI_CWD||(0,external_os_.homedir)()).replace(/[/\\]+$/,"")||(0,external_os_.homedir)();process.platform==="win32"&&/^[A-Za-z]:$/.test(U)&&(U+="\\");const z=(0,external_path_.resolve)((0,external_path_.normalize)(U));O&&z!==O&&!z.startsWith(O+I)&&(U=O);try{const N=(0,external_fs_.readdirSync)(U,{withFileTypes:!0}).filter((H=>H.isDirectory()&&!H.name.startsWith("."))).map((H=>({name:H.name,path:U.replace(/[/\\]+$/,"")+I+H.name}))).sort(((H,V)=>H.name.localeCompare(V.name))),B=(0,external_path_.join)(U,".."),L=(0,external_path_.resolve)((0,external_path_.normalize)(B)),W=!O||L===O||L.startsWith(O+I);$({ok:!0,current:U,parent:W&&B!==U?B:null,dirs:N})}catch(N){$({ok:!1,error:N.message})}})),r.on("kill",(w=>{if(!hasPermission(r.data.role,"operator")){r.emit("error",{message:"\u6CA1\u6709\u5220\u9664\u4F1A\u8BDD\u7684\u6743\u9650"});return}console.log(`[\u4F1A\u8BDD] ${r.data.userName} \u5220\u9664\u4F1A\u8BDD ${w}`),manager.kill(w),broadcastSessions()})),r.on("kick-user",(({socketId:w,sessionId:$}={},O)=>{if(!hasPermission(r.data.role,"admin")){typeof O=="function"&&O({ok:!1,error:"\u6CA1\u6709\u8E22\u51FA\u7528\u6237\u7684\u6743\u9650"});return}const I=io.sockets.sockets.get(w);if(!I){typeof O=="function"&&O({ok:!1,error:"\u76EE\u6807\u7528\u6237\u4E0D\u5728\u7EBF"});return}const U=I.data.userName||"\u672A\u77E5";console.log(`[\u8E22\u51FA] ${r.data.userName} \u8E22\u51FA\u4E86\u7528\u6237 ${U} (${w})`),I.emit("kicked",{reason:`\u4F60\u5DF2\u88AB\u7BA1\u7406\u5458 ${r.data.userName} \u8E22\u51FA`}),I.disconnect(!0),typeof O=="function"&&O({ok:!0,name:U})})),r.on("list-viewers",(({sessionId:w}={},$)=>{if(typeof $!="function")return;const O=w?manager.get(w):d;if(!O){$({ok:!1,error:"\u4F1A\u8BDD\u4E0D\u5B58\u5728"});return}const I=[];for(const U of O._viewers){const z=io.sockets.sockets.get(U);z&&I.push({socketId:U,userName:z.data.userName||"\u672A\u77E5",role:z.data.role||"viewer",isController:O.controlHolder===U})}$({ok:!0,viewers:I})}))}));const CONTROL_TIMEOUT=300*1e3;setInterval((()=>{for(const r of manager.listSessions()){r.controlHolder&&(!io.sockets.sockets.get(r.controlHolder)||r.lastInputTime&&Date.now()-r.lastInputTime>CONTROL_TIMEOUT)&&(r.releaseControl(),io.emit("control-changed",{sessionId:r.id,holder:null,holderName:null}));for(const t of r._viewers)io.sockets.sockets.has(t)||r.removeViewer(t)}}),60*1e3);function showStartupInfo(){const r=httpServer.address().port;PORT=r;const t=getTailscaleIP(),u=`http://${t}:${r}/admin`;console.log(`
478
+ `,{mode:384})}catch{}console.log(`[\u7BA1\u7406] \u6DFB\u52A0\u7528\u6237 ${d} (\u76EE\u5F55: ${p})`),t.json({ok:!0})})),app.delete("/api/admin/user",checkAdminAuth,express.json(),((r,t)=>{const{name:u}=r.body||{};if(!u)return t.json({ok:!1,error:"\u8BF7\u6307\u5B9A\u7528\u6237\u540D\u79F0"});if(loadUsers(),!listUsers().find((h=>h.name===u)))return t.json({ok:!1,error:"\u7528\u6237\u4E0D\u5B58\u5728"});try{const h=(0,external_path_.join)(configDir,"users.json"),x=JSON.parse((0,external_fs_.readFileSync)(h,"utf8"));for(const[j,b]of Object.entries(x.users||{}))if(b.name===u){delete x.users[j];break}(0,external_fs_.writeFileSync)(h,JSON.stringify(x,null,2),{mode:384}),loadUsers(),console.log(`[\u7BA1\u7406] \u5220\u9664\u7528\u6237 ${u}`),t.json({ok:!0})}catch(h){t.json({ok:!1,error:h.message})}})),app.post("/api/admin/user/password",checkAdminAuth,express.json(),((r,t)=>{const{name:u,password:d}=r.body||{};if(!u||!d)return t.json({ok:!1,error:"\u540D\u79F0\u548C\u65B0\u5BC6\u7801\u5FC5\u586B"});try{const p=(0,external_path_.join)(configDir,"users.json"),h=JSON.parse((0,external_fs_.readFileSync)(p,"utf8"));let x=null;for(const[j,b]of Object.entries(h.users||{}))if(b.name===u){x=b,delete h.users[j];break}if(!x)return t.json({ok:!1,error:"\u7528\u6237\u4E0D\u5B58\u5728"});h.users[d]=x,(0,external_fs_.writeFileSync)(p,JSON.stringify(h,null,2),{mode:384}),loadUsers(),console.log(`[\u7BA1\u7406] \u4FEE\u6539\u7528\u6237 ${u} \u7684\u5BC6\u7801`),t.json({ok:!0})}catch(p){t.json({ok:!1,error:p.message})}})),app.post("/api/admin/password",checkAdminAuth,express.json(),((r,t)=>{const{password:u}=r.body||{};if(!u||u.length<4)return t.json({ok:!1,error:"\u5BC6\u7801\u81F3\u5C114\u4F4D"});try{(0,external_fs_.writeFileSync)((0,external_path_.join)(configDir,"password"),u,{mode:384}),PASSWORD=u,t.json({ok:!0}),console.log("[\u7BA1\u7406] \u7BA1\u7406\u5BC6\u7801\u5DF2\u4FEE\u6539")}catch(d){t.json({ok:!1,error:d.message})}})),app.post("/upload",checkAuth,((r,t)=>{const u=r.query.sessionId,d=u?manager.get(u):null,p=d?.cwd?(0,external_path_.join)(d.cwd,"upload"):uploadDir;(0,external_fs_.mkdirSync)(p,{recursive:!0}),multer({storage:multer.diskStorage({destination:p,filename:(x,j,b)=>{const w=j.originalname.match(/\.[^.]+$/)?.[0]||".jpg";b(null,`${Date.now()}-${(0,external_crypto_.randomBytes)(3).toString("hex")}${w}`)}}),limits:{fileSize:20*1024*1024},fileFilter:(x,j,b)=>b(null,j.mimetype.startsWith("image/")),defParamCharset:"utf-8"}).single("image")(r,t,(x=>{if(x)return t.status(400).json({error:x.message});if(!r.file)return t.status(400).json({error:"\u6CA1\u6709\u56FE\u7247"});t.json({path:(0,external_path_.resolve)(r.file.path).replace(/\\/g,"/")})}))})),app.get("/api/files/list",checkAuth,((r,t)=>{const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});try{if(!(0,external_fs_.statSync)(u.resolved).isDirectory())return t.status(400).json({error:"\u4E0D\u662F\u76EE\u5F55"});const p=r.query.showHidden==="1",h=(0,external_fs_.readdirSync)(u.resolved,{withFileTypes:!0}).filter(($=>p||!$.name.startsWith("."))).map(($=>{try{const O=(0,external_path_.join)(u.resolved,$.name),I=(0,external_fs_.statSync)(O);return{name:$.name,type:$.isDirectory()?"dir":"file",size:I.size,mtime:I.mtime}}catch{return{name:$.name,type:$.isDirectory()?"dir":"file",size:0,mtime:null}}})).sort((($,O)=>$.type===O.type?$.name.localeCompare(O.name):$.type==="dir"?-1:1)),x=(0,external_path_.join)(u.resolved,".."),j=(0,external_path_.resolve)((0,external_path_.normalize)(x)),b=j.startsWith(u.userRoot)&&j!==u.resolved,w=u.resolved.startsWith(u.userRoot)?u.resolved.slice(u.userRoot.length).replace(/^[/\\]+/,""):"";t.json({current:u.resolved.replace(/\\/g,"/"),currentRel:w.replace(/\\/g,"/"),parent:b?j.replace(/\\/g,"/"):null,root:u.userRoot.replace(/\\/g,"/"),entries:h})}catch(d){t.status(400).json({error:sanitizeError(d.message)})}})),app.post("/api/files/upload",checkAuth,((r,t)=>{const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});(0,external_fs_.mkdirSync)(u.resolved,{recursive:!0}),multer({storage:multer.diskStorage({destination:(p,h,x)=>{const j=h.originalname||"",b=j.lastIndexOf("/"),w=b>0?j.slice(0,b):"",$=w?(0,external_path_.join)(u.resolved,w):u.resolved;if(!(0,external_path_.resolve)($).startsWith(u.resolved))return x(new Error("\u8DEF\u5F84\u4E0D\u5408\u6CD5"));(0,external_fs_.mkdirSync)($,{recursive:!0}),x(null,$)},filename:(p,h,x)=>{const j=h.originalname||"",b=j.lastIndexOf("/"),w=b>0?j.slice(b+1):(0,external_path_.basename)(j);x(null,w||`${Date.now()}.bin`)}}),limits:{fileSize:500*1024*1024},defParamCharset:"utf-8"}).array("files",100)(r,t,(p=>{if(p)return t.status(400).json({error:p.message});if(!r.files?.length)return t.status(400).json({error:"\u6CA1\u6709\u6587\u4EF6"});const h={ok:!0,files:r.files.map((j=>({name:j.filename,path:(0,external_path_.resolve)(j.path).replace(/\\/g,"/"),size:j.size})))};t.json(h);const x=r.query.sessionId;x&&io.to(x).emit("files:changed",{sessionId:x})}))})),app.get("/api/files/download",checkAuth,((r,t)=>{if(!r.query.path)return t.status(400).json({error:"\u7F3A\u5C11 path \u53C2\u6570"});const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});try{const d=(0,external_fs_.statSync)(u.resolved);if(!d.isFile())return t.status(400).json({error:"\u4E0D\u662F\u6587\u4EF6"});const p=(0,external_path_.basename)(u.resolved);t.setHeader("Content-Type",getMime(p)),t.setHeader("Content-Length",d.size),t.setHeader("Content-Disposition",`attachment; filename*=UTF-8''${encodeURIComponent(p)}`),(0,external_fs_.createReadStream)(u.resolved).pipe(t)}catch(d){t.status(404).json({error:sanitizeError(d.message)})}})),app.get("/api/files/preview",checkAuth,((r,t)=>{if(!r.query.path)return t.status(400).json({error:"\u7F3A\u5C11 path \u53C2\u6570"});const u=resolveUserFilePath(r,r.query.path);if(u.error)return t.status(u.status).json({error:u.error});try{const d=(0,external_fs_.statSync)(u.resolved);if(!d.isFile())return t.status(400).json({error:"\u4E0D\u662F\u6587\u4EF6"});const p=(0,external_path_.basename)(u.resolved),h=getMime(p);t.setHeader("Content-Type",h),t.setHeader("Content-Length",d.size),t.setHeader("Content-Disposition",`inline; filename*=UTF-8''${encodeURIComponent(p)}`),(0,external_fs_.createReadStream)(u.resolved).pipe(t)}catch(d){t.status(404).json({error:sanitizeError(d.message)})}})),app.post("/api/files/mkdir",checkAuth,express.json(),((r,t)=>{const{path:u}=r.body||{};if(!u)return t.status(400).json({error:"\u7F3A\u5C11 path"});const d=resolveUserFilePath(r,u);if(d.error)return t.status(d.status).json({error:d.error});try{(0,external_fs_.mkdirSync)(d.resolved,{recursive:!0}),t.json({ok:!0,path:d.resolved.replace(/\\/g,"/")})}catch(p){t.status(400).json({error:sanitizeError(p.message)})}})),app.delete("/api/files/delete",checkAuth,express.json(),((r,t)=>{const u=getUserInfo(r.headers.cookie);if(!u||u.role!=="admin")return t.status(403).json({error:"\u4EC5\u7BA1\u7406\u5458\u53EF\u5220\u9664"});const{path:d}=r.body||{};if(!d)return t.status(400).json({error:"\u7F3A\u5C11 path"});const p=resolveUserFilePath(r,d);if(p.error)return t.status(p.status).json({error:p.error});if(p.resolved===p.userRoot)return t.status(403).json({error:"\u4E0D\u5141\u8BB8\u5220\u9664\u6839\u76EE\u5F55"});try{(0,external_fs_.statSync)(p.resolved).isDirectory()?(0,external_fs_.rmSync)(p.resolved,{recursive:!1}):(0,external_fs_.unlinkSync)(p.resolved),t.json({ok:!0});const x=r.body?.sessionId||r.query.sessionId;x&&io.to(x).emit("files:changed",{sessionId:x})}catch(h){t.status(400).json({error:sanitizeError(h.message)})}})),app.get("/qr/:sessionId",checkAuth,(async(r,t)=>{const u=getTailscaleIP(),d=(0,external_crypto_.randomBytes)(16).toString("hex");userSessions.set(d,{role:"operator",name:"\u626B\u7801\u7528\u6237",onetime:!0,lastUsed:Date.now()});const p=`http://${u}:${PORT}/terminal/${r.params.sessionId}?token=${d}`;try{const h=await lib.toString(p,{type:"svg"});t.setHeader("Content-Type","image/svg+xml"),t.send(h)}catch(h){t.status(500).send(h.message)}})),io.use(((r,t)=>{const u=r.handshake.headers.cookie;if(hasValidSession(u)){const h=getUserInfo(u);return r.data.role=h?.role||"admin",r.data.userName=h?.name||"\u7528\u6237",r.data.dir=h?.dir||null,t()}const d=r.handshake.auth?.password;if(d){loadUsers();const h=lookupUser(d);if(h)return r.data.role="operator",r.data.userName=h.name,r.data.dir=h.dir,t()}if((r.handshake.auth?.token||r.handshake.query?.token)===TOKEN)return r.data.role="admin",r.data.userName="\u7BA1\u7406\u5458",t();t(new Error("\u672A\u6388\u6743"))}));const EXCLUSIVE_RELEASE_DELAY=120*1e3;let _exclusiveReleaseTimer=null;function checkExclusiveRelease(){if(!isExclusiveMode()||!activeUser)return;let r=!1;for(const[,t]of io.sockets.sockets)if(t.data.userName===activeUser.name){r=!0;break}if(r){_exclusiveReleaseTimer&&(clearTimeout(_exclusiveReleaseTimer),_exclusiveReleaseTimer=null);return}_exclusiveReleaseTimer||(_exclusiveReleaseTimer=setTimeout((()=>{if(_exclusiveReleaseTimer=null,!!activeUser){for(const[,t]of io.sockets.sockets)if(t.data.userName===activeUser.name)return;console.log(`[\u72EC\u5360] ${activeUser.name} \u5DF2\u79BB\u7EBF\u8D85\u65F6\uFF0C\u91CA\u653E\u767B\u5F55\u72B6\u6001\uFF08\u4F1A\u8BDD\u4FDD\u7559\uFF09`);for(const t of activeUser.tokens)userSessions.delete(t);activeUser=null}}),EXCLUSIVE_RELEASE_DELAY))}let _broadcastTimer=null;function broadcastSessions(){_broadcastTimer||(_broadcastTimer=setTimeout((()=>{_broadcastTimer=null;for(const[,r]of io.sockets.sockets)r.emit("sessions",manager.list(r.data.userName,r.data.role==="admin"))}),100))}io.on("connection",(r=>{const t=r.handshake.address?.replace("::ffff:","")||"?",u=r.handshake.headers?.referer||"?";console.log(`[\u8FDE\u63A5] ${r.data.userName}(${r.data.role}) \u4ECE ${t} \u63A5\u5165 id=${r.id} \u9875\u9762=${u}`),_exclusiveReleaseTimer&&activeUser&&r.data.userName===activeUser.name&&(clearTimeout(_exclusiveReleaseTimer),_exclusiveReleaseTimer=null);let d=null,p=null,h=null,x=null,j=null;function b(){d&&(d.isController(r.id)&&(d.releaseControl(),io.emit("control-changed",{sessionId:d.id,holder:null,holderName:null})),d.removeViewer(r.id),p&&d.off("data",p),h&&d.off("agent:message",h),x&&d.off("agent:busy",x),j&&d.off("agent:error",j),p=null,h=null,x=null,j=null)}r.on("join",(w=>{const $=manager.get(w);if(!$){r.emit("error",{message:`\u4F1A\u8BDD ${w} \u672A\u627E\u5230`});return}if(r.data.role!=="admin"&&$.owner&&$.owner!==r.data.userName){r.emit("error",{message:"\u6CA1\u6709\u52A0\u5165\u8BE5\u4F1A\u8BDD\u7684\u6743\u9650"});return}b(),d=$,d.addViewer(r.id,r.data.userName),r.join(w),h=O=>r.emit("agent:message",O),d.on("agent:message",h),x=O=>r.emit("agent:busy",O),d.on("agent:busy",x),j=O=>r.emit("agent:error",O),d.on("agent:error",j),console.log(`[\u52A0\u5165] ${r.data.userName} \u52A0\u5165\u4F1A\u8BDD "${$.title}" (${w})`),r.emit("joined",{...$.toJSON(),role:r.data.role}),$._history?.length&&r.emit("agent:history",$._history),broadcastSessions()})),r.on("disconnect",(w=>{console.log(`[\u65AD\u5F00] ${r.data.userName} \u79BB\u5F00\u4F1A\u8BDD "${d?.title||"?"}" id=${r.id} \u539F\u56E0=${w}`),b(),broadcastSessions(),checkExclusiveRelease(),manager.persist()})),r.on("agent:query",(async({prompt:w}={})=>{if(!d||d.mode!=="agent"){r.emit("agent:error",{message:"\u5F53\u524D\u4E0D\u662F Agent \u6A21\u5F0F\u4F1A\u8BDD"});return}if(!d.isController(r.id)){r.emit("control-denied",{reason:"\u4F60\u6CA1\u6709\u5F53\u524D\u4F1A\u8BDD\u7684\u63A7\u5236\u6743"});return}if(d.isBusy){r.emit("agent:error",{message:"\u6B63\u5728\u5904\u7406\u4E2D\uFF0C\u8BF7\u7B49\u5F85\u5B8C\u6210"});return}try{await d.query(w)}catch($){console.error("[agent:query] \u9519\u8BEF:",$.message);try{r.connected&&r.emit("agent:error",{message:$.message})}catch{}}})),r.on("agent:interrupt",(()=>{if(!(!d||d.mode!=="agent")){if(!d.isController(r.id)){r.emit("control-denied",{reason:"\u4F60\u6CA1\u6709\u5F53\u524D\u4F1A\u8BDD\u7684\u63A7\u5236\u6743"});return}d.interrupt()}})),r.on("agent:permission",(({requestId:w,allow:$,toolName:O,approveAll:I}={})=>{if(!(!d||d.mode!=="agent")){if(!d.isController(r.id)){r.emit("control-denied",{reason:"\u4F60\u6CA1\u6709\u5F53\u524D\u4F1A\u8BDD\u7684\u63A7\u5236\u6743"});return}d.respondPermission(w,$,O,I)}})),r.on("set-mode",(({sessionId:w,mode:$}={})=>{const O=w?manager.get(w):d;if(O){if(r.data.role!=="admin"&&O.owner&&O.owner!==r.data.userName){r.emit("error",{message:"\u6CA1\u6709\u66F4\u6539\u6A21\u5F0F\u7684\u6743\u9650"});return}O.setPermissionMode&&(O.setPermissionMode($),console.log(`[\u6A21\u5F0F] ${r.data.userName} \u5207\u6362\u4F1A\u8BDD "${O.title}" \u4E3A ${$}`)),io.emit("mode-changed",{sessionId:O.id,mode:$}),manager.persist()}})),r.on("create-agent",((w,$)=>{if(!hasPermission(r.data.role,"operator")){typeof $=="function"&&$({ok:!1,error:"\u6CA1\u6709\u521B\u5EFA\u4F1A\u8BDD\u7684\u6743\u9650"});return}if(r.data.dir){const U=(0,external_path_.resolve)((0,external_path_.normalize)(r.data.dir)),z=w?.cwd?(0,external_path_.resolve)((0,external_path_.normalize)(w.cwd)):null;if(z&&z!==U&&!z.startsWith(U+external_path_.sep)){typeof $=="function"&&$({ok:!1,error:"\u4E0D\u80FD\u5728\u7ED1\u5B9A\u76EE\u5F55\u4E4B\u5916\u521B\u5EFA\u4F1A\u8BDD"});return}z||(w={...w,cwd:U})}const O=w?.cwd||r.data.dir||process.env.ZIHI_CWD||process.cwd(),I=(0,external_path_.join)(O,".zihi-sessions",`${Date.now()}-${randomUUID().slice(0,8)}`);try{(0,external_fs_.mkdirSync)(I,{recursive:!0})}catch(U){typeof $=="function"&&$({ok:!1,error:`\u521B\u5EFA\u9694\u79BB\u76EE\u5F55\u5931\u8D25: ${U.message}`});return}w={...w,cwd:I};try{const U=manager.createAgent({...w,owner:r.data.userName,userDir:r.data.dir});console.log(`[\u4F1A\u8BDD] ${r.data.userName} \u521B\u5EFA Agent \u4F1A\u8BDD "${U.title}" (${U.id})`),broadcastSessions(),typeof $=="function"&&$({ok:!0,session:U.toJSON()})}catch(U){typeof $=="function"&&$({ok:!1,error:U.message})}})),r.on("take-control",(({sessionId:w}={})=>{const $=w?manager.get(w):d;if($){if(!hasPermission(r.data.role,"operator")){r.emit("control-denied",{reason:"\u4F60\u7684\u89D2\u8272\u6CA1\u6709\u63A7\u5236\u6743\u9650"});return}if($.controlHolder&&$.controlHolder!==r.id){const O=$.controlHolderName===r.data.userName;if(r.data.role!=="admin"&&!O){r.emit("control-denied",{reason:"\u5176\u4ED6\u7528\u6237\u6B63\u5728\u63A7\u5236\u4E2D\uFF0C\u8BF7\u7B49\u5F85\u91CA\u653E"});return}}$.takeControl(r.id,r.data.userName),console.log(`[\u63A7\u5236] ${r.data.userName} \u83B7\u53D6\u4F1A\u8BDD "${$.title}" \u7684\u63A7\u5236\u6743`),io.emit("control-changed",{sessionId:$.id,holder:r.id,holderName:r.data.userName})}})),r.on("release-control",(({sessionId:w}={})=>{const $=w?manager.get(w):d;$&&$.isController(r.id)&&(console.log(`[\u63A7\u5236] ${r.data.userName} \u91CA\u653E\u4F1A\u8BDD "${$.title}" \u7684\u63A7\u5236\u6743`),$.releaseControl(),io.emit("control-changed",{sessionId:$.id,holder:null,holderName:null}))})),r.on("rename",(({sessionId:w,title:$}={})=>{const O=w?manager.get(w):d;if(!(!O||!$)){if(r.data.role!=="admin"&&O.owner&&O.owner!==r.data.userName){r.emit("error",{message:"\u6CA1\u6709\u91CD\u547D\u540D\u4F1A\u8BDD\u7684\u6743\u9650"});return}O.title=$,io.emit("session-renamed",{sessionId:O.id,title:$}),broadcastSessions(),manager.persist()}})),r.on("resize",(({cols:w,rows:$})=>d?.resize(w,$))),r.on("list",(()=>r.emit("sessions",manager.list(r.data.userName,r.data.role==="admin")))),r.on("dirs",((w,$)=>{if(typeof $!="function")return;const O=r.data.dir?(0,external_path_.resolve)((0,external_path_.normalize)(r.data.dir)):null,I=process.platform==="win32"?"\\":"/";let U=(w||O||process.env.ZIHI_CWD||(0,external_os_.homedir)()).replace(/[/\\]+$/,"")||(0,external_os_.homedir)();process.platform==="win32"&&/^[A-Za-z]:$/.test(U)&&(U+="\\");const z=(0,external_path_.resolve)((0,external_path_.normalize)(U));O&&z!==O&&!z.startsWith(O+I)&&(U=O);try{const N=(0,external_fs_.readdirSync)(U,{withFileTypes:!0}).filter((H=>H.isDirectory()&&!H.name.startsWith("."))).map((H=>({name:H.name,path:U.replace(/[/\\]+$/,"")+I+H.name}))).sort(((H,V)=>H.name.localeCompare(V.name))),B=(0,external_path_.join)(U,".."),L=(0,external_path_.resolve)((0,external_path_.normalize)(B)),W=!O||L===O||L.startsWith(O+I);$({ok:!0,current:U,parent:W&&B!==U?B:null,dirs:N})}catch(N){$({ok:!1,error:N.message})}})),r.on("kill",(w=>{if(!hasPermission(r.data.role,"operator")){r.emit("error",{message:"\u6CA1\u6709\u5220\u9664\u4F1A\u8BDD\u7684\u6743\u9650"});return}const $=manager.get(w);if($&&r.data.role!=="admin"&&$.owner&&$.owner!==r.data.userName){r.emit("error",{message:"\u6CA1\u6709\u5220\u9664\u8BE5\u4F1A\u8BDD\u7684\u6743\u9650"});return}console.log(`[\u4F1A\u8BDD] ${r.data.userName} \u5220\u9664\u4F1A\u8BDD ${w}`),manager.kill(w),broadcastSessions()})),r.on("kick-user",(({socketId:w,sessionId:$}={},O)=>{if(!hasPermission(r.data.role,"admin")){typeof O=="function"&&O({ok:!1,error:"\u6CA1\u6709\u8E22\u51FA\u7528\u6237\u7684\u6743\u9650"});return}const I=io.sockets.sockets.get(w);if(!I){typeof O=="function"&&O({ok:!1,error:"\u76EE\u6807\u7528\u6237\u4E0D\u5728\u7EBF"});return}const U=I.data.userName||"\u672A\u77E5";console.log(`[\u8E22\u51FA] ${r.data.userName} \u8E22\u51FA\u4E86\u7528\u6237 ${U} (${w})`),I.emit("kicked",{reason:`\u4F60\u5DF2\u88AB\u7BA1\u7406\u5458 ${r.data.userName} \u8E22\u51FA`}),I.disconnect(!0),typeof O=="function"&&O({ok:!0,name:U})})),r.on("list-viewers",(({sessionId:w}={},$)=>{if(typeof $!="function")return;const O=w?manager.get(w):d;if(!O){$({ok:!1,error:"\u4F1A\u8BDD\u4E0D\u5B58\u5728"});return}const I=[];for(const U of O._viewers){const z=io.sockets.sockets.get(U);z&&I.push({socketId:U,userName:z.data.userName||"\u672A\u77E5",role:z.data.role||"viewer",isController:O.controlHolder===U})}$({ok:!0,viewers:I})}))}));const CONTROL_TIMEOUT=300*1e3;setInterval((()=>{for(const r of manager.listSessions()){r.controlHolder&&(!io.sockets.sockets.get(r.controlHolder)||r.lastInputTime&&Date.now()-r.lastInputTime>CONTROL_TIMEOUT)&&(r.releaseControl(),io.emit("control-changed",{sessionId:r.id,holder:null,holderName:null}));for(const t of r._viewers)io.sockets.sockets.has(t)||r.removeViewer(t)}}),60*1e3);function showStartupInfo(){const r=httpServer.address().port;PORT=r;const t=getTailscaleIP(),u=`http://${t}:${r}/admin`;console.log(`
479
479
  \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501`),console.log(" zihi \u2014 \u57FA\u4E8E Tailscale \u7684 Web \u7EC8\u7AEF"),console.log("\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501"),console.log(`
480
480
  \u5730\u5740: http://${t}:${r}`),console.log(` \u5BC6\u7801: ${PASSWORD} (\u7F16\u8F91 ~/.zihi/password \u53EF\u4FEE\u6539)`),console.log(`
481
481
  \u626B\u63CF\u4E8C\u7EF4\u7801\u5728\u624B\u673A\u4E0A\u6253\u5F00: