9remote 2.0.22 → 2.0.26
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 +86 -55
- package/dist/ptyDaemon.cjs +7 -7
- package/dist/server.cjs +76 -71
- package/dist/ui/assets/index-BZm3GUhX.js +47 -0
- package/dist/ui/assets/index-UgZubVKT.css +32 -0
- package/dist/ui/index.html +2 -2
- package/package.json +6 -3
- package/dist/ui/assets/index-D646KQwB.css +0 -1
- package/dist/ui/assets/index-K-xvZBoY.js +0 -8
package/dist/ptyDaemon.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const __importMetaUrl = require('url').pathToFileURL(__filename).href;
|
|
3
|
-
var
|
|
4
|
-
`;try{
|
|
3
|
+
var A=Object.create;var L=Object.defineProperty;var T=Object.getOwnPropertyDescriptor;var $=Object.getOwnPropertyNames;var q=Object.getPrototypeOf,F=Object.prototype.hasOwnProperty;var j=(e,r,s,o)=>{if(r&&typeof r=="object"||typeof r=="function")for(let t of $(r))!F.call(e,t)&&t!==s&&L(e,t,{get:()=>r[t],enumerable:!(o=T(r,t))||o.enumerable});return e};var g=(e,r,s)=>(s=e!=null?A(q(e)):{},j(r||!e||!e.__esModule?L(s,"default",{value:e,enumerable:!0}):s,e));var N=g(require("net"),1),n=g(require("fs"),1),m=g(require("path"),1),v=g(require("os"),1),_=g(require("node-pty"),1);var k={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 C(e){if(process.platform==="win32"){let o=e?k.win32.find(a=>a.id===e):null;if(o)return o;let t=process.env.COMSPEC;return t?{id:"cmd",label:"Command Prompt",path:t,args:[]}:k.win32[0]}let r=process.env.SHELL||"/bin/bash",s=r.split("/").pop();return{id:s,label:s,path:r,args:["-l"]}}var E=m.default.join(v.default.homedir(),".9remote"),b=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":m.default.join(E,"pty-daemon.sock"),D=m.default.join(E,"pids","ptyDaemon.pid"),l=new Map,O=new Set,M=2*1024*1024,H=5*1024*1024,R=m.default.join(E,"logs"),w=m.default.join(R,"daemon.log");try{n.default.existsSync(R)||n.default.mkdirSync(R,{recursive:!0})}catch{}function G(){try{if(n.default.existsSync(w)&&n.default.statSync(w).size>H){let s=n.default.readFileSync(w,"utf8").slice(-1024*1024);n.default.writeFileSync(w,s)}}catch{}}function f(e,r=null){G();let o=`[${new Date().toISOString()}] ERROR: ${e}`;r&&(o+=` - ${r.message||r}`),o+=`
|
|
4
|
+
`;try{n.default.appendFileSync(w,o)}catch{}console.error(o.trim())}function U(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||v.default.homedir()}function Z(e){let r={...process.env,TERM:"xterm-256color",COLORTERM:"truecolor",LANG:process.env.LANG||"en_US.UTF-8"},s=e.includes("zsh"),o=e.includes("bash");if(s){r.ZDOTDIR=r.ZDOTDIR||r.HOME;let t=`
|
|
5
5
|
precmd() {
|
|
6
6
|
print -Pn "\\e]7;file://%m\${PWD}\\e\\\\"
|
|
7
7
|
}
|
|
8
|
-
`;r._9REMOTE_PRECMD=t}else if(
|
|
9
|
-
`;for(let s of O)try{s.write(r)}catch{}}function
|
|
10
|
-
`)}catch{}}function
|
|
11
|
-
`;setTimeout(()=>{try{
|
|
12
|
-
`);
|
|
8
|
+
`;r._9REMOTE_PRECMD=t}else if(o){let t=r.PROMPT_COMMAND||"";r.PROMPT_COMMAND=`printf "\\e]7;file://%s\\a" "\${HOSTNAME}\${PWD}"${t?`; ${t}`:""}`}return r}function x(e){let r=JSON.stringify(e)+`
|
|
9
|
+
`;for(let s of O)try{s.write(r)}catch{}}function u(e,r){try{e.write(JSON.stringify(r)+`
|
|
10
|
+
`)}catch{}}function B(e,r,s=80,o=24,t=null,a=null){if(l.has(e))return{success:!1,error:"Session already exists"};let i=C(t);(!a||!n.default.existsSync(a))&&(a=U());try{let c=Z(i.path);c.NINE_REMOTE_SESSION_ID=e;let h=_.default.spawn(i.path,i.args,{name:"xterm-256color",cols:s,rows:o,cwd:a,env:c,useConpty:process.platform==="win32"});if(i.id==="powershell"||i.id==="pwsh"){let d=`function prompt { $p = $PWD.Path -replace '\\\\','/'; "$([char]27)]7;file://$([System.Net.Dns]::GetHostName())$p$([char]27)\\PS $($PWD.Path)> " }\r
|
|
11
|
+
`;setTimeout(()=>{try{h.write(d)}catch{}},500)}let p={pty:h,buffer:[],name:r,createdAt:Date.now(),cwd:a,shellId:i.id,shellLabel:i.label};return h.onData(d=>{p.buffer.push(d);let y=d.match(/\x1b\]7;file:\/\/[^/]*([^\x07\x1b]*)/);if(y)try{p.cwd=decodeURIComponent(y[1])}catch{}p.buffer.reduce((I,S)=>I+S.length,0)>M&&(p.buffer=[p.buffer.join("").slice(-M)]),x({type:"output",sessionId:e,data:Buffer.from(d).toString("base64")})}),h.onExit(()=>{l.delete(e),x({type:"sessionClosed",sessionId:e})}),l.set(e,p),{success:!0,sessionId:e,cwd:a,shellId:i.id,shellLabel:i.label}}catch(c){return f("Failed to create session",c),{success:!1,error:c.message}}}function W(e,r){let{type:s,sessionId:o,...t}=r;switch(s){case"ping":u(e,{type:"pong",version:"17",requestId:t.requestId});break;case"listSessions":let a=Array.from(l.entries()).map(([I,S])=>({id:I,name:S.name,createdAt:S.createdAt,shellId:S.shellId,shellLabel:S.shellLabel,cwd:S.cwd}));u(e,{type:"sessionList",sessions:a,requestId:t.requestId});break;case"createSession":let i=B(t.sessionId||`session-${Date.now()}`,t.name,t.cols,t.rows,t.shellId,t.cwd);u(e,{type:"createResult",...i,requestId:t.requestId});break;case"joinSession":let c=l.get(o);if(!c){u(e,{type:"joinResult",success:!1,error:"Session not found",requestId:t.requestId});return}let h=c.buffer.length>0?c.buffer.join(""):"";h&&u(e,{type:"output",sessionId:o,data:Buffer.from(h).toString("base64")}),u(e,{type:"joinResult",success:!0,name:c.name,cwd:c.cwd,shellId:c.shellId,shellLabel:c.shellLabel,requestId:t.requestId});break;case"input":let p=l.get(o);p?.pty&&p.pty.write(t.data);break;case"resize":let d=l.get(o);if(d?.pty)try{d.pty.resize(t.cols,t.rows)}catch{}break;case"deleteSession":let y=l.get(o);y?(y.pty&&y.pty.kill(),l.delete(o),x({type:"sessionClosed",sessionId:o}),u(e,{type:"deleteResult",success:!0,requestId:t.requestId})):u(e,{type:"deleteResult",success:!1,error:"Session not found",requestId:t.requestId});break;case"getCwd":let P=l.get(o);u(e,{type:"cwdResult",cwd:P?.cwd||null,requestId:t.requestId});break;default:f(`Unknown message type: ${s}`)}}function J(){if(!n.default.existsSync(E))try{n.default.mkdirSync(E,{recursive:!0})}catch(s){f("Failed to create socket directory",s),process.exit(1)}if(process.platform!=="win32"&&n.default.existsSync(b))try{n.default.unlinkSync(b)}catch(s){f("Failed to remove stale socket",s),process.exit(1)}let e=N.default.createServer(s=>{O.add(s);let o="";s.on("data",t=>{o+=t.toString();let a=o.split(`
|
|
12
|
+
`);o=a.pop()||"";for(let i of a)if(i.trim())try{let c=JSON.parse(i);W(s,c)}catch{f("Invalid message",i)}}),s.on("close",()=>{O.delete(s)}),s.on("error",t=>{f("Client error",t),O.delete(s)})});e.on("error",s=>{f("Server error",s),s.code==="EADDRINUSE"&&f("Socket already in use, exiting"),process.exit(1)}),e.listen(b,()=>{if(process.platform!=="win32")try{n.default.chmodSync(b,384)}catch{}});try{n.default.mkdirSync(m.default.dirname(D),{recursive:!0}),n.default.writeFileSync(D,String(process.pid),{mode:384})}catch{}let r=()=>{for(let[,s]of l)if(s.pty)try{s.pty.kill()}catch{}try{e.close()}catch{}if(process.platform!=="win32"&&n.default.existsSync(b))try{n.default.unlinkSync(b)}catch{}try{n.default.unlinkSync(D)}catch{}process.exit(0)};process.on("SIGTERM",r),process.on("SIGINT",r)}J();
|