{"_id":"@neoline/hostbridge","_rev":"37-4c161ecfc6ba1780b3f388e94558f475","name":"@neoline/hostbridge","dist-tags":{"latest":"2.4.0"},"versions":{"0.2.0":{"name":"@neoline/hostbridge","version":"0.2.0","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@0.2.0","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"3a4cf6894767bf12e0a8249f50dd389d3287747a","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-0.2.0.tgz","fileCount":17,"integrity":"sha512-9sQFq2gfbhJiwFYJ6fDuZF84zZ1Ws+1N6BVqs6He3hZESpkp+ckx0Px9TbdKfV49TSQIuXlzAf50TZAp+4kbeg==","signatures":[{"sig":"MEQCIA0nEU2VCcNNeUWhJzc08Zznca05EMocgq561QY6BaPCAiAOE7Suw7caCiDlaKfqC7wOPuNyOg/Z9Ii2NFk77j1ZxQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":115798},"type":"module","engines":{"node":">=18"},"scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_0.2.0_1782701848141_0.5290312451249031","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@neoline/hostbridge","version":"0.2.1","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@0.2.1","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"6cae6c34aaddc9e66dc2402d554217dd2eec764d","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-0.2.1.tgz","fileCount":17,"integrity":"sha512-jfXvKEfygUjYNYV/QPVbBpgCX5NxyW5Z4bCn62jq5rKjrJnDsIHs5F5hZAO1Tyk8SvjX3n87CZFss9x+Wr9GIQ==","signatures":[{"sig":"MEQCIEkT27r6KWvVdnjg0cUG00Hnsf965W1qpM2hdiAjUBzOAiBTcmA8GGHAP4WbJk1/vuL0o4oKg+9+jqiVMPGc+a0esA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116467},"type":"module","engines":{"node":">=18"},"scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_0.2.1_1782703968083_0.5421818484282503","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@neoline/hostbridge","version":"0.2.2","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@0.2.2","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"fa5443bffdb937e9da480f2adc741977653b21ea","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-0.2.2.tgz","fileCount":17,"integrity":"sha512-ip7zhw64SJaNgy3zyBN7mhvK+yPEIjsNEgEsyss6/GsiXghv8w+ZqMHA3MP6JBvR5B2S15vDaaBIOrOXv6Ogfw==","signatures":[{"sig":"MEYCIQDcD6H0gYVteM30UJvHorHiqpL4UnbAGmCkE0gkGqCzvQIhALJ1GaSJwom4LPdIN68p7tYgWh06OUOBrbSuF5SN8VPJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":116776},"type":"module","engines":{"node":">=18"},"scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_0.2.2_1782705683572_0.4409796108504158","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@neoline/hostbridge","version":"1.0.0","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@1.0.0","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"e12a40a627e60a2f9e313f75ed86b7b57b398aba","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-1.0.0.tgz","fileCount":18,"integrity":"sha512-JggtV5bd2u0fy/M+eVfKA8z+XvkiZBgLCiYXFZjr+1k+0gixoN8P3PT27WVVFgALMW7kEJGZtYy0i1ho1b2UGA==","signatures":[{"sig":"MEYCIQD6bDGRJYHoIPVYmJzjOr57IAssxZIEc/PMWaPdoT/XgwIhAOr40cwVBQFFzlKZEdBFNJS6MjIRGwDh72/9QD0c6VMM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":150888},"type":"module","engines":{"node":">=18"},"gitHead":"c55d5bb2a03db1dc401093fa75c72e9a60bd8c3f","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_1.0.0_1782782914066_0.46870561685015755","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@neoline/hostbridge","version":"1.1.0","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@1.1.0","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"e579ac839b247b82d4f37f862678ea20e8636f2f","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-1.1.0.tgz","fileCount":18,"integrity":"sha512-yW1h3Gw5vYZ2FPQVUalRQ8VaSdcnrGrqoP+oO5orevISuhteevSd9wbFcPtleIRWvC9DVSwLIrCoBNG6qZaBMw==","signatures":[{"sig":"MEUCID+UVbAjBPBPTfiT00JlnEV3bODVR9xaLwe9AjVSOnbYAiEA2YLnyu/LC9HMsCgOizLPMce0neMEwV9WThD+nG5L3O4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":155068},"type":"module","engines":{"node":">=18"},"gitHead":"c55d5bb2a03db1dc401093fa75c72e9a60bd8c3f","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_1.1.0_1783050074862_0.9140352261971434","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"@neoline/hostbridge","version":"1.3.0","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@1.3.0","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"0a1118c4e4ff8b0ab02fe4758212588fdb67d25a","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-1.3.0.tgz","fileCount":18,"integrity":"sha512-AAZg37hTUzz2ez5+X+87h5eFDJhoIbFPLwuqHzjPT+Wj/ZBrECTsjRy/MSRpyNgOGimIj2jE/ScIc/Zu88FpIA==","signatures":[{"sig":"MEUCIFuthIYh7csrfkYb3IpExarbcujruaoECiLKPe/Zqg9OAiEAlPFa8Jwhl1gwFTfdRfavV3EZgxucvI0Orxziq6ISOs8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":156591},"type":"module","engines":{"node":">=18"},"gitHead":"c55d5bb2a03db1dc401093fa75c72e9a60bd8c3f","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_1.3.0_1783072778637_0.8137636899537697","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"@neoline/hostbridge","version":"1.4.0","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@1.4.0","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"910bcb4f4732f54fb8029931d5b38eb8d04c2f5f","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-1.4.0.tgz","fileCount":18,"integrity":"sha512-9y/90wH8RM9ndYrWge+S7q8/YAQX/8l/cWkhOu0FzbKuGCsY6rRxxJDszi75eShadxYr0Xs3k4T0q2ZqfLZrMg==","signatures":[{"sig":"MEUCIGugA5D2xFsPncV6G/DVPPET/NgV99jFypEmE+PbHFeYAiEA/ngzcS5noWOwDfDvBSir1eHetfO6zJrstt9gd4VNhfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157704},"type":"module","engines":{"node":">=18"},"gitHead":"c55d5bb2a03db1dc401093fa75c72e9a60bd8c3f","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_1.4.0_1783081344891_0.3794130853563231","host":"s3://npm-registry-packages-npm-production"}},"1.4.1":{"name":"@neoline/hostbridge","version":"1.4.1","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@1.4.1","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"b8eba8504f25b421d8ad9a7ce6ce5a2dfa057ba8","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-1.4.1.tgz","fileCount":19,"integrity":"sha512-q8KE2A9p0EsPRf3vzUb+HoXDDDK2OOX5OeUX5qERnRPsGFBZ7POS2u5zX+tEspOjEVmhU3+WKPPaF/317XVqkA==","signatures":[{"sig":"MEQCIE5P8R4ZSeu/dM04NOCvKe0QZGZLcndDjL1Mgg7Fi8xzAiA7wTJ2VasnrQMMi1wY9oca+cMbdXaqe57DFMj6NhbMNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189164},"type":"module","engines":{"node":">=18"},"gitHead":"c55d5bb2a03db1dc401093fa75c72e9a60bd8c3f","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_1.4.1_1783091554298_0.8800710035000341","host":"s3://npm-registry-packages-npm-production"}},"1.4.2":{"name":"@neoline/hostbridge","version":"1.4.2","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@1.4.2","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"b7f689fd168b9e7ad2648be9f3315ca623a461c6","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-1.4.2.tgz","fileCount":19,"integrity":"sha512-iOO2sNpbonuzgFBrB+TcPLbWJCvk32sWOpTsB1EWz7QS1q0MJhpo4A/a1njxqArXRH96uw/ulyaztuRq8+6lGw==","signatures":[{"sig":"MEQCIFJFinsS+zlRecchYYf3UXcR6e4/n809EYDJHT3PBJ5lAiAkbTbh8wogfDBD/15T4IULx/Yl4Oh4E4EX/usnSxz5Lw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189280},"type":"module","engines":{"node":">=18"},"gitHead":"c55d5bb2a03db1dc401093fa75c72e9a60bd8c3f","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_1.4.2_1783585402599_0.3976054391530661","host":"s3://npm-registry-packages-npm-production"}},"1.4.3":{"name":"@neoline/hostbridge","version":"1.4.3","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@1.4.3","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"7399417e77bd7059701d9262005df3bdc15a44c2","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-1.4.3.tgz","fileCount":19,"integrity":"sha512-aGrbbgl1YwWHHsJW5789fYsehGPlz/qQDedB/qIj/28g5GO45xMH6FKxD939upnzuvSCF9IRVlC+20UiEMOxOg==","signatures":[{"sig":"MEYCIQDl46GC6dCgawqL7KCzM8MrNDh46veDnDqNVWnuCk0FOAIhANKOkJ9HdYvc6oP5aRZ4X1kmOISdDSsrFvM595i9xe9F","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189483},"type":"module","engines":{"node":">=18"},"gitHead":"c55d5bb2a03db1dc401093fa75c72e9a60bd8c3f","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_1.4.3_1783589653413_0.5800734348250196","host":"s3://npm-registry-packages-npm-production"}},"1.4.4":{"name":"@neoline/hostbridge","version":"1.4.4","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@1.4.4","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"5e422039cbde9c12bedd5de9a89c9226dcfb8fb1","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-1.4.4.tgz","fileCount":19,"integrity":"sha512-/RRLGdNDn0NKBVq+0ERWCvHrjIZu8LEjPFGLBo3kF7eXZCLPEr7ZIV9CbkscdnFzDplPHQfyyQqaW3bNH2uw8Q==","signatures":[{"sig":"MEQCIEphtiHgThsr9RJPyXRykp/RkjKpcC3Zh4CIQmIgTfBBAiBRDcF9QBlAFMPkYuIId2XjBmwcn5oFd/I89PrE8DouPw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":189740},"type":"module","engines":{"node":">=18"},"gitHead":"c55d5bb2a03db1dc401093fa75c72e9a60bd8c3f","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_1.4.4_1783655264725_0.8922980682725794","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"name":"@neoline/hostbridge","version":"2.0.0","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.0.0","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"6c0722b97c0b0aa92adae430ce6c93f457129143","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.0.0.tgz","fileCount":28,"integrity":"sha512-wynSxDIPGDRvOf1smTUqAIvhH5lAfaM9pq1lky9qt+Uqb+rPQy3ns9/kDJ10cvLmdzVH0FrvC5RN+FG7xkYs4Q==","signatures":[{"sig":"MEUCIEwMP4IC+45IovU57XXsiAHan+JgE0XdYRUxCRV7ynQQAiEA0Oqghc0AaCrtTf8c2XdRmjbrlrC+lcGG16jla7J8CKI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":201704},"type":"module","engines":{"node":">=18"},"gitHead":"935e81a7eeb81290a208597f2bb191862a0e69ce","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.0.0_1783751547010_0.4404523856416127","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"@neoline/hostbridge","version":"2.0.1","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.0.1","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"f35772a84d5db37f082967160cd5cb7d7f7a0dd9","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.0.1.tgz","fileCount":28,"integrity":"sha512-zq1RY+C49gTiGH9KyLeTT0Mj+MmPr+wKMgGDP8F6/7xHKTLir8G7iDzX0eJzZkfYEc0XEcSadn5P30Oa0UPI2g==","signatures":[{"sig":"MEUCIDsqjQO4WxziOk+zByfFjwLVIEcRFQmPz59ZC9luB5A5AiEA8PSL/OLLS3ZcwNWazKh8WMv22C1cccSau936lBRQ4/I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207654},"type":"module","engines":{"node":">=18"},"gitHead":"c8fefbddfa3181886bc1481a792d808e4afcc721","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.0.1_1784018326439_0.957902250236575","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"@neoline/hostbridge","version":"2.0.2","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.0.2","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"76b88a5cf9010fbe1392bc985e52e399cfa24304","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.0.2.tgz","fileCount":28,"integrity":"sha512-uCL8pgwKFupiTQe5r+W+efQovIHwf5Wc8cd/IrOv4+buqtgHXQD0X8obRjkG/cKw1dKlneaZSSFvIGxzEKGW8Q==","signatures":[{"sig":"MEUCIQCeHbb7hsHrxCxAe/SYHBA1dDJeIKDxedRhxHbf3Y+6xAIgBW4W2KFecwiB3jxmZu7AzIBTjPL8sh89MoUqkIU39mM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":207857},"type":"module","engines":{"node":">=18"},"gitHead":"ead9bf47e78233e769ca3d53e81f464548a97069","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.0.2_1784385254782_0.9701105406265715","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"@neoline/hostbridge","version":"2.0.3","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.0.3","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"25a13ff63ec0ef86a9c400ca34886cd7d0469739","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.0.3.tgz","fileCount":28,"integrity":"sha512-ALk0WXuQSH01qfYlkqRNsu+K2A44fQuUiYgUtyCazSLBgVYWbQe85xWkgtLnluieRkPy22W5DNYllb8dX2k2NQ==","signatures":[{"sig":"MEQCICRo98IoxgNZDgdEpW8lDnQ4t9Z97eqZ8o+/EOZLONf0AiA47LdegUt1FDIm+0ni73XTqbndPvEfW7PQ/2kmbfyyUQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":221448},"type":"module","engines":{"node":">=18"},"gitHead":"4f06b4cb42ab89ad8bbd8cb2acc4ab645447c7eb","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.0.3_1784955658090_0.7797859548115886","host":"s3://npm-registry-packages-npm-production"}},"2.0.4":{"name":"@neoline/hostbridge","version":"2.0.4","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.0.4","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"981ea2d367183024eb594d9a5a93e00f40337f30","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.0.4.tgz","fileCount":35,"integrity":"sha512-kVh9Zz/ZOI8JRXNfIyoQ/E+xKlLrun93CN3FvGIWkNlm2XX1kI1ulPmTMEMgEIEUlR+6qZfMMsmm6AC/rNNWrQ==","signatures":[{"sig":"MEUCIQCiUKZ4IfC92IysqZkEa8Ezce800pEuDyuA1ifyaq3mGwIgZV3bxanXc36jTDvyztaEgW7ul+w7q8KL7pQ1hBcyRdc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":301394},"type":"module","engines":{"node":">=18"},"gitHead":"a8cf45bdcda296f2bb574e5ec764c9f334381115","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.0.4_1784983041567_0.9766923884053631","host":"s3://npm-registry-packages-npm-production"}},"2.0.5":{"name":"@neoline/hostbridge","version":"2.0.5","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.0.5","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"33c7ab1b5c2945008bf26efe1b2081a24d914b92","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.0.5.tgz","fileCount":49,"integrity":"sha512-qTgQy43SfZeGRqErIc3Zo3jLufbogmCUCFdIuiebutWN96kxFSZJZwxjjtSNloHj/DfLm7I5EPABWuavx6VXoQ==","signatures":[{"sig":"MEQCIErpEyrKHGFVONQFbceYhuQiAOA0f4wzuHwdnNuMVzI2AiBGsQOvgobcN3co623FmUkMVTR+rB1x3RK9w/S9SV6Y8g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":538505},"type":"module","engines":{"node":">=18"},"gitHead":"c22bf9c0d3f3679467844a66093c68009967c133","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.0.5_1785077477111_0.9356145896839916","host":"s3://npm-registry-packages-npm-production"}},"2.0.6":{"name":"@neoline/hostbridge","version":"2.0.6","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.0.6","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"cb8101608cb8213287eeed4e22d4f6fdaeff5643","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.0.6.tgz","fileCount":50,"integrity":"sha512-VAA/ANC8VWNk8vRWU/PwqvBqOS3/RRUmJWmvKO7uH1DgHMnv3Stypvxz5I2ICPopB2wTi47wwDUvs3wmxEiUuw==","signatures":[{"sig":"MEQCIDx2qgwO3v04O0AUKar4ibmyP+yhBQw3TGSEXFHxOgICAiAENEqnXnXdip4VnWRnrvS5egEqtrQ9C961O6CGT+ttjA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":545148},"type":"module","engines":{"node":">=18"},"gitHead":"d578b2d52433611d829987b0eb840487e2f6cceb","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.0.6_1785118985606_0.5707314148553266","host":"s3://npm-registry-packages-npm-production"}},"2.0.8":{"name":"@neoline/hostbridge","version":"2.0.8","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.0.8","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"741d714ada53e09c9767bc6b37c14f50d958ca9d","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.0.8.tgz","fileCount":50,"integrity":"sha512-IZQRcFdwjZnO2Z1Ioh3riRdavaAeuevJvC3Svs7K2EpBm3PhxaYR1bscVoxMM7+LFF4x/EEXF4H9p5U6Vvf5xQ==","signatures":[{"sig":"MEUCIGRjGZ6p0Zkw7Bb+aLQUoKxUBut+2IKDuuxZC3Qd6jKPAiEA7Hpz1fnJdZvf0qB/bxGby79R6y/WPbGmIrqkXQozJ8w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":551502},"type":"module","engines":{"node":">=18"},"gitHead":"7e959cac97a4cbfd7490d58efd47573b29024cf8","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.0.8_1785121056991_0.7562995911854424","host":"s3://npm-registry-packages-npm-production"}},"2.0.9":{"name":"@neoline/hostbridge","version":"2.0.9","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.0.9","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"b63428e480ebee547093f766eefc3cdecca1375d","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.0.9.tgz","fileCount":53,"integrity":"sha512-SKRFpHY8BNofUQkkeJK8pjIwxp3lNS2gFUS4x18hZIT8WpXJ8FF3i0y4bMoDBrLL+Q81nIyIIja8X2akBVNoxA==","signatures":[{"sig":"MEUCIQClKmGQZqxfcN41WjwApJNg8pXXB0KfvGr3uMuvKq96NQIgDF9bynKk3cPyuvPl9DCSWYfCjQRwi9DTYSHSa0w/GmI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":607779},"type":"module","engines":{"node":">=18"},"gitHead":"f8459981577c92ab97e0fcd4eea395b8b0c10093","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.0.9_1785128416745_0.5691395849638587","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@neoline/hostbridge","version":"2.1.0","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.1.0","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"eba82f625b1cb4bdce6957b9b2d1c73ebd81cd0d","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.1.0.tgz","fileCount":54,"integrity":"sha512-VAqidf9kxs5FDmnLIS6XqK3150uIDv+rmmwEoV5xaG2O7CzYfczWjGVeEHpYMEDKvTIZuEen75kIpVx+PvTizQ==","signatures":[{"sig":"MEUCIFQMXaS4CoVG0qtvjJFBT12TdbBBMc1mfZ1Kbd+j7qi7AiEA+7sR/kuI+G0hi2JentgW8Sx7ToZO1Yk4DKhRUyi7y9k=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":622894},"type":"module","engines":{"node":">=18"},"gitHead":"224be143b5e9590e40ce3a33248bf25b076785b2","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.1.0_1785135071205_0.44924961868270197","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"@neoline/hostbridge","version":"2.1.3","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.1.3","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"db14d52dae0616de8225b979a0a30e2f4373ba18","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.1.3.tgz","fileCount":58,"integrity":"sha512-oBFijSotUpZelJBpzcAHuiCyESa1SQdaL0xbhC1dMGoYBt8HcGNpM9nvQbBOJ8mb9jElISbkstOJr4IBXVE3DQ==","signatures":[{"sig":"MEUCIEwtWhhM+w+J6eE2ym21GWhonnu0zUzx6Evh1mE3wtEVAiEAtgH3vW4TA/bM1IlMGv8E/U/+vOJcVxgBpSduu/kLYHs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":705047},"type":"module","engines":{"node":">=18"},"gitHead":"e3ad994851783091b502b9a890a3894fc71ee68e","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.1.3_1786698975604_0.7556420500579786","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@neoline/hostbridge","version":"2.2.1","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.2.1","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"509049809c94430120ade56549fd8b349216d3c6","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.2.1.tgz","fileCount":59,"integrity":"sha512-DRpor1PlbH8pY2/DlaLW2NddcEq4WQwGcWAwFRF6q/XBzLVlu+2CFhyYn9FyriiHwKA7lAkOvgIYWoKdq9LLnQ==","signatures":[{"sig":"MEUCIQCnwZL8+tqamqmFnUEkOlmMZSZNidzaI0QL7gTzaIMhcwIgVs1SrmmyLToSVbpiJ8qKxczJ+c6dF09x3thupKA+xTk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":726634},"type":"module","engines":{"node":">=18"},"gitHead":"0be6871a4f1da16f2dc147f42ed95b778c889ea2","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.2.1_1787021084030_0.5480624139629269","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@neoline/hostbridge","version":"2.2.2","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.2.2","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"9a62d3e38dfd3e2479ff7b0a8511c13b92e2a375","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.2.2.tgz","fileCount":59,"integrity":"sha512-sS2brROat5o0epSrpYaUD9TFCk+vhcgiRJbwbGX7eTS40W6muU3LPf8u+fm51CvHZ9psNjzmL+Yx6gnoAO1rfg==","signatures":[{"sig":"MEQCIBXBm9YfdcXVYxWTgl7VPHANSM8GezxIQjxoQ9HBs5fHAiAKZeFuL5LLUU+h4OvDONSwdL14tz2BDxt4FqgZBhqPtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":726634},"type":"module","engines":{"node":">=18"},"gitHead":"72fd233199ad191beeb91e85c2ca709ea9fc5105","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.2.2_1787021755933_0.14686835612945193","host":"s3://npm-registry-packages-npm-production"}},"2.3.0":{"name":"@neoline/hostbridge","version":"2.3.0","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.0","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"948290eecc88e41fa0660b2e4126a26de446b1f7","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.0.tgz","fileCount":59,"integrity":"sha512-jy4Fn7h20lPcmM2x2IOJxfQdixCuKg2pr07j+xOQIYGSBCCEf30Z3QpiSrLsngQtmc21jfR92TIKZxtfImiGow==","signatures":[{"sig":"MEQCIFrsC/JxJ48TjJ0rU+HJysYfxImn0cfA8ri4Dj+Urm45AiA+mUpscDe7AGg05LEsQx5HO5ryuH0/UZJ7Ziz06Uc2PA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":728841},"type":"module","engines":{"node":">=18"},"gitHead":"72fd233199ad191beeb91e85c2ca709ea9fc5105","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.0_1787035303071_0.6509125156943776","host":"s3://npm-registry-packages-npm-production"}},"2.3.1":{"name":"@neoline/hostbridge","version":"2.3.1","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.1","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"0add29503d37e91572bc3ef2147a0ab0eb34c53a","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.1.tgz","fileCount":60,"integrity":"sha512-TAT/7MJYS/W38gs50sfM9uMKgrbTL2+KiZkqrUnMGiToxwAXAHvqLNZB+vl2PvoybkOvAkTobE/Sqib4SNJ43w==","signatures":[{"sig":"MEUCIQC+gjWVYpvOLOams2GldBVRrLvz0QvA8TCpK/AqHy0DiwIgGErxGAzobETtKtv5qocCUGv0kk/egTg0E0etoYL4tJY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":756275},"type":"module","engines":{"node":">=18"},"gitHead":"72fd233199ad191beeb91e85c2ca709ea9fc5105","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.1_1787102561504_0.9982079853142629","host":"s3://npm-registry-packages-npm-production"}},"2.3.2":{"name":"@neoline/hostbridge","version":"2.3.2","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.2","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"0f611fb6d357ffcebe0454544483c39c743025be","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.2.tgz","fileCount":60,"integrity":"sha512-kV4tTMF6oKyO1OX2ueQDqfVm0a+C4QlPC2bU6KwNxzj/PfXskxQ64VCrFE5/+gdLLV0msHZYTbOkGTSMmOY5MA==","signatures":[{"sig":"MEUCIQD3DZaNrDir2F4nTBfiql8xARp/kVYqLuereCCJ8otEiQIgRyvG4qJEXBhBdESTHC8HGPzlsSuQPSLKKvTNS7Y1tfU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":761562},"type":"module","engines":{"node":">=18"},"gitHead":"72fd233199ad191beeb91e85c2ca709ea9fc5105","scripts":{"test:node":"node --test"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.2_1787190642535_0.37048328360670113","host":"s3://npm-registry-packages-npm-production"}},"2.3.3":{"name":"@neoline/hostbridge","version":"2.3.3","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.3","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"09dbae58260b01109874446c32c7d33e6a5d4b5f","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.3.tgz","fileCount":60,"integrity":"sha512-sFVUeRe63TPuHbcq/HJpBGgRRrjkLOXvnCNVmAMVN9qyLr2FkHGvd7MK5EOPR8sFsQhI2KVBGuaF8Aoz8W7xmQ==","signatures":[{"sig":"MEYCIQDTLCBzphfEaVwFyMfL+YMLg3G/zzHgl33PygB9SsJquQIhAKOygt+ZWkvtBLLd5C8BTfoKu2GfeaRjTz/JppZ/P/D0","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":766238},"type":"module","engines":{"node":">=18"},"gitHead":"046920e17d8ad40ec3aa0b6d80e8b4e298f471c0","scripts":{"test:node":"node --test","check:release":"python3 scripts/check_versions.py"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.3_1787212634890_0.3070638067199236","host":"s3://npm-registry-packages-npm-production"}},"2.3.4":{"name":"@neoline/hostbridge","version":"2.3.4","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.4","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"51ecab1b8615c77d68a1fecd9739f4222527a159","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.4.tgz","fileCount":60,"integrity":"sha512-NimafyvBoEOD3I63Igerykq2cmbhRbE8wBYg7Hk1LYUIT+6fatfvGkoHy5f3gmyGxlYcn7CPnzfArmym/x7yKQ==","signatures":[{"sig":"MEUCICyYtsE52RoLJ/eInUm79vHAKIw7dQNTJ9kqU3Tg61CUAiEAiPVPxvD8kNOp8c5/bG3oe/k9Y2hTqsPNe1i4G9hfOms=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":766175},"type":"module","engines":{"node":">=18"},"gitHead":"046920e17d8ad40ec3aa0b6d80e8b4e298f471c0","scripts":{"test:node":"node --test","check:release":"python3 scripts/check_versions.py"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.4_1787540557479_0.6461632411846385","host":"s3://npm-registry-packages-npm-production"}},"2.3.5":{"name":"@neoline/hostbridge","version":"2.3.5","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.5","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"0bf982b4bcb7a596d9e6aa9b3b472af07f6e7c00","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.5.tgz","fileCount":62,"integrity":"sha512-qWoTXjN8uOf1ksjontzPH7kDO+M00DE5oDORCcbUCHld8Yirq69wuV3+ILS5xq/mZcQJKvH53gmbBcfUuHIekQ==","signatures":[{"sig":"MEYCIQCeI7aP/p4damAWR4M9q9Rd02Bn4lOUNgzNYMBCIQCLFwIhAKH4Kts0z/emsmuU0nNNJOKpCwo3ajNfmwEvO/gXZGhO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":803413},"type":"module","engines":{"node":">=18"},"gitHead":"6652225ad5c09fb711b5fdc9a2c955f0d46a9f55","scripts":{"test:node":"node --test","check:release":"python3 scripts/check_versions.py"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.5_1787794182213_0.4545677624984108","host":"s3://npm-registry-packages-npm-production"}},"2.3.6":{"name":"@neoline/hostbridge","version":"2.3.6","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.6","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"7d3ff25ee5d1ed935de32a2607e68ee14f29dd3d","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.6.tgz","fileCount":62,"integrity":"sha512-YKLtcXmaJg/r+oyLDVRXgKITUnUVGuorSzwn63/pJz6sJMJQ5kS+lqQNTIm1ju0RBCMZbGINXsbG78UWuPdZhQ==","signatures":[{"sig":"MEYCIQDnriqi/1QNEyH8tehsBZSIbxx8jgq52oe1dsnoUvtn2QIhALHXwRTJ/mRSAGwMWoaOWVIgjns2yFEaqNt/MGW5xeOG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":813832},"type":"module","engines":{"node":">=18"},"gitHead":"6652225ad5c09fb711b5fdc9a2c955f0d46a9f55","scripts":{"test:node":"node --test","check:release":"python3 scripts/check_versions.py"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.6_1787823315381_0.07120172336938002","host":"s3://npm-registry-packages-npm-production"}},"2.3.7":{"name":"@neoline/hostbridge","version":"2.3.7","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.7","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"8bda63edf9cea217243e190847f64bd06bf14db3","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.7.tgz","fileCount":62,"integrity":"sha512-xEqmFIWAFqIjz/5czmYGM/sXIv1VeVPJ0Ny49od6foCV3ZeJDjZH/ACcXV7vhKol3+mZsl89Qslk5Ka8pawYNg==","signatures":[{"sig":"MEUCIFOnkVcM56fOchC17YqojAcpiun0CpOtqjld7bjO7cAWAiEA9aLrVkQ8vmplipJzQQta0590149Q8GtG9hRDWrB99cU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":813835},"type":"module","engines":{"node":">=18"},"gitHead":"6652225ad5c09fb711b5fdc9a2c955f0d46a9f55","scripts":{"test:node":"node --test","check:release":"python3 scripts/check_versions.py"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.7_1787824051355_0.3360472482781678","host":"s3://npm-registry-packages-npm-production"}},"2.3.9":{"name":"@neoline/hostbridge","version":"2.3.9","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.9","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"2d7983c95d156ad61f390dd371908a13738aaa30","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.9.tgz","fileCount":62,"integrity":"sha512-f/Gw6vFyGqgvoxE05YS49ReKbWfhl7SmigjKClLCk+KhQiM9dMMKeYVLiCPKr7pV5jTSvyG1o4pZ3QJL/Wz52A==","signatures":[{"sig":"MEYCIQDv5PHIR5F+NVCqBQ7gIxdtlLjR17nig8rfkkvzA0HYhwIhAIQFTV/P3exmbCcecHduTvpsp4PQ+TIAo4ubNM4rQDaw","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":830868},"type":"module","engines":{"node":">=18"},"gitHead":"9f995a4d2ca36c74fd0b2ad645cd22a0d7778ada","scripts":{"test:node":"node --test","check:release":"python3 scripts/check_versions.py"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.9_1787881662770_0.06704462951564016","host":"s3://npm-registry-packages-npm-production"}},"2.3.10":{"name":"@neoline/hostbridge","version":"2.3.10","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"license":"MIT","_id":"@neoline/hostbridge@2.3.10","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"dist":{"shasum":"b5f6669e907eedc2e5b2f6923a18d1a16826b6bb","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.3.10.tgz","fileCount":62,"integrity":"sha512-DFu5Msv0mK5XKH4oHUHT81h8pNSbaL8ZFxkPg2qWgv7MPT+TgPuruy8Ugz6siJTG35DE+YqBu/fCLL6PEmqwOw==","signatures":[{"sig":"MEUCIGJi1L903w4kLRg/usnBcDo4MKmw4gBIkuRKv2Jaw7KwAiEAkD1IHt3n67aqmwe2KnWZN+fPLtZuQiyoyBCZ1YAHN8o=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":833841},"type":"module","engines":{"node":">=18"},"gitHead":"9f995a4d2ca36c74fd0b2ad645cd22a0d7778ada","scripts":{"test:node":"node --test","check:release":"python3 scripts/check_versions.py"},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"_npmVersion":"11.9.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","directories":{},"_nodeVersion":"24.14.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/hostbridge_2.3.10_1787886069479_0.9143941515279295","host":"s3://npm-registry-packages-npm-production"}},"2.4.0":{"name":"@neoline/hostbridge","version":"2.4.0","description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","type":"module","license":"MIT","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"homepage":"https://www.npmjs.com/package/@neoline/hostbridge","engines":{"node":">=18"},"bin":{"hostbridge":"bin/hostbridge.js","server-control-mcp":"bin/server-control-mcp.js"},"scripts":{"check:release":"python3 scripts/check_versions.py","test:node":"node --test"},"gitHead":"33763c379302a9a791f6165be19f1f1c5e1fa1e8","_id":"@neoline/hostbridge@2.4.0","_nodeVersion":"24.14.0","_npmVersion":"11.9.0","dist":{"integrity":"sha512-/+SZbd9qRJWJw/lscZEtFaMoSud1j057kNemrUg+pTF6VWTmbbjHuqWyOtdw5cSDQXG7IeCaGEo2yeaDS9evWg==","shasum":"40f885482f588970283d945b060f32d470735749","tarball":"https://registry.npmjs.org/@neoline/hostbridge/-/hostbridge-2.4.0.tgz","fileCount":62,"unpackedSize":889937,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCdHOe8YDDs9NsWJfZtXWHQYd46wLRh9FylCa0JIDcsKAIhAJLdt/xA7SfBAl8WKnc9y+LLLUTpVCk70ykk9VBlaiLW"}]},"_npmUser":{"name":"neo_line","email":"shengzhoukong@gmail.com"},"directories":{},"maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/hostbridge_2.4.0_1788143181022_0.2895032422151511"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-29T02:57:27.968Z","modified":"2026-08-31T02:26:21.371Z","0.2.0":"2026-06-29T02:57:28.273Z","0.2.1":"2026-06-29T03:32:48.226Z","0.2.2":"2026-06-29T04:01:23.702Z","1.0.0":"2026-06-30T01:28:34.215Z","1.1.0":"2026-07-03T03:41:14.996Z","1.3.0":"2026-07-03T09:59:38.776Z","1.4.0":"2026-07-03T12:22:25.031Z","1.4.1":"2026-07-03T15:12:34.487Z","1.4.2":"2026-07-09T08:23:22.732Z","1.4.3":"2026-07-09T09:34:13.568Z","1.4.4":"2026-07-10T03:47:44.855Z","2.0.0":"2026-07-11T06:32:27.155Z","2.0.1":"2026-07-14T08:38:46.611Z","2.0.2":"2026-07-18T14:34:14.973Z","2.0.3":"2026-07-25T05:00:58.224Z","2.0.4":"2026-07-25T12:37:21.702Z","2.0.5":"2026-07-26T14:51:17.260Z","2.0.6":"2026-07-27T02:23:05.771Z","2.0.8":"2026-07-27T02:57:37.145Z","2.0.9":"2026-07-27T05:00:16.867Z","2.1.0":"2026-07-27T06:51:11.369Z","2.1.1":"2026-07-28T01:29:10.652Z","2.1.3":"2026-08-14T09:16:15.777Z","2.2.1":"2026-08-18T02:44:44.181Z","2.2.2":"2026-08-18T02:55:56.126Z","2.3.0":"2026-08-18T06:41:43.223Z","2.3.1":"2026-08-19T01:22:41.662Z","2.3.2":"2026-08-20T01:50:42.682Z","2.3.3":"2026-08-20T07:57:15.026Z","2.3.4":"2026-08-24T03:02:37.668Z","2.3.5":"2026-08-27T01:29:42.413Z","2.3.6":"2026-08-27T09:35:15.533Z","2.3.7":"2026-08-27T09:47:31.529Z","2.3.9":"2026-08-28T01:47:42.928Z","2.3.10":"2026-08-28T03:01:09.721Z","2.4.0":"2026-08-31T02:26:21.197Z"},"license":"MIT","homepage":"https://www.npmjs.com/package/@neoline/hostbridge","keywords":["mcp","model-context-protocol","ssh","pty","remote-control","ai-agent"],"description":"HostBridge MCP server for persistent allowlisted SSH and shell sessions.","maintainers":[{"name":"neo_line","email":"shengzhoukong@gmail.com"}],"readme":"# hostbridge\n\nA local MCP server for AI agents to operate allowlisted interactive shells, usually SSH sessions. It keeps PTYs alive in memory, so an agent can open a session once, run quick commands, start long-running background jobs, and poll logs until completion.\n\nThis repo is portable: it ships with no personal server paths or built-in hosts. Each user declares their own connection targets in `~/.hostbridge/hosts.json` or a path set by `HOSTBRIDGE_HOSTS_FILE`.\n\n## Tools\n\n- `hosts_list` — show the connection targets loaded by the daemon.\n- `session_open(host_id, connect_timeout=30)` — open a persistent interactive shell for one configured host.\n- `sessions_list()` — list live sessions in the daemon.\n- `sessions_close_all()` — close every live session in one call; useful for shutdown and cleanup.\n- `command_run(session_id, command, timeout=60)` — run a foreground command and wait for completion.\n- `task_start(session_id, command)` — start a remote background job under `$HOME/.hostbridge/jobs/<task_id>` with private permissions.\n- `task_status(session_id, task_id, tail_lines=80)` — poll job state, exit code, and log tail.\n- `task_stop(session_id, task_id)` — terminate a running background job and reap its process.\n- `session_write(session_id, text)` — send a raw line for interactive edge cases.\n- `session_read(session_id, timeout=1.0, max_chars=20000)` — read available raw output after interactive writes.\n- `file_write_text(session_id, remote_path, content)` — write a UTF-8 text file through the active shell, up to 100MiB.\n- `file_read_text(session_id, remote_path)` — read a UTF-8 text file through the active shell, up to 100MiB.\n- `file_upload(session_id, local_path, remote_path)` — stream a local file as binary data, up to 100MiB.\n- `file_download(session_id, remote_path, local_path)` — stream a remote file as binary data, up to 100MiB.\n- `session_close(session_id)` — close a persistent session.\n\nEvery tool returns a structured payload with a stable lowercase `error_code`, such as `not_found`, `denied`, `remote_error`, `timeout`, or `internal`.\n\n## Install and configure\n\nInstall from npm or Python, then create a schema-v1 configuration and start the daemon:\n\n```bash\nnpm install -g @neoline/hostbridge\nhostbridge setup\nhostbridge daemon start\nhostbridge doctor\n```\n\nThe public CLI includes `install`, `uninstall`, `upgrade`, `setup`, `migrate`, `doctor`, `hosts`, `daemon`, `mock-ssh`, and `version`. Run `hostbridge install` to register the MCP with detected agents; when no CLI command is supplied the same entrypoint serves MCP over stdio.\n\nCheck for or install the latest npm release, or request one exact release:\n\n```bash\nhostbridge upgrade --check\nhostbridge upgrade\nhostbridge upgrade 2.4.0\nhostbridge upgrade --force\n```\n\nAn upgrade is reported successful only after the global npm installation reports the resolved registry version. Restart the HostBridge daemon and open agent clients afterward so long-lived processes load the new release.\n\nAdd a host as one validated JSON object:\n\n```bash\nhostbridge hosts add '{\"id\":\"gpu\",\"label\":\"GPU\",\"ssh\":{\"host\":\"alice@gpu.example.com\"},\"transport\":\"auto\"}'\nhostbridge hosts list\nhostbridge hosts check gpu\n```\n\n### Record an interactive login\n\nUse the recorder when a host requires a jump server, menu, wrapper script, password,\ntoken, OTP, or another PTY-only login flow:\n\n```bash\nhostbridge hosts record a800_95 \\\n  --label \"A800 95\" \\\n  --command \"bash ~/.ssh/sh_a800_95.sh\"\n```\n\nThe command starts a real PTY and forwards the session to the terminal. Complete\nthe login normally, then type `/ready` at the final shell prompt to save the\nconnection. Type `/abort` or press `Ctrl-C` to discard it. Secret prompts are not\nechoed and secret values are stored only as encrypted schema-v1 entries; never\nput passwords or tokens in the command line or JSON file. Restart the daemon and\nrun `hostbridge hosts check a800_95` after recording.\n\n## File transfer model\n\nHostBridge streams file data as raw bytes over its bounded multiplexed tunnel. Direct SSH targets use SFTP on the host's shared AsyncSSH connection. JumpServer, menu, wrapper, and `docker exec` paths use the persistent PTY remote agent, which implements the same binary upload/download protocol without Base64 expansion. Both providers verify SHA-256 and size before atomically replacing the destination. Transfers are limited to 100MiB by default:\n\n```bash\nfile_upload(session_id, \"/absolute/local/script.py\", \"/remote/work/script.py\")\nfile_download(session_id, \"/remote/work/result.log\", \"/absolute/local/result.log\")\n```\n\nGive file tools local and remote paths. Files larger than 100MiB are deliberately rejected with guidance to use remote pull instead, for example `curl`, `wget`, `git clone`, `modelscope download`, or another remote-native downloader. The optional `mock-ssh` bridge below exposes SFTP/SCP protocol compatibility on top of the same binary transfer service for clients which require SSH file-transfer channels.\n\n## Mock SSH bridge\n\nSome clients, including compute providers, know how to connect to SSH targets but cannot run HostBridge's MCP connector inside their local sandbox. `hostbridge mock-ssh` exposes one configured HostBridge host as a local SSH server while keeping the actual remote access path behind HostBridge. This is useful when the client-side SSH implementation runs outside a restricted sandbox.\n\n```bash\nhostbridge mock-ssh start a800_95\n```\n\nBy default HostBridge selects a free local port from `2222-2299`, creates host/client keys under `~/.hostbridge/mock-ssh/<host_id>/`, and writes a managed `Host hostbridge-<host_id>` block into `~/.ssh/config`. The command prints the chosen alias, port, config path, and identity file:\n\n```text\nhostbridge mock-ssh forwarding host 'a800_95'\nlistening on ssh://127.0.0.1:2222\nssh host alias: hostbridge-a800_95\nssh config: /Users/alice/.ssh/config\nidentity file: /Users/alice/.hostbridge/mock-ssh/a800_95/client_ed25519_key\n```\n\nPoint the compute provider at the printed SSH alias, for example `ssh:hostbridge-a800_95`. To remove the managed SSH config block later:\n\n```bash\nhostbridge mock-ssh remove a800_95\n```\n\nAdvanced options are still available for fixed deployments: `--listen-host`, `--port`, `--key-dir`, `--ssh-host-alias`, `--ssh-config`, and `--no-ssh-config`.\n\nThe bridge supports:\n\n- SSH exec requests, suitable for compute `call_command` APIs.\n- Interactive shell channels.\n- SFTP upload/download/list/stat/mkdir/remove/rename operations.\n- OpenSSH `scp` in its default SFTP-backed mode.\n- Legacy OpenSSH `scp -O` mode through AsyncSSH's SCP server.\n\nEach SSH channel owns a HostBridge runtime lease and closes it when the channel ends, while all leases for a host reuse the daemon's single provider connection. An interactive shell `exit` therefore does not kill later exec or file-transfer requests. SFTP/SCP uses the same binary transfer service and works across JumpServer/menu/wrapper login flows where direct remote SFTP is unavailable. It inherits the same transfer size limit (100MiB by default); for larger files, start a remote-native pull from the target host.\n\nMock SSH exec channels are byte-oriented. Binary stdin is streamed with one total deadline, client EOF is propagated to the remote command, and disconnect, timeout, cancellation, or a missing backend exit status closes the HostBridge session. Output remains bytes end to end and is bounded before returning to the client.\n\n## Daemon lifecycle\n\nHostBridge always keeps remote sessions in the local daemon. The MCP server process is only a lightweight stdio adapter for agent clients and talks to the daemon over a Unix domain socket. If the daemon is not already running, the MCP adapter starts it lazily on the first tool call.\n\n```bash\nhostbridge daemon start\nhostbridge daemon status\nhostbridge daemon restart\nhostbridge daemon stop\n```\n\n`hostbridge daemon restart` first performs a read-only activity check. If sessions, owners, streams, or leases are active, restart is deferred without sending a shutdown request and the daemon remains fully operational. An atomic daemon-side idle condition prevents resources created during the check from racing with shutdown. Only `--force` interrupts active resources:\n\n```bash\nhostbridge daemon restart --force\n```\n\nThe daemon uses a Unix domain socket with a versioned binary multiplexing protocol, not HTTP and not a TCP port:\n\n```text\n~/.hostbridge/daemon.sock\n```\n\nEvery client validates both protocol version and the exact HostBridge runtime version. When an older or incompatible daemon owns the configured socket, the launcher shuts it down and starts the current runtime before use. Each control connection has bounded pending requests, concurrent handlers, receive windows, and per-stream flow-control credit. Business handlers execute on the daemon event loop; there is no synchronous service worker pool.\n\nWhen launched through the npm wrapper on macOS, HostBridge sets `HOSTBRIDGE_DAEMON_SOCKET` to `/private/tmp/hostbridge-$USER/daemon.sock` so sandboxed MCP launchers do not accidentally isolate the daemon under a rewritten `HOME`. Python-only launches keep the `~/.hostbridge/daemon.sock` default unless you set `HOSTBRIDGE_DAEMON_SOCKET` or `HOSTBRIDGE_DAEMON_DIR`.\n\nThis avoids fixed port conflicts, removes the local HTTP surface, and keeps the control API local to the current machine. The daemon directory should be private to the local user. To point daemon management commands at a custom socket path:\n\n```bash\nhostbridge daemon start --socket /tmp/hostbridge.sock\n```\n\nFor MCP clients, prefer setting the environment variable instead of relying on symlinks:\n\n```json\n{\n  \"env\": {\n    \"HOSTBRIDGE_DAEMON_SOCKET\": \"/private/tmp/hostbridge-shengzhoukong/daemon.sock\"\n  }\n}\n```\n\nSessions can outlive a single agent client process. HostBridge records an optional `HOSTBRIDGE_AGENT_ID` owner on sessions and refuses cross-owner operations unless an internal cleanup path force-closes them. Configure `limits.max_sessions` per host to cap concurrent live sessions (default `16`).\n\nSee [docs/ARCHITECTURE.md](docs/ARCHITECTURE.md) for runtime ownership, cancellation, and provider invariants.\n\n## Configuration lifecycle\n\n`hostbridge setup` creates an empty schema-v1 file with mode `0600`. It does not run an interactive login recorder. Use `hostbridge hosts add` for new entries and `hostbridge migrate OLD NEW` for legacy files. The daemon loads one validated config at startup; restart it after configuration changes.\n\nUse `transport: \"auto\"` for normal operation, `pty` for JumpServer/menu/wrapper flows, or `ssh` for native AsyncSSH/SFTP-capable targets. Commands receive stdin explicitly through the protocol; HostBridge no longer guesses whether a command reads stdin.\n\n## Configure hosts\n\nCreate `~/.hostbridge/hosts.json`:\n\n```bash\nmkdir -p ~/.hostbridge\ncat > ~/.hostbridge/hosts.json <<'JSON'\n{\n  \"schema_version\": 1,\n  \"defaults\": {\n    \"forwarding\": {\n      \"enabled\": true,\n      \"allow_all_targets\": true,\n      \"allow_all_ports\": true\n    }\n  },\n  \"hosts\": [\n    {\n      \"id\": \"gpu_direct\",\n      \"label\": \"GPU direct SSH\",\n      \"ssh\": {\n        \"host\": \"alice@gpu.example.com\"\n      }\n    }\n  ]\n}\nJSON\n```\n\nThe daemon validates this file at startup. Restart the daemon after editing it.\n\n### Global TCP forwarding policy\n\nTCP forwarding is securely disabled when `defaults.forwarding` is absent. The example above explicitly enables forwarding for every configured host and every host added later, allows any valid IPv4 address, IPv6 address, or hostname, and allows TCP ports `1` through `65535`.\n\nHosts inherit the global policy unless they contain an explicit `forwarding` object. A host-level object is a complete override, so an explicit host policy can disable forwarding or restore a restricted CIDR, hostname, and port allowlist. Empty allowlists remain empty and never mean allow-all. `allow_all_targets` cannot be combined with non-empty target allowlists, and `allow_all_ports` cannot be combined with a non-empty port allowlist.\n\nUse the CLI to update the global policy without editing JSON manually:\n\n```bash\nhostbridge forwarding enable-all\nhostbridge forwarding status\nhostbridge daemon restart\n```\n\nTo disable the global policy, run `hostbridge forwarding disable`. Existing host-level overrides remain intact by default. Add `--clear-host-overrides` when every host should inherit the new global setting:\n\n```bash\nhostbridge forwarding enable-all --clear-host-overrides\nhostbridge daemon restart\n```\n\n### Direct SSH, no jump host\n\n```json\n{\n  \"hosts\": [\n    {\n      \"id\": \"gpu\",\n      \"label\": \"GPU server\",\n      \"ssh\": {\n        \"host\": \"alice@gpu.example.com\"\n      }\n    }\n  ]\n}\n```\n\n### SSH with port, key, and jump host\n\n```json\n{\n  \"hosts\": [\n    {\n      \"id\": \"gpu_jump\",\n      \"label\": \"GPU via bastion\",\n      \"ssh\": {\n        \"host\": \"alice@gpu.internal\",\n        \"port\": 2222,\n        \"identity_file\": \"~/.ssh/gpu_key\",\n        \"proxy_jump\": \"bastion.example.com\",\n        \"extra_args\": [\"-o\", \"ServerAliveInterval=30\"]\n      }\n    }\n  ]\n}\n```\n\n### Existing shell script wrapper\n\nUse this if you already have a `.sh` or expect wrapper that opens an interactive remote shell.\n\n```json\n{\n  \"hosts\": [\n    {\n      \"id\": \"legacy_gpu\",\n      \"label\": \"Legacy GPU wrapper\",\n      \"script\": \"~/.ssh/connect_gpu.sh\"\n    }\n  ]\n}\n```\n\nThe wrapper does not need executable permission; the MCP runs it with `/bin/sh`.\n\n### Advanced command mode\n\nUse this for non-SSH interactive shells, containers, or custom connection tools. The MCP calls the executable directly without `shell=True`.\n\n```json\n{\n  \"hosts\": [\n    {\n      \"id\": \"container\",\n      \"label\": \"Local container shell\",\n      \"command\": \"docker\",\n      \"args\": [\"exec\", \"-it\", \"training-box\", \"bash\"]\n    }\n  ]\n}\n```\n\n## Host config rules\n\n- `id` may contain only letters, numbers, `_`, `-`, and `.`.\n- Each host must define exactly one practical connection style: `ssh`, `script`, or `command`.\n- `ssh.host` can be any target accepted by `ssh`, such as `user@example.com` or an alias from `~/.ssh/config`.\n- `ssh.identity_file` and `script` expand `~` for the local user running the MCP server.\n- For a different config path, set `HOSTBRIDGE_HOSTS_FILE=/path/to/hosts.json` in the MCP server environment.\n\n## MCP client config\n\nRegister HostBridge in every detected supported agent and install its managed usage guidance:\n\n```bash\nhostbridge install\n```\n\nSupported targets are `codex`, `claude-code`, `cursor`, `gemini`, `opencode`, `hermes`, `antigravity`, and `kiro`. Select one or more explicitly with a comma-separated list:\n\n```bash\nhostbridge install --target codex,claude-code\nhostbridge uninstall --target cursor\nhostbridge uninstall # removes HostBridge from every supported agent config\n```\n\nBoth commands preserve unrelated MCP servers and surrounding agent instructions. `uninstall` removes only the `hostbridge` MCP entry and the guidance enclosed by HostBridge's managed markers. Use `--config` with exactly one explicit target to override its configuration path, or `--command` plus repeated `--arg` options to register a development entrypoint.\n\nFor manual registration, use the stdio entrypoint below.\n\nCodex example in `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.hostbridge]\ncommand = \"npx\"\nargs = [\"-y\", \"@neoline/hostbridge@2.4.0\"]\n[mcp_servers.hostbridge.env]\nHOSTBRIDGE_AGENT_ID = \"codex\"\n```\n\nClaude Desktop style config:\n\n```json\n{\n  \"mcpServers\": {\n    \"hostbridge\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"@neoline/hostbridge@2.4.0\"],\n      \"env\": {\"HOSTBRIDGE_AGENT_ID\": \"claude-code\"}\n    }\n  }\n}\n```\n\nTo use a project-specific host file:\n\n```toml\n[mcp_servers.hostbridge.env]\nHOSTBRIDGE_HOSTS_FILE = \"/absolute/path/to/hosts.json\"\n```\n\nSee `examples/` for copyable config templates.\n\n## Policy, audit, and idle reaping\n\nhostbridge ships a lightweight policy layer that runs inside the daemon process. It is on by default and can be tuned or disabled via environment variables or a JSON config file.\n\nEnvironment variables:\n\n| Variable | Effect |\n| --- | --- |\n| `HOSTBRIDGE_DISABLE_POLICY=1` | Disable policy checks and audit logging entirely. |\n| `HOSTBRIDGE_POLICY_FILE=/path/to/policy.json` | Override policy config path (default `~/.hostbridge/policy.json`). |\n| `HOSTBRIDGE_DENYLIST=pat1:pat2` | Append extra deny regex patterns (colon-separated). |\n| `HOSTBRIDGE_IDLE_TIMEOUT=900` | Idle timeout in seconds before an inactive session is reaped (default 1800). |\n| `HOSTBRIDGE_AUDIT_LOG=/path/to/audit.jsonl` | Override audit log path (default `~/.hostbridge/audit.jsonl`). |\n| `HOSTBRIDGE_AUDIT_MAX_BYTES=10485760` | Rotate the current audit log before it exceeds this size (default 10MiB). |\n| `HOSTBRIDGE_AUDIT_BACKUP_COUNT=3` | Number of rotated audit logs to retain (default 3; `0` retains none). |\n\nDefault denylist blocks obviously destructive commands (`rm -rf /`, `mkfs`, `dd of=/dev/sd*`, fork bombs, `shutdown`, `reboot`). A denied command returns `error_code=denied` with the matched pattern. Every `session_open`, `command_run`, `task_start`, `task_stop`, and `session_close` request writes one terminal audit event whose outcome records success, rejection, timeout, cancellation, or failure. Commands and paths are stored only as SHA-256 digests plus byte lengths; raw text is never persisted.\n\nPolicy config file (optional):\n\n```json\n{\n  \"idle_timeout_seconds\": 1800,\n  \"use_default_denylist\": true,\n  \"command_denylist\": [\"\\\\bmytool\\\\b\"],\n  \"audit_log_path\": \"~/.hostbridge/audit.jsonl\",\n  \"audit_max_bytes\": 10485760,\n  \"audit_backup_count\": 3\n}\n```\n\nSee `SECURITY.md` and `docs/THREAT_MODEL.md` for the trust model and audited events.\n\n## Typical agent workflow\n\n1. Call `hosts_list` and choose a configured host id.\n2. Add missing hosts with `hostbridge hosts add '<json>'`, then restart the daemon.\n3. Call `session_open` once for the chosen host.\n4. Only after a connection failure, run `hostbridge hosts check <host_id>`.\n5. Use `command_run` for quick work and `task_start` / `task_status` for long jobs.\n6. Use text tools for UTF-8 and upload/download tools for streamed binary transfers.\n7. Close the session when finished.\n\n## Security notes\n\n- Host access is allowlisted by config; MCP callers cannot provide arbitrary local connection commands at runtime.\n- The server never reads or logs passwords from underlying SSH/script prompts.\n- Commands still run with your remote shell privileges. Use only with trusted local MCP clients.\n- Background task logs and exit codes are stored on the remote host in `$HOME/.hostbridge/jobs/`.\n- The policy layer blocks a built-in destructive denylist and writes structured audit events. It is defense-in-depth, not a sandbox.\n\n## Troubleshooting\n\nRun `hostbridge doctor --json` first. Its `mcp` diagnostic starts an isolated\nHostBridge stdio process and verifies the server identity and all 15 standard\ntools. Release versions are verified separately across the package and daemon.\nIf those checks pass but an agent reports\n`unsupported call: mcp__hostbridge`, the failure is in the agent host's MCP\ntool loading or deferred-tool dispatcher, not in HostBridge or the remote host.\n\nTreat command execution, SFTP, and SCP as separate Mock SSH paths and verify\nthem independently. Approval-service overloads, disconnects, or model-mismatch\nerrors occur before HostBridge receives the request.\n\n## Contributing\n\nSee `CONTRIBUTING.md`. Run tests with `python -m pytest -q`. The full suite should pass before pushing.\n\n## License\n\nMIT. See `LICENSE`.\n","readmeFilename":"README.md"}