9remote 2.0.31 → 2.0.55
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/assets/tray.ps1 +129 -0
- package/dist/cli.cjs +154 -60
- package/dist/install.cjs +1 -1
- package/dist/ptyDaemon.cjs +5 -5
- package/dist/server.cjs +64 -62
- package/dist/ui/agents/claude.svg +1 -0
- package/dist/ui/agents/codex.svg +1 -0
- package/dist/ui/agents/gemini.svg +1 -0
- package/dist/ui/agents/opencode.svg +1 -0
- package/dist/ui/assets/{index-CzK2QQU8.js → index-2FuQGIl3.js} +3449 -2426
- package/dist/ui/assets/{index-Casn8c07.css → index-DbeWsL_A.css} +50 -0
- package/dist/ui/index.html +2 -2
- package/package.json +1 -1
package/dist/install.cjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
const __importMetaUrl = require('url').pathToFileURL(__filename).href;
|
|
3
|
-
var
|
|
3
|
+
var f=Object.create;var l=Object.defineProperty;var S=Object.getOwnPropertyDescriptor;var h=Object.getOwnPropertyNames;var p=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var R=(e,n,s,a)=>{if(n&&typeof n=="object"||typeof n=="function")for(let o of h(n))!b.call(e,o)&&o!==s&&l(e,o,{get:()=>n[o],enumerable:!(a=S(n,o))||a.enumerable});return e};var _=(e,n,s)=>(s=e!=null?f(p(e)):{},R(n||!e||!e.__esModule?l(s,"default",{value:e,enumerable:!0}):s,e));var{spawnSync:j}=require("child_process"),t=require("fs"),u=require("os"),r=require("path"),c="systray2",w="2.1.4",v=r.join(u.homedir(),".9remote"),i=r.join(v,"runtime"),m=r.join(i,"node_modules"),g={darwin:"tray_darwin_release",win32:"tray_windows_release.exe",linux:"tray_linux_release"};function d(){return g[process.platform]}function x(){t.existsSync(i)||t.mkdirSync(i,{recursive:!0});let e=r.join(i,"package.json");t.existsSync(e)||t.writeFileSync(e,JSON.stringify({name:"9remote-runtime",version:"1.0.0",private:!0},null,2))}function N(){let e=d();return!!e&&t.existsSync(r.join(m,c,"traybin",e))}function y(){if(process.platform==="win32")return;let e=d(),n=r.join(m,c,"traybin",e);try{t.existsSync(n)&&t.chmodSync(n,493)}catch{}}function I(){x();try{t.rmSync(r.join(u.homedir(),".cache","node-systray"),{recursive:!0,force:!0})}catch{}if(N()){y();return}console.log("\u23F3 Installing system tray (first run)..."),j("npm",["install",`${c}@${w}`,"--no-save"],{cwd:i,stdio:"inherit",timeout:12e4,shell:process.platform==="win32"}).status===0?(y(),console.log("\u2705 System tray ready")):console.warn("\u26A0\uFE0F System tray install failed \u2014 tray disabled")}function T(){try{require.resolve("@hurdlegroup/robotjs"),console.log("\u2705 robotjs installed (Remote desktop available)")}catch{console.log("\u2139\uFE0F robotjs not available (Remote desktop disabled)")}}try{T()}catch{}try{I()}catch{}process.exit(0);
|
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 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),
|
|
4
|
-
`;try{n.default.appendFileSync(
|
|
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),P=g(require("os"),1),M=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 w=m.default.join(P.default.homedir(),".9remote"),b=process.platform==="win32"?"\\\\.\\pipe\\9remote-pty":m.default.join(w,"pty-daemon.sock"),R=m.default.join(w,"pids","ptyDaemon.pid"),l=new Map,O=new Set,_=2*1024*1024,H=256*1024,G=5*1024*1024,D=m.default.join(w,"logs"),E=m.default.join(D,"daemon.log");try{n.default.existsSync(D)||n.default.mkdirSync(D,{recursive:!0})}catch{}function U(){try{if(n.default.existsSync(E)&&n.default.statSync(E).size>G){let s=n.default.readFileSync(E,"utf8").slice(-1024*1024);n.default.writeFileSync(E,s)}}catch{}}function f(e,r=null){U();let o=`[${new Date().toISOString()}] ERROR: ${e}`;r&&(o+=` - ${r.message||r}`),o+=`
|
|
4
|
+
`;try{n.default.appendFileSync(E,o)}catch{}console.error(o.trim())}function Z(){return process.env.CODESPACES==="true"?process.env.CODESPACE_VSCODE_FOLDER||"/workspaces":process.env.HOME||process.env.USERPROFILE||P.default.homedir()}function B(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
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
9
|
`;for(let s of O)try{s.write(r)}catch{}}function u(e,r){try{e.write(JSON.stringify(r)+`
|
|
10
|
-
`)}catch{}}function
|
|
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)>
|
|
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(
|
|
10
|
+
`)}catch{}}function J(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=Z());try{let c=B(i.path);c.NINE_REMOTE_SESSION_ID=e;let h=M.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)>_&&(p.buffer=[p.buffer.join("").slice(-_)]),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:"18",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=J(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("").slice(-H):"";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 v=l.get(o);u(e,{type:"cwdResult",cwd:v?.cwd||null,requestId:t.requestId});break;default:f(`Unknown message type: ${s}`)}}function V(){if(!n.default.existsSync(w))try{n.default.mkdirSync(w,{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(R),{recursive:!0}),n.default.writeFileSync(R,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(R)}catch{}process.exit(0)};process.on("SIGTERM",r),process.on("SIGINT",r)}V();
|