9remote 2.1.2 → 2.1.5
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 +68 -68
- package/dist/ptyDaemon.cjs +6 -6
- package/dist/server.cjs +71 -71
- package/dist/ui/assets/{index-5Az69C6y.js → index-x-cLAYQY.js} +3556 -3552
- package/dist/ui/index.html +1 -1
- package/package.json +1 -1
package/dist/ptyDaemon.cjs
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const __importMetaUrl = require('url').pathToFileURL(__filename).href;
|
|
3
|
-
var
|
|
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||
|
|
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
|
|
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=
|
|
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)>
|
|
9
|
-
`);n=o.pop()||"";for(let i of o)if(i.trim())try{let l=JSON.parse(i);ae(t,l)}catch{
|
|
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();
|