9remote 0.1.34 → 0.1.38

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.
@@ -1,11 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  const __importMetaUrl = require('url').pathToFileURL(__filename).href;
3
- var A=Object.create;var k=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var q=Object.getOwnPropertyNames;var P=Object.getPrototypeOf,x=Object.prototype.hasOwnProperty;var _=(e,s,o,r)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of q(s))!x.call(e,t)&&t!==o&&k(e,t,{get:()=>s[t],enumerable:!(r=T(s,t))||r.enumerable});return e};var h=(e,s,o)=>(o=e!=null?A(P(e)):{},_(s||!e||!e.__esModule?k(o,"default",{value:e,enumerable:!0}):o,e));var M=h(require("net"),1),i=h(require("fs"),1),I=h(require("path"),1),b=h(require("os"),1),v=h(require("node-pty"),1),O=I.default.join(b.default.homedir(),".9remote"),g=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":I.default.join(O,"pty-daemon.sock"),c=new Map,R=new Set,L=50*1024,F=5*1024*1024,E=I.default.join(O,"daemon.log");function $(){try{if(i.default.existsSync(E)&&i.default.statSync(E).size>F){let o=i.default.readFileSync(E,"utf8").slice(-1024*1024);i.default.writeFileSync(E,o)}}catch{}}function l(e,s=null){$();let r=`[${new Date().toISOString()}] ERROR: ${e}`;s&&(r+=` - ${s.message||s}`),r+=`
4
- `;try{i.default.appendFileSync(E,r)}catch{}console.error(r.trim())}function C(){return process.platform==="win32"?process.env.COMSPEC||"cmd.exe":process.env.SHELL||"/bin/bash"}function N(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||b.default.homedir()}function z(){let e={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor",LANG:process.env.LANG||"en_US.UTF-8"},s=C(),o=s.includes("zsh"),r=s.includes("bash");if(o){e.ZDOTDIR=e.ZDOTDIR||e.HOME;let t=`
3
+ var T=Object.create;var k=Object.defineProperty;var A=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,P=Object.prototype.hasOwnProperty;var x=(e,s,n,r)=>{if(s&&typeof s=="object"||typeof s=="function")for(let t of _(s))!P.call(e,t)&&t!==n&&k(e,t,{get:()=>s[t],enumerable:!(r=A(s,t))||r.enumerable});return e};var h=(e,s,n)=>(n=e!=null?T(q(e)):{},x(s||!e||!e.__esModule?k(n,"default",{value:e,enumerable:!0}):n,e));var M=h(require("net"),1),c=h(require("fs"),1),b=h(require("path"),1),D=h(require("os"),1),v=h(require("node-pty"),1),I=b.default.join(D.default.homedir(),".9remote"),g=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":b.default.join(I,"pty-daemon.sock"),o=new Map,O=new Set,N=50*1024,L=5*1024*1024,R=b.default.join(I,"daemon.log");function F(){try{if(c.default.existsSync(R)&&c.default.statSync(R).size>L){let n=c.default.readFileSync(R,"utf8").slice(-1024*1024);c.default.writeFileSync(R,n)}}catch{}}function l(e,s=null){F();let r=`[${new Date().toISOString()}] ERROR: ${e}`;s&&(r+=` - ${s.message||s}`),r+=`
4
+ `;try{c.default.appendFileSync(R,r)}catch{}console.error(r.trim())}function C(){return process.platform==="win32"?process.env.COMSPEC||"cmd.exe":process.env.SHELL||"/bin/bash"}function $(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||D.default.homedir()}function z(){let e={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor",LANG:process.env.LANG||"en_US.UTF-8"},s=C(),n=s.includes("zsh"),r=s.includes("bash");if(n){e.ZDOTDIR=e.ZDOTDIR||e.HOME;let t=`
5
5
  precmd() {
6
6
  print -Pn "\\e]7;file://%m\${PWD}\\e\\\\"
7
7
  }
8
8
  `;e._9REMOTE_PRECMD=t}else if(r){let t=e.PROMPT_COMMAND||"";e.PROMPT_COMMAND=`printf "\\e]7;file://%s\\a" "\${HOSTNAME}\${PWD}"${t?`; ${t}`:""}`}return e}function w(e){let s=JSON.stringify(e)+`
