UNPKG

@iosifnicolae22/remote-shell

Version:

Run any terminal application and control it remotely from your mobile device. Perfect for maxing out vibe coding sessions with Claude Code on the go!

2 lines (1 loc) 2.41 kB
"use strict";var __createBinding=this&&this.__createBinding||(Object.create?function(t,s,e,r){void 0===r&&(r=e);var i=Object.getOwnPropertyDescriptor(s,e);i&&!("get"in i?!s.__esModule:i.writable||i.configurable)||(i={enumerable:!0,get:function(){return s[e]}}),Object.defineProperty(t,r,i)}:function(t,s,e,r){void 0===r&&(r=e),t[r]=s[e]});var __setModuleDefault=this&&this.__setModuleDefault||(Object.create?function(t,s){Object.defineProperty(t,"default",{enumerable:!0,value:s})}:function(t,s){t.default=s});var __importStar=this&&this.__importStar||function(){var t=function(s){return t=Object.getOwnPropertyNames||function(t){var s=[];for(var e in t)Object.prototype.hasOwnProperty.call(t,e)&&(s[s.length]=e);return s},t(s)};return function(s){if(s&&s.__esModule)return s;var e={};if(null!=s)for(var r=t(s),i=0;i<r.length;i++)"default"!==r[i]&&__createBinding(e,s,r[i]);return __setModuleDefault(e,s),e}}();Object.defineProperty(exports,"__esModule",{value:!0}),exports.PTYManager=void 0;const pty=__importStar(require("node-pty"));class PTYManager{ptyProcess=null;statusBarVisible=!1;create(t=process.env.SHELL||"/bin/bash",s=process.cwd(),e=[]){const r=(process.stdout.rows||24)-(this.statusBarVisible?1:0);const i={cols:process.stdout.columns||80,rows:r};let o=e;if(0===e.length){const s=t.split("/").pop()||"bash";if(["zsh","bash","fish","sh","dash","ksh","tcsh","csh"].includes(s))switch(s){case"zsh":case"bash":case"fish":o=["-i","-l"];break;default:o=["-i"]}}return this.ptyProcess=pty.spawn(t,o,{name:"xterm-color",cols:i.cols,rows:i.rows,cwd:s,env:{...process.env,TERM:"xterm-256color",PS1:process.env.PS1||"$ "}}),this.ptyProcess.onData(t=>{this.handleOutput(t)}),this.ptyProcess.onExit(()=>{this.cleanup(),this.onExit?.()}),this.ptyProcess}write(t){this.ptyProcess&&this.ptyProcess.write(t)}resize(t,s){if(this.ptyProcess){const e=this.statusBarVisible?s-1:s;this.ptyProcess.resize(t,e)}}setStatusBarVisible(t){const s=this.statusBarVisible;if(this.statusBarVisible=t,s!==t&&this.ptyProcess){const s=process.stdout.columns||80;const e=(process.stdout.rows||24)-(t?1:0);this.ptyProcess.resize(s,e)}}getEffectiveRows(){return(process.stdout.rows||24)-(this.statusBarVisible?1:0)}kill(){this.ptyProcess&&(this.ptyProcess.kill(),this.cleanup())}handleOutput(t){t.includes("")&&this.onBell?.(),this.onOutput?.(t)}cleanup(){this.ptyProcess=null}onOutput;onBell;onExit}exports.PTYManager=PTYManager;