{"_id":"@abhishekreddy31/term-pilot","_rev":"14-47c022c425aeefef672cf044ac7514c8","name":"@abhishekreddy31/term-pilot","dist-tags":{"latest":"1.0.14"},"versions":{"1.0.0":{"name":"@abhishekreddy31/term-pilot","version":"1.0.0","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.0","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"436dc222b83065332a72e72dea0a50f32741ef99","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.0.tgz","fileCount":14,"integrity":"sha512-02/FsbG60yZ+nCcuyxf0zTyWV/pPMoT5cUJeEidQwTWK9mDbmITxlr4JKA1yIIzkxHN6oi6JL6vDXD2PDPL3+A==","signatures":[{"sig":"MEYCIQCiC3Gyut4+vkK90wV6t9xdWCO9pvIHGgmGL9vGusyJwwIhALFq/aWBfkFHepp2JnDeK71XJbzv0Y2w2ZEm5LGKHHSU","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546450},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"7b0b25bf16b3948b11fb7e49b423c6d792bc2d23","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.0_1773938863320_0.46561678611094504","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@abhishekreddy31/term-pilot","version":"1.0.1","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.1","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"ba256210583b11fd5b80d6582d6790155bebb601","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.1.tgz","fileCount":14,"integrity":"sha512-PXm016ZeuJcHrdyirpMBU1aM+N64Oa7As51D0vHW9dqp8NQ3qn+v1FApyia8ZB7MVXhWFzt2EY9wI7vdek9IWQ==","signatures":[{"sig":"MEUCIBJzy65L/SO1zFQ7lYZfyyMYCyyR0IB997nBG1rvbzSZAiEA665L+fT5JKxMD8b9nmDchMYzEDQJCiNfIDaYs4eZ4h0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546519},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"9c01837a136f5102833f1672c0cbb0be0f35c465","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.1_1773939259246_0.3012570029342043","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@abhishekreddy31/term-pilot","version":"1.0.2","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.2","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"52ee7dd7655772f3f8e92e9171f397fa2416ae3c","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.2.tgz","fileCount":14,"integrity":"sha512-eAd6Mmxj/QRA9V0Ly2l3DHPIpmYS0LG6lmHU/v+naBYPD2LYCK/1Gzdt/ys4yM4uLDhWQNFJ5wxQsL4eYy6NVA==","signatures":[{"sig":"MEUCIAGG88jkpovqmkDR5/pcmHOwEeC/+H8d3JD1MW3hcp2tAiEArRAOgpxcJ+rDUmuolyvhGpUYhJYssTYbHwK8qbYfBSU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546525},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"f828c27b9b5ec651f7a8bc5952fe0fa69b0b2ead","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.2_1773982371327_0.40009568023983855","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@abhishekreddy31/term-pilot","version":"1.0.3","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.3","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"5438a3b9a3ab5056688cadd118a83e5844367ccc","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.3.tgz","fileCount":14,"integrity":"sha512-3ZRVjh3wxF6G518AbvyaeaGuY4ABoBm21Qx72Ij0j/eCtyXPgbnhL4sRB9OPepF0ThN66We9/BoeysrO9TOrcg==","signatures":[{"sig":"MEUCIEhFZ3lQeGVaDRI/D/SB9sww2NkGZuwXnLUKk381HEAcAiEA3oB3CudSvcN5wASL6zUxO8SAxy0M5J2JTcUo49efBVg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546586},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"1e7e12dac5bd87249b8be5db252f2e54d3d27b8e","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.3_1773987146088_0.2539088041855777","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"@abhishekreddy31/term-pilot","version":"1.0.4","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.4","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"0d097bcfa546f088d7d9334d203af435328d86fc","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.4.tgz","fileCount":14,"integrity":"sha512-fUx6argBQf9q5Grlp+fEfu7JM+tJ/gEADlVH3tCvx+/S7e3twoKx5TgVrQgufWyG52S1iwYqburkablUefLxIQ==","signatures":[{"sig":"MEQCIGjfHOwQfvzNSz3RtS9M8zvGdg+WGBTkvnZk16VU3m42AiAnO4UBuHSkofgUT5Co/z5Etq9m477lp5apVO6hwMfbkw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546753},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"69d4f6e7885ef3e9cb179b628ef513a65aaa3be1","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.4_1773988473089_0.47664120557823986","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"@abhishekreddy31/term-pilot","version":"1.0.5","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.5","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"bc6dc3bf40a5803b50096193260fff34ea67bce3","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.5.tgz","fileCount":14,"integrity":"sha512-jr7XpXBOORcBo16ZwZv/1klMfKgg6dw4C2JV3yIUzuVz03d2NGy6CY2Z6oliHlGEfsGX/mkG8NOk5XogAUjtYA==","signatures":[{"sig":"MEYCIQCJOQIPbbzS/dN6tzmgJ66TnF1i+xpq2uNEQred8gOqlQIhANlTFHgMCmbuHn7xZEwWyxO7zVhNbKwj5kujihHSsEuM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":546907},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"403951a0e181b7c6e8bc3e00b603ccbe1baa44b0","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.5_1773989594455_0.1348458551901064","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"@abhishekreddy31/term-pilot","version":"1.0.6","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.6","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"4133e2abc692e122b0a0a71317177a7f9c434917","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.6.tgz","fileCount":14,"integrity":"sha512-5vsYw2GgT2AapJ9XQ9101PmxvhtaRV9UFtrlDFH/vTDmVFoLwrmGgLwxblxeEE2MZbnXaZ6bQfTE9CbIvVt7Vw==","signatures":[{"sig":"MEYCIQCexLfC3FPKzVlNXcy0ONXtm9NvlELNIsgprPuIfyEoegIhANsXqLmCjPSNcYFDmCkDUxzhvaGX15DKBlJ7+aELJxge","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":547143},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"a5eeb52c4f81c9ba7af5ab8d3804a88de17b88da","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","postinstall":"node -e \"const{chmodSync:c,readdirSync:r}=require('fs'),{join:j}=require('path');try{const d=j(require.resolve('node-pty'),'..','prebuilds');r(d).forEach(p=>{try{c(j(d,p,'spawn-helper'),'755')}catch{}})}catch{}\"","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.6_1773990897366_0.19948440711809856","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"@abhishekreddy31/term-pilot","version":"1.0.7","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.7","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"b5aecc7b94a2a5f6bff85ea61e61a5cbabac2afc","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.7.tgz","fileCount":14,"integrity":"sha512-+YkEhJrf5vSAOUjIRlyBz7EtSPQnTLIvLDB4RnsYjRVcNndSNB2XNwwFhJ37FxAWSEokMedPeizDGi/NmN6r6g==","signatures":[{"sig":"MEUCIEyvlaKX2/1vBPpFSwMTuC89rXoHYNl8fQ1DLcPUKp+zAiEA0TR9BygXhKH4/1FfjjO33IVMFp/Ms5QnLmgddcobwik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":547590},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"dc8471290a026d561ce6a236a9b9fcfb1eb1c7e7","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.7_1773991671465_0.8169285770679906","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"@abhishekreddy31/term-pilot","version":"1.0.8","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.8","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"3eb482b772de965e2f53fdd6e0d29ea188308b9a","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.8.tgz","fileCount":14,"integrity":"sha512-IE/y/OhuffPEUs5C1kVQ5z37chvlp54e0rlivj2zS8jzKNLk1Fq1w3hx7i/7hybY3CSj439biNgAkoBmw+ysOw==","signatures":[{"sig":"MEUCIQCywwItqAfsUVCyRfdVzObj4dj/PqobaevRXGuY4x7fuwIgdU2lONm2p8CwhOFVf+iL7YdiimURLQr3ZlZTvciHrrE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":547388},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"fe8632ba708e757bc731ab02a785b53551119ac4","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.8_1773991919203_0.09387363919042535","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"@abhishekreddy31/term-pilot","version":"1.0.9","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.9","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"dea3b255d120bfe8bdbb513c1f85d97dfc71cd26","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.9.tgz","fileCount":14,"integrity":"sha512-uHT0O3z9brjxcQMEi/Y3cnWolXLIkQwoJGgOEeXs9A9XyL5q/+pnevr4r4XyKl+rzxXJ9P3gRqr7Otvipi79/g==","signatures":[{"sig":"MEUCIBvz7U+QQFZ/ds1DhhGciPg4ehYSB36ejePljtWR+8I8AiEA3ZhGS7hPmdS17W9wPVjH8EoBOOAHQDQPo4aqhy1IrtQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":547584},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"49ae39e90ae984c5e9b888e2d39c8871b3578c11","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.9_1773992458260_0.9639304063449843","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"@abhishekreddy31/term-pilot","version":"1.0.10","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.10","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"1100ffb2bb5d10efe6c2999557dde6b78bfb77cc","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.10.tgz","fileCount":14,"integrity":"sha512-69g8G92f6MPJ4ARHczp2B6I/O3jrhEbpQgOF1ELoc0PPLDdGjxps0xVGsWaO/9vrnW0zKWceWwoG9AyyVZULOQ==","signatures":[{"sig":"MEUCIQCQt7zirAg9Eus/LETFwQYpp4GhW2LRUZqaLLIon8CI8gIgAmsKvSLMXg2oKowF1J90dMSiEFigzTwBi3y+O6PBFZo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548099},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"e6c63dab3025ab5327c11808717eebad54c85447","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.10_1773996679153_0.38528759899606446","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"@abhishekreddy31/term-pilot","version":"1.0.11","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.11","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"e826f62441eb67f5a28c3adf80ad7b44452296df","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.11.tgz","fileCount":14,"integrity":"sha512-/iQkxQd6c5Z3Wk69RgfJkMnqfvxc28lsSraUX7SMgYpBLbTZAshIaxC7FIO+OMGRI4eKgGuPvsuXsz4DrJOWCg==","signatures":[{"sig":"MEUCIB4CqntsbUwhyN3F1uABE8Vk/95sr30pNBAmKPnDHDbSAiEA1NCUGmwK70QXN3d5adKj2VsSsUXXKG9tADAu5sDlCsw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":548485},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"575b412cf1471a59d63ea7b7e6a07479cb1a13fe","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.11_1773997489438_0.7913417496490631","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"@abhishekreddy31/term-pilot","version":"1.0.13","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"author":{"url":"https://github.com/Abhishekreddy31","name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com"},"license":"MIT","_id":"@abhishekreddy31/term-pilot@1.0.13","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"os":["linux","darwin","win32"],"bin":{"term-pilot":"dist/cli.js"},"dist":{"shasum":"cd558b6b0e498d81749b0339b42a43e68a854c8a","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.13.tgz","fileCount":14,"integrity":"sha512-1DKKSnRxFJKVddIsf2NrephTr9k1de/Hlt4/wqy6qeAmaGBdQmwtV5BxqbtwSHKnYpNmyQSITxB7wvwQOlCVQg==","signatures":[{"sig":"MEYCIQDwSP2uY6fadOm/ptTKm6m1VPVVG87zOvb7YOPxj5x/4gIhAI70f0I4yUewZjMZULehKJc32eUtR3EqQw/oVXCPhv4c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":549233},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"type":"module","engines":{"node":">=20.0.0"},"gitHead":"31cfea43e4d049c93e8b24d520c7c14161c0dce1","scripts":{"dev":"pnpm -r --parallel run dev","e2e":"pnpm --filter @termpilot/e2e test","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","audit":"pnpm audit --prod","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","clean":"pnpm -r run clean && rm -rf dist","start":"pnpm run build && node packages/server/dist/cli/cli.js","typecheck":"pnpm -r run typecheck","dev:client":"pnpm --filter @termpilot/client dev","dev:server":"pnpm --filter @termpilot/server dev","test:watch":"pnpm -r --parallel run test:watch","build:publish":"node scripts/build-publish.js","test:coverage":"pnpm -r run test:coverage","prepublishOnly":"node scripts/build-publish.js"},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"repository":{"url":"git+https://github.com/Abhishekreddy31/TermPilot.git","type":"git"},"_npmVersion":"11.8.0","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","directories":{},"_nodeVersion":"25.5.0","dependencies":{"ws":"^8.18.0","zod":"^3.24.0","node-pty":"^1.0.0"},"_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.25.0"},"_npmOperationalInternal":{"tmp":"tmp/term-pilot_1.0.13_1774593168470_0.6299451439509005","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"@abhishekreddy31/term-pilot","version":"1.0.14","description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","license":"MIT","author":{"name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com","url":"https://github.com/Abhishekreddy31"},"repository":{"type":"git","url":"git+https://github.com/Abhishekreddy31/TermPilot.git"},"homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"bin":{"term-pilot":"dist/cli.js"},"type":"module","scripts":{"dev":"pnpm -r --parallel run dev","dev:server":"pnpm --filter @termpilot/server dev","dev:client":"pnpm --filter @termpilot/client dev","build":"pnpm --filter @termpilot/shared build && pnpm --filter @termpilot/client build && pnpm --filter @termpilot/server build","build:publish":"node scripts/build-publish.js","test":"pnpm --filter @termpilot/shared --filter @termpilot/server --filter @termpilot/client run test","start":"pnpm run build && node packages/server/dist/cli/cli.js","test:watch":"pnpm -r --parallel run test:watch","test:coverage":"pnpm -r run test:coverage","typecheck":"pnpm -r run typecheck","clean":"pnpm -r run clean && rm -rf dist","e2e":"pnpm --filter @termpilot/e2e test","audit":"pnpm audit --prod","prepublishOnly":"node scripts/build-publish.js"},"engines":{"node":">=20.0.0"},"os":["linux","darwin","win32"],"dependencies":{"node-pty":"^1.0.0","ws":"^8.18.0","zod":"^3.24.0"},"devDependencies":{"esbuild":"^0.25.0"},"pnpm":{"onlyBuiltDependencies":["esbuild","node-pty"]},"gitHead":"ec397ed6a9f585b3bd0ca7ee29b34ff30d8e98a3","_id":"@abhishekreddy31/term-pilot@1.0.14","_nodeVersion":"25.5.0","_npmVersion":"11.8.0","dist":{"integrity":"sha512-7xDH1H8isc1ysOySiBjTZblFX44bNAMzG4mBTmgO2xBUp4YC8Hmme1jIqO3TZ522HTqz2ur1jp+P9HqRYGMWag==","shasum":"6e99d57ad4eb78dc77a75c0cbbebba65d2d730e2","tarball":"https://registry.npmjs.org/@abhishekreddy31/term-pilot/-/term-pilot-1.0.14.tgz","fileCount":14,"unpackedSize":549642,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCKgbK0rKBct5ycO93Cw4FD+hymQzmPcDwkSfm6NlYevAIgEKLhvx3M96lLznZ/xGAiwUmNILmrqGRKJgiHStPnjd0="}]},"_npmUser":{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"},"directories":{},"maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/term-pilot_1.0.14_1774594909548_0.6743453031300983"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-19T16:47:43.235Z","modified":"2026-03-27T07:01:49.895Z","1.0.0":"2026-03-19T16:47:43.496Z","1.0.1":"2026-03-19T16:54:19.411Z","1.0.2":"2026-03-20T04:52:51.530Z","1.0.3":"2026-03-20T06:12:26.257Z","1.0.4":"2026-03-20T06:34:33.237Z","1.0.5":"2026-03-20T06:53:14.621Z","1.0.6":"2026-03-20T07:14:57.526Z","1.0.7":"2026-03-20T07:27:51.620Z","1.0.8":"2026-03-20T07:31:59.354Z","1.0.9":"2026-03-20T07:40:58.391Z","1.0.10":"2026-03-20T08:51:19.353Z","1.0.11":"2026-03-20T09:04:49.628Z","1.0.13":"2026-03-27T06:32:48.650Z","1.0.14":"2026-03-27T07:01:49.776Z"},"bugs":{"url":"https://github.com/Abhishekreddy31/TermPilot/issues"},"author":{"name":"Abhishek Reddy","email":"abhisheksingireddy31@gmail.com","url":"https://github.com/Abhishekreddy31"},"license":"MIT","homepage":"https://github.com/Abhishekreddy31/TermPilot#readme","keywords":["terminal","remote-terminal","pwa","voice-control","tmux","xterm","websocket","mobile","developer-tools","node-pty","cloudflare-tunnel","cli"],"repository":{"type":"git","url":"git+https://github.com/Abhishekreddy31/TermPilot.git"},"description":"Control your laptop's terminal from your phone. Voice commands, multi-session tabs, tmux mirroring, remote access.","maintainers":[{"name":"abhishekreddy31","email":"abhisheksingireddy31@gmail.com"}],"readme":"<p align=\"center\">\n  <img src=\"packages/client/public/icons/favicon.svg\" width=\"80\" height=\"80\" alt=\"TermPilot logo\">\n</p>\n\n<h1 align=\"center\">TermPilot</h1>\n\n<p align=\"center\">\n  <strong>Control your laptop's terminal from your phone.</strong><br>\n  Voice commands, multi-session tabs, real-time mirroring, remote access from anywhere.\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/version-1.0.0-blue?style=flat-square\" alt=\"version\">\n  <img src=\"https://img.shields.io/badge/node-%3E%3D20.0.0-brightgreen?style=flat-square&logo=node.js\" alt=\"node\">\n  <img src=\"https://img.shields.io/badge/tests-103%20passing-brightgreen?style=flat-square\" alt=\"tests\">\n  <img src=\"https://img.shields.io/badge/vulnerabilities-0-brightgreen?style=flat-square\" alt=\"vulnerabilities\">\n  <img src=\"https://img.shields.io/badge/security%20audits-3%20passed-brightgreen?style=flat-square\" alt=\"security\">\n  <img src=\"https://img.shields.io/badge/LOC-3.8K-blue?style=flat-square\" alt=\"lines of code\">\n  <img src=\"https://img.shields.io/badge/license-MIT-blue?style=flat-square\" alt=\"license\">\n  <img src=\"https://img.shields.io/badge/platform-macOS%20%7C%20Linux%20%7C%20Windows-lightgrey?style=flat-square\" alt=\"platform\">\n  <img src=\"https://img.shields.io/badge/cost-%240-brightgreen?style=flat-square\" alt=\"cost\">\n</p>\n\n<p align=\"center\">\n  <a href=\"#quick-start\">Quick Start</a> •\n  <a href=\"#features\">Features</a> •\n  <a href=\"#how-it-works\">How It Works</a> •\n  <a href=\"#architecture\">Architecture</a> •\n  <a href=\"#security\">Security</a> •\n  <a href=\"#quick-start\">Quick Start</a> •\n  <a href=\"#why-termpilot\">Why TermPilot?</a> •\n  <a href=\"#contributing\">Contributing</a>\n</p>\n\n<!--\n  TODO: Add a demo GIF here for maximum visual impact.\n  Record with: iPhone screen record → convert to GIF\n  Show: login → type a command → voice command → switch tabs → mirror mode\n  Place the GIF with:\n  <p align=\"center\">\n    <img src=\"docs/demo.gif\" width=\"360\" alt=\"TermPilot demo\">\n  </p>\n-->\n\n---\n\n## Why TermPilot?\n\n**Your terminal shouldn't be tied to your desk.**\n\nYou're running a deployment, a long build, or a database migration. You step away — to grab coffee, to a meeting, to another room. Now you're stuck wondering: *Did it finish? Did it fail? Do I need to type `y` to confirm something?*\n\nOr you're on the couch and need to quickly SSH somewhere, restart a service, check logs. Your laptop is across the room. You have your phone in your hand.\n\n**TermPilot solves this.** One command, and your laptop's terminal is on your phone:\n\n- **Speak instead of type** — Say \"git status\" or \"docker ps\" instead of wrestling with a phone keyboard\n- **Full interactive terminal** — Not just output monitoring. Run vim, htop, interactive prompts — everything works\n- **Mirror what's already running** — Attach to existing tmux sessions and see exactly what's on your laptop screen, in real-time\n- **Access from anywhere** — One flag (`--tunnel`) gives you a public HTTPS URL. Works from cellular, coffee shop WiFi, anywhere\n- **No infrastructure needed** — No servers to deploy, no accounts to create, no subscriptions. It runs on your laptop and your phone's browser. That's it.\n- **Install in 5 seconds** — `npx @abhishekreddy31/term-pilot`. No build steps, no config files, no Docker.\n\nTermPilot is built for developers who want their terminal available wherever they are — without complexity, without cost, and without compromise on functionality.\n\n---\n\n## Quick Start\n\n```bash\n# Install and run (one command)\nnpx @abhishekreddy31/term-pilot\n\n# Or install globally\nnpm install -g @abhishekreddy31/term-pilot\nterm-pilot\n\n# With remote access from anywhere\nterm-pilot --tunnel\n```\n\nCredentials are written to `~/.termpilot/credentials`. Open the URL on your phone.\n\n### From source\n\n```bash\ngit clone https://github.com/Abhishekreddy31/TermPilot.git\ncd TermPilot\npnpm install\npnpm start\n```\n\n---\n\n## Features\n\n### Two Modes\n\n| Mode | What it does |\n|------|-------------|\n| **Independent Sessions** | Create fresh terminal sessions from your phone — like opening new Terminal.app windows |\n| **Mirror Mode** | Attach to existing tmux sessions running on your laptop — bidirectional real-time mirroring |\n\n### Core Capabilities\n\n- **Multi-terminal tabs** — Create, switch, and destroy terminal sessions\n- **Voice commands** — Speak commands, confirm, execute. Understands developer vocabulary (`\"git commit dash m\"` → `git commit -m`)\n- **Extra keys toolbar** — Esc, Tab, Ctrl, Alt, arrow keys, PgUp/PgDn, pipe, tilde — keys your phone keyboard doesn't have\n- **Touch scrolling** — Swipe to scroll through terminal history (5000 lines)\n- **Remote access** — Cloudflare Tunnel gives you a public HTTPS URL for free. Access your terminals from cellular, coffee shop WiFi, anywhere\n- **PWA installable** — Add to home screen for a native app experience. App shell cached for instant loading\n- **Zero cost** — No cloud servers, no paid APIs, no app store fees, no subscriptions\n\n---\n\n## How It Works\n\n```\nPhone (browser/PWA)                Your Laptop\n┌──────────────────┐              ┌──────────────────────┐\n│  xterm.js        │◄──WebSocket──│  Node.js Server      │\n│  Voice Input     │──────────────│  ├─ PTY Manager      │\n│  Extra Keys      │              │  │  └─ /bin/zsh      │\n│  Session Tabs    │              │  ├─ Tmux Manager     │\n│  Login Screen    │              │  │  └─ tmux attach   │\n└──────────────────┘              │  ├─ Auth (scrypt)    │\n         │                        │  └─ Cloudflare Tunnel│\n         │ (optional)             └──────────────────────┘\n         │\n    Cloudflare Edge\n    (free, auto TLS)\n```\n\n1. **Server starts** on your laptop, binds to `localhost:3000`\n2. **You log in** from your phone with the credentials from `~/.termpilot/credentials`\n3. **A terminal session** is created — the server spawns a real shell (bash/zsh) via a pseudo-terminal (PTY)\n4. **Everything you type** (keyboard, extra keys, or voice) goes over WebSocket → server writes to PTY\n5. **Shell output** flows back over WebSocket → xterm.js renders it on your phone\n6. **Mirror mode**: attach to existing tmux sessions for bidirectional mirroring — what you see on your laptop, you see on your phone\n7. **Tunnel mode**: Cloudflare proxies traffic so you can access from any network\n\n---\n\n## Architecture\n\n```mermaid\ngraph TB\n    subgraph Phone[\"Phone (Any Browser)\"]\n        PWA[\"PWA Client<br/>Preact + xterm.js\"]\n        Voice[\"Voice Input<br/>Web Speech API\"]\n        ExtraKeys[\"Extra Keys Row\"]\n    end\n\n    subgraph Network[\"Network Layer\"]\n        CF[\"Cloudflare Tunnel<br/>(optional, free)\"]\n    end\n\n    subgraph Laptop[\"Your Laptop\"]\n        HTTP[\"HTTP Server<br/>Auth + Static Files + CSRF\"]\n        WS[\"WebSocket Server<br/>Zod-validated JSON Protocol\"]\n        PTY[\"PTY Manager<br/>node-pty\"]\n        TMUX[\"Tmux Manager<br/>Mirror Mode\"]\n        Auth[\"Auth Service<br/>scrypt + sessions\"]\n    end\n\n    PWA <-->|\"WSS (encrypted)\"| CF\n    Voice -->|\"transcript\"| PWA\n    ExtraKeys -->|\"key data\"| PWA\n    CF <-->|\"localhost\"| WS\n    CF <-->|\"localhost\"| HTTP\n    HTTP --> Auth\n    WS --> PTY\n    WS --> TMUX\n    WS --> Auth\n```\n\n### WebSocket Protocol\n\n```mermaid\nsequenceDiagram\n    participant C as Client (PWA)\n    participant S as Server\n\n    C->>S: POST /api/auth/csrf\n    S-->>C: {csrfToken: \"...\"}\n    C->>S: POST /api/auth/login + X-CSRF-Token\n    S-->>C: {token: \"abc123\"}\n\n    C->>S: WebSocket /ws\n    S-->>C: Connection open\n    C->>S: {type: \"auth\", token: \"abc123\"}\n    S-->>C: {type: \"auth_ok\"}\n\n    C->>S: {type: \"create\", cols: 80, rows: 24}\n    S-->>C: {type: \"session_created\", sessionId: \"uuid-1\"}\n    S-->>C: {type: \"output\", sessionId: \"uuid-1\", data: \"$ \"}\n\n    C->>S: {type: \"input\", sessionId: \"uuid-1\", data: \"ls\\n\"}\n    S-->>C: {type: \"output\", sessionId: \"uuid-1\", data: \"file1 file2\\n$ \"}\n\n    Note over C,S: Mirror Mode\n    C->>S: {type: \"tmux_list\"}\n    S-->>C: {type: \"tmux_sessions\", sessions: [...]}\n    C->>S: {type: \"tmux_attach\", sessionName: \"dev\"}\n    S-->>C: {type: \"tmux_attached\", sessionId: \"tmux:dev\"}\n```\n\n---\n\n## Project Structure\n\n```\ntermpilot/\n├── packages/\n│   ├── shared/                     # @termpilot/shared\n│   │   └── src/\n│   │       ├── protocol.ts         # Binary message types + encode/decode\n│   │       ├── schemas.ts          # Zod validation (session, tmux, input, resize)\n│   │       └── index.ts\n│   ├── server/                     # @termpilot/server\n│   │   └── src/\n│   │       ├── cli/cli.ts          # CLI entry point (--port, --tunnel, --help)\n│   │       ├── app.ts              # HTTP + WebSocket server + message routing\n│   │       ├── terminal/\n│   │       │   ├── pty-manager.ts  # PTY lifecycle, output buffering, idle sweep\n│   │       │   ├── tmux-manager.ts # tmux list/attach/detach/create/kill\n│   │       │   └── safe-env.ts     # Environment variable allowlist\n│   │       ├── auth/\n│   │       │   └── auth-service.ts # scrypt hashing, sessions, rate limiting\n│   │       └── tunnel/\n│   │           └── tunnel-manager.ts\n│   ├── client/                     # @termpilot/client (Preact PWA)\n│   │   └── src/\n│   │       ├── components/         # App, Login, TerminalView, ExtraKeys, VoiceInput\n│   │       ├── services/           # API client, WebSocket client, Voice service\n│   │       └── styles/global.css\n│   └── e2e/                        # Playwright (future)\n├── scripts/build-publish.js        # esbuild bundler for npm publishing\n├── LICENSE                         # MIT\n└── package.json                    # npm package config with bin entry\n```\n\n---\n\n## Security\n\nTermPilot underwent three full security audits. Current posture: **0 critical, 0 high, 0 medium vulnerabilities.**\n\n| Layer | Protection |\n|-------|-----------|\n| **Authentication** | scrypt (N=16384) password hashing, timing-safe comparison, 256-bit session tokens |\n| **Sessions** | Server-side session store, 30-min idle timeout, 8-hour absolute timeout, periodic cleanup |\n| **CSRF** | Token-based protection on all POST endpoints |\n| **WebSocket** | Token sent as first message (never in URL), 10s auth timeout, per-IP rate limiting |\n| **Authorization** | Session ownership enforced — can only interact with your own terminals |\n| **Transport** | Cloudflare Tunnel provides automatic TLS. Default bind to localhost only |\n| **PTY isolation** | Environment variable allowlist prevents server secret leakage |\n| **Input validation** | All WebSocket messages validated via Zod schemas |\n| **Headers** | CSP, X-Frame-Options DENY, X-Content-Type-Options nosniff, Referrer-Policy no-referrer |\n| **Rate limiting** | Login: 5 attempts/15min per IP. WebSocket auth: 10 attempts/min per IP |\n| **Connection limits** | Max 20 concurrent WebSocket connections, 64KB message size limit |\n\n---\n\n## Voice Commands\n\nSpeak naturally. TermPilot post-processes transcripts for developer vocabulary:\n\n| You say | Terminal gets |\n|---------|-------------|\n| \"git status\" | `git status` |\n| \"git commit dash m hello\" | `git commit -m hello` |\n| \"ls pipe grep test\" | `ls \\| grep test` |\n| \"cd tilde slash projects\" | `cd ~/projects` |\n| \"pseudo apt install node\" | `sudo apt install node` |\n| \"dock her ps\" | `docker ps` |\n\nSupports 30+ symbol mappings (dash, pipe, tilde, ampersand, brackets, etc.) and common command corrections.\n\n---\n\n## CLI Options\n\n```\nterm-pilot [options]\n\nOptions:\n  --port <port>    Port to listen on (default: 3000)\n  --host <host>    Bind address (default: 127.0.0.1)\n  --tunnel         Enable Cloudflare Tunnel for remote access\n  --help, -h       Show help\n  --version, -v    Show version\n\nEnvironment variables:\n  PORT                 Server port\n  HOST                 Bind address\n  TUNNEL=1             Enable tunnel\n  TERMPILOT_PASSWORD   Set a fixed password\n```\n\n---\n\n## Testing\n\n```bash\npnpm test          # Run all 103 tests\npnpm test:watch    # Watch mode\npnpm test:coverage # With coverage\n```\n\n| Package | Tests | Coverage |\n|---------|-------|----------|\n| `@termpilot/shared` | 24 | Protocol encode/decode, Zod schema validation |\n| `@termpilot/server` | 70 | PTY lifecycle, auth, rate limiting, CSRF, WebSocket integration, tmux mirror mode |\n| `@termpilot/client` | 9 | Voice post-processing, symbol mapping |\n| **Total** | **103** | |\n\n---\n\n## Tech Stack\n\n| Component | Technology | Why |\n|-----------|-----------|-----|\n| Server | Node.js + TypeScript | Native PTY support via node-pty |\n| Terminal backend | node-pty | Powers VS Code's terminal |\n| WebSocket | ws + perMessageDeflate | Fast, compressed real-time communication |\n| Validation | Zod | Runtime type safety on all messages |\n| Client | Preact (3KB) + xterm.js | Minimal bundle, industry-standard terminal |\n| Build | Vite + esbuild | Fast builds, PWA support, npm bundling |\n| Voice | Web Speech API | Free, built into Chrome/Safari |\n| Remote access | Cloudflare Tunnel | Free, automatic TLS |\n| Auth | Node.js crypto (scrypt) | Zero dependencies |\n| Testing | Vitest | Fast, ESM-native |\n\n---\n\n## Platform Support\n\n| Platform | Independent Mode | Mirror Mode (tmux) | Tunnel |\n|----------|-----------------|-------------------|--------|\n| macOS | Full | Full | Full |\n| Linux | Full | Full | Full |\n| Windows + WSL | Full (PowerShell) | Full (via WSL) | Full |\n| Windows (no WSL) | Full (PowerShell) | Not available | Full |\n\n> **Windows users**: Mirror mode routes through WSL automatically. Just install tmux inside WSL:\n> ```bash\n> wsl --install          # Install WSL (if not already)\n> wsl sudo apt install tmux  # Install tmux inside WSL\n> ```\n\n---\n\n## Contributing\n\nContributions are welcome. Please:\n\n1. Fork the repo\n2. Create a feature branch (`git checkout -b feat/my-feature`)\n3. Write tests for new functionality\n4. Ensure `pnpm test` passes\n5. Submit a pull request\n\n### Development\n\n```bash\npnpm install\npnpm dev          # Server + client with hot reload\npnpm dev:server   # Server only\npnpm dev:client   # Client only (Vite HMR)\npnpm test         # Run all tests\npnpm run build    # Build all packages\n```\n\n---\n\n---\n\n<p align=\"center\">\n  <strong>If TermPilot is useful to you, consider giving it a star.</strong><br>\n  It helps others discover the project.\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/Abhishekreddy31/TermPilot/stargazers\">\n    <img src=\"https://img.shields.io/github/stars/Abhishekreddy31/TermPilot?style=for-the-badge&logo=github&label=Star%20on%20GitHub&color=yellow\" alt=\"GitHub stars\">\n  </a>\n</p>\n\n---\n\n## License\n\nMIT — see [LICENSE](LICENSE)\n","readmeFilename":"README.md"}