9
- `;for(let o of R)try{o.write(s)}catch{}}function a(e,s){try{e.write(JSON.stringify(s)+`
10
- `)}catch{}}function j(e,s,o=80,r=24){if(c.has(e))return{success:!1,error:"Session already exists"};let t=C(),d=process.platform==="win32"?[]:["-l"],f=N();try{let n=v.default.spawn(t,d,{name:"xterm-256color",cols:o,rows:r,cwd:f,env:z(),useConpty:process.platform==="win32"}),u={pty:n,buffer:[],name:s||`Terminal ${c.size+1}`,createdAt:Date.now(),cwd:f};return n.onData(S=>{u.buffer.push(S);let m=u.buffer.reduce((y,p)=>y+p.length,0);for(;m>L&&u.buffer.length>1;)u.buffer.shift(),m=u.buffer.reduce((y,p)=>y+p.length,0);w({type:"output",sessionId:e,data:Buffer.from(S).toString("base64")})}),n.onExit(()=>{c.delete(e),w({type:"sessionClosed",sessionId:e})}),c.set(e,u),{success:!0,sessionId:e,cwd:f}}catch(n){return l("Failed to create session",n),{success:!1,error:n.message}}}function G(e,s){let{type:o,sessionId:r,...t}=s;switch(o){case"ping":a(e,{type:"pong"});break;case"listSessions":let d=Array.from(c.entries()).map(([p,D])=>({id:p,name:D.name,createdAt:D.createdAt}));a(e,{type:"sessionList",sessions:d,requestId:t.requestId});break;case"createSession":let f=j(t.sessionId||`session-${Date.now()}`,t.name,t.cols,t.rows);a(e,{type:"createResult",...f,requestId:t.requestId});break;case"joinSession":let n=c.get(r);if(!n){a(e,{type:"joinResult",success:!1,error:"Session not found",requestId:t.requestId});return}if(n.buffer.length>0){let p=n.buffer.join("");a(e,{type:"output",sessionId:r,data:Buffer.from(p).toString("base64")})}a(e,{type:"joinResult",success:!0,name:n.name,cwd:n.cwd,requestId:t.requestId});break;case"input":let u=c.get(r);u?.pty&&u.pty.write(t.data);break;case"resize":let S=c.get(r);if(S?.pty)try{S.pty.resize(t.cols,t.rows)}catch{}break;case"deleteSession":let m=c.get(r);m?(m.pty&&m.pty.kill(),c.delete(r),w({type:"sessionClosed",sessionId:r}),a(e,{type:"deleteResult",success:!0,requestId:t.requestId})):a(e,{type:"deleteResult",success:!1,error:"Session not found",requestId:t.requestId});break;case"renameSession":let y=c.get(r);y?(y.name=t.name,w({type:"sessionRenamed",sessionId:r,name:t.name}),a(e,{type:"renameResult",success:!0,requestId:t.requestId})):a(e,{type:"renameResult",success:!1,error:"Session not found",requestId:t.requestId});break;default:l(`Unknown message type: ${o}`)}}function H(){if(!i.default.existsSync(O))try{i.default.mkdirSync(O,{recursive:!0})}catch(s){l("Failed to create socket directory",s),process.exit(1)}if(process.platform!=="win32"&&i.default.existsSync(g))try{i.default.unlinkSync(g)}catch(s){l("Failed to remove stale socket",s),process.exit(1)}let e=M.default.createServer(s=>{R.add(s);let o="";s.on("data",r=>{o+=r.toString();let t=o.split(`
11
- `);o=t.pop()||"";for(let d of t)if(d.trim())try{let f=JSON.parse(d);G(s,f)}catch{l("Invalid message",d)}}),s.on("close",()=>{R.delete(s)}),s.on("error",r=>{l("Client error",r),R.delete(s)})});e.on("error",s=>{l("Server error",s),s.code==="EADDRINUSE"&&l("Socket already in use, exiting"),process.exit(1)}),e.listen(g),process.on("SIGTERM",()=>{for(let[,s]of c)s.pty&&s.pty.kill();e.close(),process.platform!=="win32"&&i.default.existsSync(g)&&i.default.unlinkSync(g),process.exit(0)}),process.on("SIGINT",()=>{process.emit("SIGTERM")})}H();
9
+ `;for(let n of O)try{n.write(s)}catch{}}function a(e,s){try{e.write(JSON.stringify(s)+`
10
+ `)}catch{}}function j(e,s,n=80,r=24){if(o.has(e))return{success:!1,error:"Session already exists"};let t=C(),d=process.platform==="win32"?[]:["-l"],f=$();try{let i=z();i.NINE_REMOTE_SESSION_ID=e;let m=v.default.spawn(t,d,{name:"xterm-256color",cols:n,rows:r,cwd:f,env:i,useConpty:process.platform==="win32"}),u={pty:m,buffer:[],name:s||`Terminal ${o.size+1}`,createdAt:Date.now(),cwd:f};return m.onData(S=>{u.buffer.push(S);let E=u.buffer.reduce((p,y)=>p+y.length,0);for(;E>N&&u.buffer.length>1;)u.buffer.shift(),E=u.buffer.reduce((p,y)=>p+y.length,0);w({type:"output",sessionId:e,data:Buffer.from(S).toString("base64")})}),m.onExit(()=>{o.delete(e),w({type:"sessionClosed",sessionId:e})}),o.set(e,u),{success:!0,sessionId:e,cwd:f}}catch(i){return l("Failed to create session",i),{success:!1,error:i.message}}}function G(e,s){let{type:n,sessionId:r,...t}=s;switch(n){case"ping":a(e,{type:"pong"});break;case"listSessions":let d=Array.from(o.entries()).map(([p,y])=>({id:p,name:y.name,createdAt:y.createdAt}));a(e,{type:"sessionList",sessions:d,requestId:t.requestId});break;case"createSession":let f=j(t.sessionId||`session-${Date.now()}`,t.name,t.cols,t.rows);a(e,{type:"createResult",...f,requestId:t.requestId});break;case"joinSession":let i=o.get(r);if(!i){a(e,{type:"joinResult",success:!1,error:"Session not found",requestId:t.requestId});return}if(i.buffer.length>0){let p=i.buffer.join("");a(e,{type:"output",sessionId:r,data:Buffer.from(p).toString("base64")})}a(e,{type:"joinResult",success:!0,name:i.name,cwd:i.cwd,requestId:t.requestId});break;case"input":let m=o.get(r);m?.pty&&m.pty.write(t.data);break;case"resize":let u=o.get(r);if(u?.pty)try{u.pty.resize(t.cols,t.rows)}catch{}break;case"deleteSession":let S=o.get(r);S?(S.pty&&S.pty.kill(),o.delete(r),w({type:"sessionClosed",sessionId:r}),a(e,{type:"deleteResult",success:!0,requestId:t.requestId})):a(e,{type:"deleteResult",success:!1,error:"Session not found",requestId:t.requestId});break;case"renameSession":let E=o.get(r);E?(E.name=t.name,w({type:"sessionRenamed",sessionId:r,name:t.name}),a(e,{type:"renameResult",success:!0,requestId:t.requestId})):a(e,{type:"renameResult",success:!1,error:"Session not found",requestId:t.requestId});break;default:l(`Unknown message type: ${n}`)}}function H(){if(!c.default.existsSync(I))try{c.default.mkdirSync(I,{recursive:!0})}catch(s){l("Failed to create socket directory",s),process.exit(1)}if(process.platform!=="win32"&&c.default.existsSync(g))try{c.default.unlinkSync(g)}catch(s){l("Failed to remove stale socket",s),process.exit(1)}let e=M.default.createServer(s=>{O.add(s);let n="";s.on("data",r=>{n+=r.toString();let t=n.split(`
11
+ `);n=t.pop()||"";for(let d of t)if(d.trim())try{let f=JSON.parse(d);G(s,f)}catch{l("Invalid message",d)}}),s.on("close",()=>{O.delete(s)}),s.on("error",r=>{l("Client error",r),O.delete(s)})});e.on("error",s=>{l("Server error",s),s.code==="EADDRINUSE"&&l("Socket already in use, exiting"),process.exit(1)}),e.listen(g),process.on("SIGTERM",()=>{for(let[,s]of o)s.pty&&s.pty.kill();e.close(),process.platform!=="win32"&&c.default.existsSync(g)&&c.default.unlinkSync(g),process.exit(0)}),process.on("SIGINT",()=>{process.emit("SIGTERM")})}H();