9remote 2.1.1 → 2.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.cjs CHANGED
@@ -9,7 +9,7 @@ Right-click to open / quit`}function Xi(){let{port:e,tunnelUrl:n}=Dt,r=process.p
9
9
  `}l||(t+=p)}else{var w=ro(ur).times(o.getModuleCount()+3);t+=w+`
10
10
  `,o.modules.forEach(function(T){t+=ur,t+=T.map(Pc).join(""),t+=ur+`
11
11
  `}),t+=w}r?r(t):console.log(t)},setErrorLevel:function(e){this.error=As[e]||this.error}}});var Pn=require("fs"),Yt=require("path"),go=require("url"),yo=A(require("os"),1);var _n=A(require("dns"),1),_e=A(require("path"),1),lo=A(require("os"),1),ne="9remote",mr=process.env.NREMOTE_REGISTRY||`https://registry.npmjs.org/${ne}/latest`,Pe=`${ne}@latest`,Fe=_e.default.join(lo.default.homedir(),".9remote"),re={ROOT:Fe,LOGS:_e.default.join(Fe,"logs"),STATE:_e.default.join(Fe,"state"),CONFIG:_e.default.join(Fe,"config"),BIN:_e.default.join(Fe,"bin"),PIDS:_e.default.join(Fe,"pids"),BUFFERS:_e.default.join(Fe,"buffers"),DAEMON:_e.default.join(Fe,"daemon")},uo=new _n.default.promises.Resolver;uo.setServers(["1.1.1.1","1.0.0.1","8.8.8.8"]);var dr=_n.default.lookup,Zs=/^(\d{1,3}\.){3}\d{1,3}$|^::1$|^[0-9a-f:]+$/i;_n.default.lookup=(e,n,r)=>{if(typeof n=="function"&&(r=n,n={}),e==="localhost"||Zs.test(e))return dr(e,n,r);uo.resolve4(e).then(o=>{if(!o?.length)return dr(e,n,r);n.all?r(null,o.map(t=>({address:t,family:4}))):r(null,o[0],4)}).catch(()=>dr(e,n,r))};var O=2208,co=5173;var Xc=[`http://localhost:${O}`,`http://127.0.0.1:${O}`,`http://localhost:${co}`,`http://127.0.0.1:${co}`],Vt={fileName:"agent.log",rotatedName:"agent.log.1",maxBytes:2*1024*1024,cleanupAfterDays:7},fo=60,$={STOPPED:0,PREPARING:1,CONNECTING:2,TUNNELING:3,VERIFYING:4,READY:5},po={showTunnelUrlInMenu:!1};var mo={CLAUDE_CODE_DISABLE_ALTERNATE_SCREEN:"1"};var ho={checkIntervalMs:3e4,requestTimeoutMs:5e3},le={server:{strategy:"exp",baseMs:1e3,maxMs:6e4},tunnelRestart:{strategy:"exp",baseMs:2e3,maxMs:3e5},tunnelSpawn:{strategy:"linear",baseMs:5e3,maxMs:6e4},internet:{strategy:"linear",baseMs:3e3,maxMs:6e4},sse:{strategy:"linear",baseMs:2e3,maxMs:2e3},urlSync:{strategy:"linear",baseMs:5e3,maxMs:6e4}},zs={Accept:"application/json, text/plain, */*","Accept-Language":"en-US,en;q=0.9","Cache-Control":"no-cache",Pragma:"no-cache","User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36"};function G(e,n={}){return fetch(e,{...n,headers:{...zs,...n.headers}})}var ea=(0,Yt.dirname)((0,go.fileURLToPath)(__importMetaUrl)),ta=[(0,Yt.join)(yo.default.homedir(),".9remote",".env"),(0,Yt.join)(ea,"..",".env")];function na(e){for(let n of e.split(`
12
- `)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*"?(.*?)"?$/);o&&!process.env[o[1]]&&(process.env[o[1]]=o[2])}}for(let e of ta)if((0,Pn.existsSync)(e))try{na((0,Pn.readFileSync)(e,"utf8"))}catch{}for(let[e,n]of Object.entries(mo))process.env[e]||(process.env[e]=n);var vr=A(require("path"),1),Ro=A(require("fs"),1),bo=require("url");var vo=A(wo(),1),gr=A(require("crypto"),1),{machineIdSync:ra}=vo.default;async function vt(e=null){let n=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=ra();return gr.default.createHash("sha256").update(r+n).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),gr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var So=A(require("crypto"),1),oa=process.env.API_KEY_SECRET||"9remote-api-key-secret";function ia(){let e="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let r=0;r<4;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}function sa(e,n){return So.default.createHmac("sha256",oa).update(e+n).digest("hex").slice(0,6)}function St(e){let n=e.slice(0,8),r=ia(),o=sa(n,r);return{key:`sk-${n}-${r}-${o}`,keyId:r}}function On(e){return!e||e.length<8?"sk-***":`${e.slice(0,3)}***${e.slice(-4)}`}var ae=A(require("fs"),1),Jt=A(require("path"),1);var rl=re.STATE,yr=Jt.default.join(re.STATE,"state.json"),wr=Jt.default.join(re.ROOT,"keys.json"),In=Jt.default.join(re.STATE,"cmd.json"),ol=Jt.default.join(re.STATE,"settings.json");function $n(){for(let e of[re.ROOT,re.STATE])ae.default.existsSync(e)||ae.default.mkdirSync(e,{recursive:!0})}function Cn(e){try{$n(),ae.default.writeFileSync(yr,JSON.stringify(e,null,2),{mode:384})}catch(n){console.error("Error saving state:",n)}}function Eo(){try{ae.default.existsSync(yr)&&ae.default.unlinkSync(yr)}catch{}}function Ln(){try{return $n(),ae.default.existsSync(wr)?JSON.parse(ae.default.readFileSync(wr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function Et(e){try{$n(),ae.default.writeFileSync(In,JSON.stringify({cmd:e,ts:Date.now()}))}catch{}}function To(){try{if(!ae.default.existsSync(In))return null;let e=JSON.parse(ae.default.readFileSync(In,"utf8"));return ae.default.unlinkSync(In),e.cmd}catch{return null}}function nt(e,n,r="Default"){try{$n();let o={machineId:e,key:n,name:r,createdAt:new Date().toISOString()};return ae.default.writeFileSync(wr,JSON.stringify(o,null,2),{mode:384}),o}catch(o){return console.error("Error saving key:",o),null}}function xo(){return process.env.CODESPACES==="true"}var aa=vr.default.dirname((0,bo.fileURLToPath)(__importMetaUrl));async function Ue(){let e=await vt();if(xo()&&process.env.NREMOTE_API_KEY)return nt(e,process.env.NREMOTE_API_KEY,"Codespace");let n=Ln();if(!n.key){let{key:r}=St(e);n=nt(e,r,"Default")}return n}function Se(){return"2.1.1"}var Ee=A(require("fs"),1),Er=A(require("path"),1);var Mn=re.LOGS,Xt=Er.default.join(Mn,Vt.fileName),Nn=Er.default.join(Mn,Vt.rotatedName),Ao=!1,ko=null;function ca(){Ee.default.existsSync(Mn)||Ee.default.mkdirSync(Mn,{recursive:!0})}function la(){try{if(Ee.default.statSync(Xt).size<Vt.maxBytes)return;try{Ee.default.rmSync(Nn,{force:!0})}catch{}Ee.default.renameSync(Xt,Nn)}catch{}}function ua(){try{let e=Ee.default.statSync(Nn);Date.now()-e.mtimeMs>Vt.cleanupAfterDays*864e5&&Ee.default.rmSync(Nn,{force:!0})}catch{}}function Tr(e){try{la(),Ee.default.appendFileSync(Xt,e+`
12
+ `)){let r=n.trim();if(!r||r.startsWith("#"))continue;let o=r.match(/^([A-Z_][A-Z0-9_]*)\s*=\s*"?(.*?)"?$/);o&&!process.env[o[1]]&&(process.env[o[1]]=o[2])}}for(let e of ta)if((0,Pn.existsSync)(e))try{na((0,Pn.readFileSync)(e,"utf8"))}catch{}for(let[e,n]of Object.entries(mo))process.env[e]||(process.env[e]=n);var vr=A(require("path"),1),Ro=A(require("fs"),1),bo=require("url");var vo=A(wo(),1),gr=A(require("crypto"),1),{machineIdSync:ra}=vo.default;async function vt(e=null){let n=e||process.env.MACHINE_ID_SALT||"9remote-salt";try{let r=ra();return gr.default.createHash("sha256").update(r+n).digest("hex").substring(0,16)}catch(r){return console.error("Error getting machine ID:",r),gr.default.randomUUID().replace(/-/g,"").substring(0,16)}}var So=A(require("crypto"),1),oa=process.env.API_KEY_SECRET||"9remote-api-key-secret";function ia(){let e="abcdefghijklmnopqrstuvwxyz0123456789",n="";for(let r=0;r<4;r++)n+=e.charAt(Math.floor(Math.random()*e.length));return n}function sa(e,n){return So.default.createHmac("sha256",oa).update(e+n).digest("hex").slice(0,6)}function St(e){let n=e.slice(0,8),r=ia(),o=sa(n,r);return{key:`sk-${n}-${r}-${o}`,keyId:r}}function On(e){return!e||e.length<8?"sk-***":`${e.slice(0,3)}***${e.slice(-4)}`}var ae=A(require("fs"),1),Jt=A(require("path"),1);var rl=re.STATE,yr=Jt.default.join(re.STATE,"state.json"),wr=Jt.default.join(re.ROOT,"keys.json"),In=Jt.default.join(re.STATE,"cmd.json"),ol=Jt.default.join(re.STATE,"settings.json");function $n(){for(let e of[re.ROOT,re.STATE])ae.default.existsSync(e)||ae.default.mkdirSync(e,{recursive:!0})}function Cn(e){try{$n(),ae.default.writeFileSync(yr,JSON.stringify(e,null,2),{mode:384})}catch(n){console.error("Error saving state:",n)}}function Eo(){try{ae.default.existsSync(yr)&&ae.default.unlinkSync(yr)}catch{}}function Ln(){try{return $n(),ae.default.existsSync(wr)?JSON.parse(ae.default.readFileSync(wr,"utf8")):{machineId:null,key:null,name:"Default",createdAt:null}}catch{return{machineId:null,key:null,name:"Default",createdAt:null}}}function Et(e){try{$n(),ae.default.writeFileSync(In,JSON.stringify({cmd:e,ts:Date.now()}))}catch{}}function To(){try{if(!ae.default.existsSync(In))return null;let e=JSON.parse(ae.default.readFileSync(In,"utf8"));return ae.default.unlinkSync(In),e.cmd}catch{return null}}function nt(e,n,r="Default"){try{$n();let o={machineId:e,key:n,name:r,createdAt:new Date().toISOString()};return ae.default.writeFileSync(wr,JSON.stringify(o,null,2),{mode:384}),o}catch(o){return console.error("Error saving key:",o),null}}function xo(){return process.env.CODESPACES==="true"}var aa=vr.default.dirname((0,bo.fileURLToPath)(__importMetaUrl));async function Ue(){let e=await vt();if(xo()&&process.env.NREMOTE_API_KEY)return nt(e,process.env.NREMOTE_API_KEY,"Codespace");let n=Ln();if(!n.key){let{key:r}=St(e);n=nt(e,r,"Default")}return n}function Se(){return"2.1.4"}var Ee=A(require("fs"),1),Er=A(require("path"),1);var Mn=re.LOGS,Xt=Er.default.join(Mn,Vt.fileName),Nn=Er.default.join(Mn,Vt.rotatedName),Ao=!1,ko=null;function ca(){Ee.default.existsSync(Mn)||Ee.default.mkdirSync(Mn,{recursive:!0})}function la(){try{if(Ee.default.statSync(Xt).size<Vt.maxBytes)return;try{Ee.default.rmSync(Nn,{force:!0})}catch{}Ee.default.renameSync(Xt,Nn)}catch{}}function ua(){try{let e=Ee.default.statSync(Nn);Date.now()-e.mtimeMs>Vt.cleanupAfterDays*864e5&&Ee.default.rmSync(Nn,{force:!0})}catch{}}function Tr(e){try{la(),Ee.default.appendFileSync(Xt,e+`
13
13
  `)}catch{}}function Sr(e){return e.map(n=>{if(n instanceof Error)return n.stack||n.message;if(typeof n=="object")try{return JSON.stringify(n)}catch{return String(n)}return String(n)}).join(" ")}function _o(){let e=new Date,n=(r,o=2)=>String(r).padStart(o,"0");return`${n(e.getHours())}:${n(e.getMinutes())}:${n(e.getSeconds())}.${n(e.getMilliseconds(),3)}`}var fa=/\x1b\[[0-9;]*m/g,pa=/https?:\/\/[^\s]+/g;function da(e){return String(e).replace(fa,"").replace(pa,"").replace(/\s+$/g,"")}function Qt(e,n,r){let o=da(r);if(!o)return;let t=n==="info"?e:`${e}:${n}`,i=`${_o()} [${t}] ${o}`;if(Tr(i),ko)try{ko(i)}catch{}}function ma(){process.on("uncaughtException",e=>Qt("crash","error",`uncaughtException: ${e?.stack||e?.message||e}`)),process.on("unhandledRejection",e=>{let n=e instanceof Error?e.stack||e.message:String(e);Qt("crash","error",`unhandledRejection: ${n}`)}),process.on("exit",e=>Tr(`${_o()} [exit] code=${e} pid=${process.pid}`))}function Po(){Ao||(Ao=!0,ca(),ua(),Tr(`
14
14
  === SESSION ${new Date().toISOString()} pid=${process.pid} argv=${process.argv.slice(2).join(" ")} ===`),ma())}function Oo(e=60){try{return Ee.default.readFileSync(Xt,"utf8").split(`
15
15
  `).filter(Boolean).slice(-e)}catch{return[]}}function q(e){return{info:(...n)=>Qt(e,"info",Sr(n)),warn:(...n)=>Qt(e,"warn",Sr(n)),error:(...n)=>Qt(e,"error",Sr(n))}}var Zt=Xt;var Io=(e=0)=>n=>`\x1B[${n+e}m`,$o=(e=0)=>n=>`\x1B[${38+e};5;${n}m`,Co=(e=0)=>(n,r,o)=>`\x1B[${38+e};2;${n};${r};${o}m`,M={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}},ml=Object.keys(M.modifier),ha=Object.keys(M.color),ga=Object.keys(M.bgColor),hl=[...ha,...ga];function ya(){let e=new Map;for(let[n,r]of Object.entries(M)){for(let[o,t]of Object.entries(r))M[o]={open:`\x1B[${t[0]}m`,close:`\x1B[${t[1]}m`},r[o]=M[o],e.set(t[0],t[1]);Object.defineProperty(M,n,{value:r,enumerable:!1})}return Object.defineProperty(M,"codes",{value:e,enumerable:!1}),M.color.close="\x1B[39m",M.bgColor.close="\x1B[49m",M.color.ansi=Io(),M.color.ansi256=$o(),M.color.ansi16m=Co(),M.bgColor.ansi=Io(10),M.bgColor.ansi256=$o(10),M.bgColor.ansi16m=Co(10),Object.defineProperties(M,{rgbToAnsi256:{value(n,r,o){return n===r&&r===o?n<8?16:n>248?231:Math.round((n-8)/247*24)+232:16+36*Math.round(n/255*5)+6*Math.round(r/255*5)+Math.round(o/255*5)},enumerable:!1},hexToRgb:{value(n){let r=/[a-f\d]{6}|[a-f\d]{3}/i.exec(n.toString(16));if(!r)return[0,0,0];let[o]=r;o.length===3&&(o=[...o].map(i=>i+i).join(""));let t=Number.parseInt(o,16);return[t>>16&255,t>>8&255,t&255]},enumerable:!1},hexToAnsi256:{value:n=>M.rgbToAnsi256(...M.hexToRgb(n)),enumerable:!1},ansi256ToAnsi:{value(n){if(n<8)return 30+n;if(n<16)return 90+(n-8);let r,o,t;if(n>=232)r=((n-232)*10+8)/255,o=r,t=r;else{n-=16;let a=n%36;r=Math.floor(n/36)/5,o=Math.floor(a/6)/5,t=a%6/5}let i=Math.max(r,o,t)*2;if(i===0)return 30;let s=30+(Math.round(t)<<2|Math.round(o)<<1|Math.round(r));return i===2&&(s+=60),s},enumerable:!1},rgbToAnsi:{value:(n,r,o)=>M.ansi256ToAnsi(M.rgbToAnsi256(n,r,o)),enumerable:!1},hexToAnsi:{value:n=>M.ansi256ToAnsi(M.hexToAnsi256(n)),enumerable:!1}}),M}var wa=ya(),he=wa;var Fn=A(require("node:process"),1),Mo=A(require("node:os"),1),xr=A(require("node:tty"),1);function ue(e,n=globalThis.Deno?globalThis.Deno.args:Fn.default.argv){let r=e.startsWith("-")?"":e.length===1?"-":"--",o=n.indexOf(r+e),t=n.indexOf("--");return o!==-1&&(t===-1||o<t)}var{env:N}=Fn.default,Dn;ue("no-color")||ue("no-colors")||ue("color=false")||ue("color=never")?Dn=0:(ue("color")||ue("colors")||ue("color=true")||ue("color=always"))&&(Dn=1);function va(){if("FORCE_COLOR"in N)return N.FORCE_COLOR==="true"?1:N.FORCE_COLOR==="false"?0:N.FORCE_COLOR.length===0?1:Math.min(Number.parseInt(N.FORCE_COLOR,10),3)}function Sa(e){return e===0?!1:{level:e,hasBasic:!0,has256:e>=2,has16m:e>=3}}function Ea(e,{streamIsTTY:n,sniffFlags:r=!0}={}){let o=va();o!==void 0&&(Dn=o);let t=r?Dn:o;if(t===0)return 0;if(r){if(ue("color=16m")||ue("color=full")||ue("color=truecolor"))return 3;if(ue("color=256"))return 2}if("TF_BUILD"in N&&"AGENT_NAME"in N)return 1;if(e&&!n&&t===void 0)return 0;let i=t||0;if(N.TERM==="dumb")return i;if(Fn.default.platform==="win32"){let s=Mo.default.release().split(".");return Number(s[0])>=10&&Number(s[2])>=10586?Number(s[2])>=14931?3:2:1}if("CI"in N)return["GITHUB_ACTIONS","GITEA_ACTIONS","CIRCLECI"].some(s=>s in N)?3:["TRAVIS","APPVEYOR","GITLAB_CI","BUILDKITE","DRONE"].some(s=>s in N)||N.CI_NAME==="codeship"?1:i;if("TEAMCITY_VERSION"in N)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(N.TEAMCITY_VERSION)?1:0;if(N.COLORTERM==="truecolor"||N.TERM==="xterm-kitty"||N.TERM==="xterm-ghostty"||N.TERM==="wezterm")return 3;if("TERM_PROGRAM"in N){let s=Number.parseInt((N.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(N.TERM_PROGRAM){case"iTerm.app":return s>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(N.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(N.TERM)||"COLORTERM"in N?1:i}function Lo(e,n={}){let r=Ea(e,{streamIsTTY:e&&e.isTTY,...n});return Sa(r)}var Ta={stdout:Lo({isTTY:xr.default.isatty(1)}),stderr:Lo({isTTY:xr.default.isatty(2)})},No=Ta;function Do(e,n,r){let o=e.indexOf(n);if(o===-1)return e;let t=n.length,i=0,s="";do s+=e.slice(i,o)+n+r,i=o+t,o=e.indexOf(n,i);while(o!==-1);return s+=e.slice(i),s}function Fo(e,n,r,o){let t=0,i="";do{let s=e[o-1]==="\r";i+=e.slice(t,s?o-1:o)+n+(s?`\r
@@ -71,7 +71,7 @@ StandardError=append:${Kn}
71
71
 
72
72
  [Install]
73
73
  WantedBy=default.target
74
- `}function Ua(e){try{return(0,it.execFileSync)("systemctl",["--user",...e],{stdio:"ignore"}),!0}catch{return!1}}function Ba(){return(0,C.existsSync)(J.linux)||(0,C.existsSync)(J.linuxSystemd)}async function Ha(){try{if(process.platform==="darwin")return Ca();if(process.platform==="win32")return await Na();if(process.platform==="linux")return Ba()}catch{}return!1}async function Xo(){try{if(process.platform==="win32"&&Ma(),!await Ha())return!1;if(process.platform==="darwin"){let e=$a(je(),st());return((0,C.existsSync)(J.darwin)?(0,C.readFileSync)(J.darwin,"utf8"):"")===e?!1:((0,C.writeFileSync)(J.darwin,e),!0)}if(process.platform==="win32"){let e=La();return((0,C.existsSync)(J.win)?(0,C.readFileSync)(J.win,"utf8"):"")===e?!1:((0,C.writeFileSync)(J.win,e),!0)}if(process.platform==="linux"){if((0,C.existsSync)(J.linuxSystemd)){let e=Fa();return(0,C.readFileSync)(J.linuxSystemd,"utf8")===e?!1:((0,C.writeFileSync)(J.linuxSystemd,e),Ua(["daemon-reload"]),!0)}if((0,C.existsSync)(J.linux)){let e=Da();return(0,C.readFileSync)(J.linux,"utf8")===e?!1:((0,C.writeFileSync)(J.linux,e),!0)}}}catch{}return!1}var D="https://9remote.cc",Zo=3e4,zo=500,Ir=300,ge={cmdMs:1e3,pendingApprovalMs:3e3,statsMs:5e3,serverReadyIntervalMs:200,serverReadyTimeoutMs:5e3,bgServerReadyTimeoutMs:15e3,bgServerReadyIntervalMs:300},Ke={intervalMs:2e3,timeoutMs:18e4,fetchTimeoutMs:5e3,dnsTimeoutMs:2e3,maxLogEntries:80,postReadyHoldMs:2e3},oe={killCloudflaredMs:500,killCloudflaredTuiMs:300,serverBootMs:2e3,trayReadyMs:1e3,postReadyHoldMs:2e3,bgSpawnFlushMs:400},Oe={maxLogLines:200,headerWidth:44},bt={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},ei=5e3,ti=2,ni=3e4,fe={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};var ja=Ie.default.dirname((0,ri.fileURLToPath)(__importMetaUrl)),oi=3e3;var Yn=2208,$r=Ie.default.join(At.default.homedir(),".9remote","cloudflared.pid");function Ka(){try{Wo()}catch{}try{if((0,Q.existsSync)($r)){let e=parseInt((0,Q.readFileSync)($r,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,Q.unlinkSync)($r)}catch{}}}catch{}try{process.platform==="win32"?(0,nn.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Yn}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,nn.execSync)(`lsof -ti:${Yn} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function ii(){return"2.1.1"}function si(e,n){let r=e.split(".").map(Number),o=n.split(".").map(Number);for(let t=0;t<3;t++){if(o[t]>r[t])return!0;if(o[t]<r[t])return!1}return!1}function Ga(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":(0,Q.existsSync)("/.dockerenv")?"Docker":null}function qn(){Ka()}async function ai(){try{let e=ii();if(!e)return null;let n=await G(mr,{signal:AbortSignal.timeout(oi)});if(!n.ok)return null;let{version:r}=await n.json();return r&&si(e,r)?{current:e,latest:r}:null}catch{return null}}var Vn=Ie.default.join(re.STATE,bt.lockFile);function Wa(){try{if((0,Q.existsSync)(Vn)){let{pid:e,ts:n}=JSON.parse((0,Q.readFileSync)(Vn,"utf8")),r=Date.now()-n<bt.lockTtlMs,o=!1;try{process.kill(e,0),o=!0}catch{}if(r&&o)return!1}}catch{}try{(0,Q.writeFileSync)(Vn,JSON.stringify({pid:process.pid,ts:Date.now()}))}catch{}return!0}async function Va(){try{let e=await G(mr,{signal:AbortSignal.timeout(oi)});if(!e.ok)return null;let{version:n}=await e.json();return n||null}catch{return null}}function Ya(){try{if(process.env.NREMOTE_REGISTRY)return`--registry ${new URL(process.env.NREMOTE_REGISTRY).origin}`}catch{}return""}function qa({currentVersion:e,latest:n,agentPid:r}){let o=Vo(),t=Ya(),i=je(),s=st(),a=Vn,c=`--prefer-online --no-audit --no-fund ${t}`.trim();if(process.platform==="win32"){let f=Ie.default.join(At.default.tmpdir(),`${ne}-restart.vbs`),p=`@echo off
74
+ `}function Ua(e){try{return(0,it.execFileSync)("systemctl",["--user",...e],{stdio:"ignore"}),!0}catch{return!1}}function Ba(){return(0,C.existsSync)(J.linux)||(0,C.existsSync)(J.linuxSystemd)}async function Ha(){try{if(process.platform==="darwin")return Ca();if(process.platform==="win32")return await Na();if(process.platform==="linux")return Ba()}catch{}return!1}async function Xo(){try{if(process.platform==="win32"&&Ma(),!await Ha())return!1;if(process.platform==="darwin"){let e=$a(je(),st());return((0,C.existsSync)(J.darwin)?(0,C.readFileSync)(J.darwin,"utf8"):"")===e?!1:((0,C.writeFileSync)(J.darwin,e),!0)}if(process.platform==="win32"){let e=La();return((0,C.existsSync)(J.win)?(0,C.readFileSync)(J.win,"utf8"):"")===e?!1:((0,C.writeFileSync)(J.win,e),!0)}if(process.platform==="linux"){if((0,C.existsSync)(J.linuxSystemd)){let e=Fa();return(0,C.readFileSync)(J.linuxSystemd,"utf8")===e?!1:((0,C.writeFileSync)(J.linuxSystemd,e),Ua(["daemon-reload"]),!0)}if((0,C.existsSync)(J.linux)){let e=Da();return(0,C.readFileSync)(J.linux,"utf8")===e?!1:((0,C.writeFileSync)(J.linux,e),!0)}}}catch{}return!1}var D="https://9remote.cc",Zo=3e4,zo=500,Ir=300,ge={cmdMs:1e3,pendingApprovalMs:3e3,statsMs:5e3,serverReadyIntervalMs:200,serverReadyTimeoutMs:5e3,bgServerReadyTimeoutMs:15e3,bgServerReadyIntervalMs:300},Ke={intervalMs:2e3,timeoutMs:18e4,fetchTimeoutMs:5e3,dnsTimeoutMs:2e3,maxLogEntries:80,postReadyHoldMs:2e3},oe={killCloudflaredMs:500,killCloudflaredTuiMs:300,serverBootMs:2e3,trayReadyMs:1e3,postReadyHoldMs:2e3,bgSpawnFlushMs:400},Oe={maxLogLines:200,headerWidth:44},bt={checkIntervalMs:36e5,connectCheckDebounceMs:9e5,maxRetry:3,retryDelayMs:3e3,verifyTimeoutMs:15e3,lockTtlMs:3e5,lockFile:"update.lock"},ei=5e3,ti=2,ni=3e4,fe={orange:m.rgb(230,138,110),orangeDim:m.rgb(200,120,95)};var ja=Ie.default.dirname((0,ri.fileURLToPath)(__importMetaUrl)),oi=3e3;var Yn=2208,$r=Ie.default.join(At.default.homedir(),".9remote","cloudflared.pid");function Ka(){try{Wo()}catch{}try{if((0,Q.existsSync)($r)){let e=parseInt((0,Q.readFileSync)($r,"utf8"));if(Number.isFinite(e))try{process.kill(e)}catch{}try{(0,Q.unlinkSync)($r)}catch{}}}catch{}try{process.platform==="win32"?(0,nn.execSync)(`for /f "tokens=5" %a in ('netstat -aon ^| findstr :${Yn}') do taskkill /F /PID %a`,{stdio:"ignore",windowsHide:!0}):(0,nn.execSync)(`lsof -ti:${Yn} | xargs kill -9 2>/dev/null || true`,{stdio:"ignore"})}catch{}if(process.platform==="win32"){let e=Date.now()+1500;for(;Date.now()<e;);}}function ii(){return"2.1.4"}function si(e,n){let r=e.split(".").map(Number),o=n.split(".").map(Number);for(let t=0;t<3;t++){if(o[t]>r[t])return!0;if(o[t]<r[t])return!1}return!1}function Ga(){return process.env.CODESPACES==="true"||process.env.GITHUB_CODESPACES_PORT_FORWARDING_DOMAIN?"GitHub Codespaces":(0,Q.existsSync)("/.dockerenv")?"Docker":null}function qn(){Ka()}async function ai(){try{let e=ii();if(!e)return null;let n=await G(mr,{signal:AbortSignal.timeout(oi)});if(!n.ok)return null;let{version:r}=await n.json();return r&&si(e,r)?{current:e,latest:r}:null}catch{return null}}var Vn=Ie.default.join(re.STATE,bt.lockFile);function Wa(){try{if((0,Q.existsSync)(Vn)){let{pid:e,ts:n}=JSON.parse((0,Q.readFileSync)(Vn,"utf8")),r=Date.now()-n<bt.lockTtlMs,o=!1;try{process.kill(e,0),o=!0}catch{}if(r&&o)return!1}}catch{}try{(0,Q.writeFileSync)(Vn,JSON.stringify({pid:process.pid,ts:Date.now()}))}catch{}return!0}async function Va(){try{let e=await G(mr,{signal:AbortSignal.timeout(oi)});if(!e.ok)return null;let{version:n}=await e.json();return n||null}catch{return null}}function Ya(){try{if(process.env.NREMOTE_REGISTRY)return`--registry ${new URL(process.env.NREMOTE_REGISTRY).origin}`}catch{}return""}function qa({currentVersion:e,latest:n,agentPid:r}){let o=Vo(),t=Ya(),i=je(),s=st(),a=Vn,c=`--prefer-online --no-audit --no-fund ${t}`.trim();if(process.platform==="win32"){let f=Ie.default.join(At.default.tmpdir(),`${ne}-restart.vbs`),p=`@echo off
75
75
  setlocal EnableDelayedExpansion
76
76
  set "NODE=${i}"
77
77
  set "CLI=${s}"
@@ -1,9 +1,9 @@
1
1
  #!/usr/bin/env node
2
2
  const __importMetaUrl = require('url').pathToFileURL(__filename).href;
3
- var Z=Object.create;var k=Object.defineProperty;var G=Object.getOwnPropertyDescriptor;var U=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var W=(e,s,t,n)=>{if(s&&typeof s=="object"||typeof s=="function")for(let r of U(s))!V.call(e,r)&&r!==t&&k(e,r,{get:()=>s[r],enumerable:!(n=G(s,r))||n.enumerable});return e};var O=(e,s,t)=>(t=e!=null?Z(J(e)):{},W(s||!e||!e.__esModule?k(t,"default",{value:e,enumerable:!0}):t,e));var F=O(require("net"),1),a=O(require("fs"),1),y=O(require("path"),1),_=O(require("os"),1),j=O(require("node-pty"),1);var L={win32:[{id:"cmd",label:"Command Prompt",path:"cmd.exe",args:[]},{id:"powershell",label:"PowerShell",path:"powershell.exe",args:["-NoLogo"]},{id:"pwsh",label:"PowerShell Core",path:"pwsh.exe",args:["-NoLogo"]}],unix:[{id:"bash",label:"Bash",path:"/bin/bash",args:["-l"]},{id:"zsh",label:"Zsh",path:"/bin/zsh",args:["-l"]},{id:"sh",label:"Sh",path:"/bin/sh",args:["-l"]}]};function z(e){if(process.platform==="win32"){let n=e?L.win32.find(o=>o.id===e):null;if(n)return n;let r=process.env.COMSPEC;return r?{id:"cmd",label:"Command Prompt",path:r,args:[]}:L.win32[0]}let s=process.env.SHELL||"/bin/bash",t=s.split("/").pop();return{id:t,label:t,path:s,args:["-l"]}}var D=y.default.join(_.default.homedir(),".9remote"),x=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":y.default.join(D,"pty-daemon.sock"),C=y.default.join(D,"pids","ptyDaemon.pid"),h=new Map,v=new Set,B=2*1024*1024,X=128*1024,Y=128*1024,Q=5*1024*1024;function H(e,s){if(!e?.length||s<=0)return Buffer.alloc(0);let t=s,n=[];for(let r=e.length-1;r>=0&&t>0;r--){let o=e[r];o.length<=t?(n.push(o),t-=o.length):(n.push(o.subarray(o.length-t)),t=0)}return n.reverse(),Buffer.concat(n)}function P(e){return e?.length?e.reduce((s,t)=>s+t.length,0):0}function ee(e,s,t){if(!e?.length||t<=0)return{prefix:Buffer.alloc(0),trimmed:0};let n=P(e),r=n-Math.max(0,Math.min(s,n)),o=r-t;if(o<0&&(t+=o,o=0),t<=0)return{prefix:Buffer.alloc(0),trimmed:0};let i=0,l=[];for(let b=0;b<e.length&&t>0;b++){let f=e[b],m=i+f.length;if(m<=o){i=m;continue}if(i>=r)break;let w=Math.max(0,o-i),u=Math.min(t,f.length-w);l.push(f.subarray(w,w+u)),t-=u,i=m}let S=Buffer.concat(l),p=0,c=S.indexOf(10);return c>0&&c<S.length-1&&(p=c+1,S=S.subarray(p)),{prefix:S,trimmed:p}}var te=["1049","1047","1000","1002","1003","1006","1015","1005"],se=/\x1b\[\?([0-9;]+)([hl])/g;function re(e,s){typeof s!="string"&&(s=String(s));for(let t of s.matchAll(se)){let n=t[2]==="h";for(let r of t[1].split(";"))e[n?"add":"delete"](`?${r}`)}}function ne(e){let s=te.filter(t=>e.has(`?${t}`));return s.length?`\x1B[?${s.join(";")}h`:""}var N=y.default.join(D,"logs"),R=y.default.join(N,"daemon.log");try{a.default.existsSync(N)||a.default.mkdirSync(N,{recursive:!0})}catch{}function oe(){try{if(a.default.existsSync(R)&&a.default.statSync(R).size>Q){let t=a.default.readFileSync(R,"utf8").slice(-1024*1024);a.default.writeFileSync(R,t)}}catch{}}function E(e,s=null){oe();let n=`[${new Date().toISOString()}] ERROR: ${e}`;s&&(n+=` - ${s.message||s}`),n+=`
4
- `;try{a.default.appendFileSync(R,n)}catch{}console.error(n.trim())}function ie(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||_.default.homedir()}function ce(e){let s={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor",LANG:process.env.LANG||"en_US.UTF-8"};delete s.PORT;let t=e.includes("zsh"),n=e.includes("bash"),r=null;if(t){r=a.default.mkdtempSync(y.default.join(_.default.tmpdir(),"9remote-zsh-"));let o=y.default.join(r,".zshrc"),i=s.HOME?y.default.join(s.HOME,".zshrc"):null,l='precmd() { print -Pn "\\e]7;file://%m${PWD}\\e\\\\" }\n';i&&a.default.existsSync(i)&&(l+=`[ -f "${i}" ] && source "${i}"
3
+ var G=Object.create;var k=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var J=Object.getPrototypeOf,V=Object.prototype.hasOwnProperty;var K=(e,s,t,n)=>{if(s&&typeof s=="object"||typeof s=="function")for(let r of W(s))!V.call(e,r)&&r!==t&&k(e,r,{get:()=>s[r],enumerable:!(n=U(s,r))||n.enumerable});return e};var O=(e,s,t)=>(t=e!=null?G(J(e)):{},K(s||!e||!e.__esModule?k(t,"default",{value:e,enumerable:!0}):t,e));var j=O(require("net"),1),a=O(require("fs"),1),y=O(require("path"),1),C=O(require("os"),1),H=O(require("node-pty"),1);var z="37",L={win32:[{id:"cmd",label:"Command Prompt",path:"cmd.exe",args:[]},{id:"powershell",label:"PowerShell",path:"powershell.exe",args:["-NoLogo"]},{id:"pwsh",label:"PowerShell Core",path:"pwsh.exe",args:["-NoLogo"]}],unix:[{id:"bash",label:"Bash",path:"/bin/bash",args:["-l"]},{id:"zsh",label:"Zsh",path:"/bin/zsh",args:["-l"]},{id:"sh",label:"Sh",path:"/bin/sh",args:["-l"]}]};function B(e){if(process.platform==="win32"){let n=e?L.win32.find(o=>o.id===e):null;if(n)return n;let r=process.env.COMSPEC;return r?{id:"cmd",label:"Command Prompt",path:r,args:[]}:L.win32[0]}let s=process.env.SHELL||"/bin/bash",t=s.split("/").pop();return{id:t,label:t,path:s,args:["-l"]}}var v=y.default.join(C.default.homedir(),".9remote"),I=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":y.default.join(v,"pty-daemon.sock"),_=y.default.join(v,"pids","ptyDaemon.pid"),h=new Map,D=new Set,F=2*1024*1024,X=128*1024,Y=128*1024,Q=5*1024*1024;function Z(e,s){if(!e?.length||s<=0)return Buffer.alloc(0);let t=s,n=[];for(let r=e.length-1;r>=0&&t>0;r--){let o=e[r];o.length<=t?(n.push(o),t-=o.length):(n.push(o.subarray(o.length-t)),t=0)}return n.reverse(),Buffer.concat(n)}function P(e){return e?.length?e.reduce((s,t)=>s+t.length,0):0}function ee(e,s,t){if(!e?.length||t<=0)return{prefix:Buffer.alloc(0),trimmed:0};let n=P(e),r=n-Math.max(0,Math.min(s,n)),o=r-t;if(o<0&&(t+=o,o=0),t<=0)return{prefix:Buffer.alloc(0),trimmed:0};let i=0,l=[];for(let b=0;b<e.length&&t>0;b++){let f=e[b],m=i+f.length;if(m<=o){i=m;continue}if(i>=r)break;let E=Math.max(0,o-i),u=Math.min(t,f.length-E);l.push(f.subarray(E,E+u)),t-=u,i=m}let S=Buffer.concat(l),p=0,c=S.indexOf(10);return c>0&&c<S.length-1&&(p=c+1,S=S.subarray(p)),{prefix:S,trimmed:p}}var te=["1049","1047","1000","1002","1003","1006","1015","1005"],se=/\x1b\[\?([0-9;]+)([hl])/g;function re(e,s){typeof s!="string"&&(s=String(s));for(let t of s.matchAll(se)){let n=t[2]==="h";for(let r of t[1].split(";"))e[n?"add":"delete"](`?${r}`)}}function ne(e){let s=te.filter(t=>e.has(`?${t}`));return s.length?`\x1B[?${s.join(";")}h`:""}var $=y.default.join(v,"logs"),R=y.default.join($,"daemon.log");try{a.default.existsSync($)||a.default.mkdirSync($,{recursive:!0})}catch{}function oe(){try{if(a.default.existsSync(R)&&a.default.statSync(R).size>Q){let t=a.default.readFileSync(R,"utf8").slice(-1024*1024);a.default.writeFileSync(R,t)}}catch{}}function w(e,s=null){oe();let n=`[${new Date().toISOString()}] ERROR: ${e}`;s&&(n+=` - ${s.message||s}`),n+=`
4
+ `;try{a.default.appendFileSync(R,n)}catch{}console.error(n.trim())}function ie(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||C.default.homedir()}function ce(e){let s={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor",LANG:process.env.LANG||"en_US.UTF-8"};delete s.PORT;let t=e.includes("zsh"),n=e.includes("bash"),r=null;if(t){r=a.default.mkdtempSync(y.default.join(C.default.tmpdir(),"9remote-zsh-"));let o=y.default.join(r,".zshrc"),i=s.HOME?y.default.join(s.HOME,".zshrc"):null,l='precmd() { print -Pn "\\e]7;file://%m${PWD}\\e\\\\" }\n';i&&a.default.existsSync(i)&&(l+=`[ -f "${i}" ] && source "${i}"
5
5
  `),a.default.writeFileSync(o,l),s.ZDOTDIR=r}else if(n){let o=s.PROMPT_COMMAND||"";s.PROMPT_COMMAND=`printf "\\e]7;file://%s\\a" "\${HOSTNAME}\${PWD}"${o?`; ${o}`:""}`}return{env:s,zdotDir:r}}function M(e){let s=JSON.stringify(e)+`
6
- `;for(let t of v)try{t.write(s)}catch{}}function d(e,s){try{e.write(JSON.stringify(s)+`
7
- `)}catch{}}function le(e,s,t=80,n=24,r=null,o=null){if(h.has(e))return{success:!1,error:"Session already exists"};let i=z(r);(!o||!a.default.existsSync(o))&&(o=ie());try{let{env:l,zdotDir:S}=ce(i.path);l.NINE_REMOTE_SESSION_ID=e;let p=j.default.spawn(i.path,i.args,{name:"xterm-256color",cols:t,rows:n,cwd:o,env:l,useConpty:process.platform==="win32"});if(i.id==="powershell"||i.id==="pwsh"){let f=`function prompt { $p = $PWD.Path -replace '\\\\','/'; "$([char]27)]7;file://$([System.Net.Dns]::GetHostName())$p$([char]27)\\PS $($PWD.Path)> " }\r
8
- `;setTimeout(()=>{try{p.write(f)}catch{}},500)}let c={pty:p,buffer:[],modes:new Set,name:s,createdAt:Date.now(),cwd:o,shellId:i.id,shellLabel:i.label,zdotDir:S,pending:null,flushScheduled:!1},b=()=>{c.flushScheduled=!1;let f=c.pending;f&&(c.pending=null,M({type:"output",sessionId:e,enc:"b64",data:Buffer.from(f).toString("base64")}))};return p.onData(f=>{c.buffer.push(Buffer.from(f,"utf-8")),re(c.modes,f);let m=f.match(/\x1b\]7;file:\/\/[^/]*([^\x07\x1b]*)/);if(m){let u;try{u=decodeURIComponent(m[1])}catch{u=m[1]}u&&u!==c.cwd&&(c.cwd=u,M({type:"cwdChange",sessionId:e,cwd:u}))}P(c.buffer)>B&&(c.buffer=[H(c.buffer,B)]),c.pending=c.pending===null?f:c.pending+f,c.flushScheduled||(c.flushScheduled=!0,setImmediate(b))}),p.onExit(()=>{h.delete(e),c.zdotDir&&a.default.rm(c.zdotDir,{recursive:!0,force:!0},()=>{}),M({type:"sessionClosed",sessionId:e})}),h.set(e,c),{success:!0,sessionId:e,cwd:o,shellId:i.id,shellLabel:i.label}}catch(l){return E("Failed to create session",l),{success:!1,error:l.message}}}function ae(e,s){let{type:t,sessionId:n,...r}=s;switch(t){case"ping":d(e,{type:"pong",version:"37",requestId:r.requestId});break;case"listSessions":let o=Array.from(h.entries()).map(([u,g])=>({id:u,name:g.name,createdAt:g.createdAt,shellId:g.shellId,shellLabel:g.shellLabel,cwd:g.cwd}));d(e,{type:"sessionList",sessions:o,requestId:r.requestId});break;case"createSession":let i=le(n||`session-${Date.now()}`,r.name,r.cols,r.rows,r.shellId,r.cwd);d(e,{type:"createResult",...i,requestId:r.requestId});break;case"joinSession":let l=h.get(n);if(!l){d(e,{type:"joinResult",success:!1,error:"Session not found",requestId:r.requestId});return}let S=ne(l.modes);S&&d(e,{type:"output",sessionId:n,enc:"b64",data:Buffer.from(S).toString("base64")});let p=H(l.buffer,X);p&&p.length&&d(e,{type:"output",sessionId:n,enc:"b64",data:p.toString("base64")});let c=P(l.buffer);d(e,{type:"joinResult",success:!0,name:l.name,cwd:l.cwd,shellId:l.shellId,shellLabel:l.shellLabel,total:c,replaySize:p?p.length:0,requestId:r.requestId});break;case"requestHistory":{let u=h.get(n);if(!u){d(e,{type:"historyResult",success:!1,error:"Session not found",requestId:r.requestId});return}let g=P(u.buffer),T=Math.max(0,Math.min(r.have||0,g)),$=g-T,q=Math.min(Y,$),{prefix:I,trimmed:A}=q>0?ee(u.buffer,T,q):{prefix:Buffer.alloc(0),trimmed:0};d(e,{type:"historyResult",success:!0,sessionId:n,enc:"b64",prefix:I&&I.length?I.toString("base64"):"",prefixLen:I?I.length:0,total:g,remaining:Math.max(0,$-I.length-A)+A,requestId:r.requestId});break}case"input":let b=h.get(n);b?.pty&&b.pty.write(r.data);break;case"resize":let f=h.get(n);if(f?.pty)try{f.pty.resize(r.cols,r.rows)}catch{}break;case"deleteSession":let m=h.get(n);m?(m.pty&&m.pty.kill(),h.delete(n),M({type:"sessionClosed",sessionId:n}),d(e,{type:"deleteResult",success:!0,requestId:r.requestId})):d(e,{type:"deleteResult",success:!1,error:"Session not found",requestId:r.requestId});break;case"getCwd":let w=h.get(n);d(e,{type:"cwdResult",cwd:w?.cwd||null,requestId:r.requestId});break;default:E(`Unknown message type: ${t}`)}}function fe(){if(!a.default.existsSync(D))try{a.default.mkdirSync(D,{recursive:!0})}catch(t){E("Failed to create socket directory",t),process.exit(1)}if(process.platform!=="win32"&&a.default.existsSync(x))try{a.default.unlinkSync(x)}catch(t){E("Failed to remove stale socket",t),process.exit(1)}let e=F.default.createServer(t=>{v.add(t);let n="";t.on("data",r=>{n+=r.toString();let o=n.split(`
9
- `);n=o.pop()||"";for(let i of o)if(i.trim())try{let l=JSON.parse(i);ae(t,l)}catch{E("Invalid message",i)}}),t.on("close",()=>{v.delete(t)}),t.on("error",r=>{E("Client error",r),v.delete(t)})});e.on("error",t=>{E("Server error",t),t.code==="EADDRINUSE"&&E("Socket already in use, exiting"),process.exit(1)}),e.listen(x,()=>{if(process.platform!=="win32")try{a.default.chmodSync(x,384)}catch{}});try{a.default.mkdirSync(y.default.dirname(C),{recursive:!0}),a.default.writeFileSync(C,String(process.pid),{mode:384})}catch{}let s=()=>{for(let[,t]of h)if(t.pty)try{t.pty.kill()}catch{}try{e.close()}catch{}if(process.platform!=="win32"&&a.default.existsSync(x))try{a.default.unlinkSync(x)}catch{}try{a.default.unlinkSync(C)}catch{}process.exit(0)};process.on("SIGTERM",s),process.on("SIGINT",s)}fe();
6
+ `;for(let t of D)try{t.write(s)}catch{}}function d(e,s){try{e.write(JSON.stringify(s)+`
7
+ `)}catch{}}function le(e,s,t=80,n=24,r=null,o=null){if(h.has(e))return{success:!1,error:"Session already exists"};let i=B(r);(!o||!a.default.existsSync(o))&&(o=ie());try{let{env:l,zdotDir:S}=ce(i.path);l.NINE_REMOTE_SESSION_ID=e;let p=H.default.spawn(i.path,i.args,{name:"xterm-256color",cols:t,rows:n,cwd:o,env:l,useConpty:process.platform==="win32"});if(i.id==="powershell"||i.id==="pwsh"){let f=`function prompt { $p = $PWD.Path -replace '\\\\','/'; "$([char]27)]7;file://$([System.Net.Dns]::GetHostName())$p$([char]27)\\PS $($PWD.Path)> " }\r
8
+ `;setTimeout(()=>{try{p.write(f)}catch{}},500)}let c={pty:p,buffer:[],modes:new Set,name:s,createdAt:Date.now(),cwd:o,shellId:i.id,shellLabel:i.label,zdotDir:S,pending:null,flushScheduled:!1},b=()=>{c.flushScheduled=!1;let f=c.pending;f&&(c.pending=null,M({type:"output",sessionId:e,enc:"b64",data:Buffer.from(f).toString("base64")}))};return p.onData(f=>{c.buffer.push(Buffer.from(f,"utf-8")),re(c.modes,f);let m=f.match(/\x1b\]7;file:\/\/[^/]*([^\x07\x1b]*)/);if(m){let u;try{u=decodeURIComponent(m[1])}catch{u=m[1]}u&&u!==c.cwd&&(c.cwd=u,M({type:"cwdChange",sessionId:e,cwd:u}))}P(c.buffer)>F&&(c.buffer=[Z(c.buffer,F)]),c.pending=c.pending===null?f:c.pending+f,c.flushScheduled||(c.flushScheduled=!0,setImmediate(b))}),p.onExit(()=>{h.delete(e),c.zdotDir&&a.default.rm(c.zdotDir,{recursive:!0,force:!0},()=>{}),M({type:"sessionClosed",sessionId:e})}),h.set(e,c),{success:!0,sessionId:e,cwd:o,shellId:i.id,shellLabel:i.label}}catch(l){return w("Failed to create session",l),{success:!1,error:l.message}}}function ae(e,s){let{type:t,sessionId:n,...r}=s;switch(t){case"ping":d(e,{type:"pong",version:z,requestId:r.requestId});break;case"listSessions":let o=Array.from(h.entries()).map(([u,g])=>({id:u,name:g.name,createdAt:g.createdAt,shellId:g.shellId,shellLabel:g.shellLabel,cwd:g.cwd}));d(e,{type:"sessionList",sessions:o,requestId:r.requestId});break;case"createSession":let i=le(n||`session-${Date.now()}`,r.name,r.cols,r.rows,r.shellId,r.cwd);d(e,{type:"createResult",...i,requestId:r.requestId});break;case"joinSession":let l=h.get(n);if(!l){d(e,{type:"joinResult",success:!1,error:"Session not found",requestId:r.requestId});return}let S=ne(l.modes);S&&d(e,{type:"output",sessionId:n,enc:"b64",data:Buffer.from(S).toString("base64")});let p=Z(l.buffer,X);p&&p.length&&d(e,{type:"output",sessionId:n,enc:"b64",data:p.toString("base64")});let c=P(l.buffer);d(e,{type:"joinResult",success:!0,name:l.name,cwd:l.cwd,shellId:l.shellId,shellLabel:l.shellLabel,total:c,replaySize:p?p.length:0,requestId:r.requestId});break;case"requestHistory":{let u=h.get(n);if(!u){d(e,{type:"historyResult",success:!1,error:"Session not found",requestId:r.requestId});return}let g=P(u.buffer),N=Math.max(0,Math.min(r.have||0,g)),T=g-N,q=Math.min(Y,T),{prefix:x,trimmed:A}=q>0?ee(u.buffer,N,q):{prefix:Buffer.alloc(0),trimmed:0};d(e,{type:"historyResult",success:!0,sessionId:n,enc:"b64",prefix:x&&x.length?x.toString("base64"):"",prefixLen:x?x.length:0,total:g,remaining:Math.max(0,T-x.length-A)+A,requestId:r.requestId});break}case"input":let b=h.get(n);b?.pty&&b.pty.write(r.data);break;case"resize":let f=h.get(n);if(f?.pty)try{f.pty.resize(r.cols,r.rows)}catch{}break;case"deleteSession":let m=h.get(n);m?(m.pty&&m.pty.kill(),h.delete(n),M({type:"sessionClosed",sessionId:n}),d(e,{type:"deleteResult",success:!0,requestId:r.requestId})):d(e,{type:"deleteResult",success:!1,error:"Session not found",requestId:r.requestId});break;case"getCwd":let E=h.get(n);d(e,{type:"cwdResult",cwd:E?.cwd||null,requestId:r.requestId});break;default:w(`Unknown message type: ${t}`)}}function fe(){if(!a.default.existsSync(v))try{a.default.mkdirSync(v,{recursive:!0})}catch(t){w("Failed to create socket directory",t),process.exit(1)}if(process.platform!=="win32"&&a.default.existsSync(I))try{a.default.unlinkSync(I)}catch(t){w("Failed to remove stale socket",t),process.exit(1)}let e=j.default.createServer(t=>{D.add(t);let n="";t.on("data",r=>{n+=r.toString();let o=n.split(`
9
+ `);n=o.pop()||"";for(let i of o)if(i.trim())try{let l=JSON.parse(i);ae(t,l)}catch{w("Invalid message",i)}}),t.on("close",()=>{D.delete(t)}),t.on("error",r=>{w("Client error",r),D.delete(t)})});e.on("error",t=>{w("Server error",t),t.code==="EADDRINUSE"&&w("Socket already in use, exiting"),process.exit(1)}),e.listen(I,()=>{if(process.platform!=="win32")try{a.default.chmodSync(I,384)}catch{}});try{a.default.mkdirSync(y.default.dirname(_),{recursive:!0}),a.default.writeFileSync(_,String(process.pid),{mode:384})}catch{}let s=()=>{for(let[,t]of h)if(t.pty)try{t.pty.kill()}catch{}try{e.close()}catch{}if(process.platform!=="win32"&&a.default.existsSync(I))try{a.default.unlinkSync(I)}catch{}try{a.default.unlinkSync(_)}catch{}process.exit(0)};process.on("SIGTERM",s),process.on("SIGINT",s)}fe();