{"_id":"@push.rocks/smartshell","_rev":"25-17d300db053e9a9ffb23c5e549328bba","name":"@push.rocks/smartshell","dist-tags":{"latest":"4.2.0"},"versions":{"3.0.3":{"name":"@push.rocks/smartshell","version":"3.0.3","keywords":["shell","promise"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.0.3","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://gitlab.com/pushrocks/smartshell#README","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"1fc77d8ab27b4421f1622cc5f5be4f3859f2952c","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.0.3.tgz","fileCount":21,"integrity":"sha512-S4RXI76ltPetdJ8Gv4HlnlhR/hXDV8QmSU7TdhLEe171ZzfouAyt9XZ4MFDCtjk3VQ4Mw+zz4mSDaACXP/QdlQ==","signatures":[{"sig":"MEYCIQCysibRrLcXb2e6bFLIlXypqXThzRwZaO8atXADjUGlJwIhALYMhdSEP5a/wYST9kdZglYdpN8D74sy8ftu6LE4+Jn8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38033},"main":"dist_ts/index.js","type":"module","private":false,"scripts":{"test":"(tstest test/)","build":"(tsbuild --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"git+ssh://git@gitlab.com/pushrocks/smartshell.git","type":"git"},"_npmVersion":"9.5.0","description":"shell actions designed as promises","directories":{},"_nodeVersion":"18.14.2","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^3.0.1","tree-kill":"^1.2.2","@types/which":"^3.0.0","@pushrocks/smartexit":"^1.0.20","@pushrocks/smartdelay":"^3.0.1","@pushrocks/smartpromise":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.3.1","@gitzone/tsrun":"^1.2.42","@gitzone/tstest":"^1.0.74","@gitzone/tsbuild":"^2.1.66","@pushrocks/tapbundle":"^5.0.8"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.0.3_1689123755270_0.1532480426088374","host":"s3://npm-registry-packages"}},"3.0.4":{"name":"@push.rocks/smartshell","version":"3.0.4","keywords":["shell","promise"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.0.4","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://gitlab.com/pushrocks/smartshell#README","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"ffeee12070ef1cdc284594aa067a89327a31c512","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.0.4.tgz","fileCount":21,"integrity":"sha512-+QkWMJhcoIrKxRupIVt6hDzRxwx5bHhmAwFj2WkbjUyR7yBhMPBQW9OpkUpYYINSNeefg62aHJ5jj2q1fwDdfA==","signatures":[{"sig":"MEQCIDwxbcc6vyT9V+6QA2ph7TEa5YIOUye+k5S4Eh6393qsAiARA1dmmRjxTAdG21i/g7cQgRgSAdRSh+A0DfxF8tonFw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38289},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.0.4.tgz","private":false,"scripts":{"test":"(tstest test/)","build":"(tsbuild --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/62709de7323e974002496697ea183b12/push.rocks-smartshell-3.0.4.tgz","_integrity":"sha512-+QkWMJhcoIrKxRupIVt6hDzRxwx5bHhmAwFj2WkbjUyR7yBhMPBQW9OpkUpYYINSNeefg62aHJ5jj2q1fwDdfA==","repository":{"url":"git+ssh://git@gitlab.com/pushrocks/smartshell.git","type":"git"},"_npmVersion":"10.2.3","description":"shell actions designed as promises","directories":{},"_nodeVersion":"21.2.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^4.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.3","@push.rocks/smartexit":"^1.0.20","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.11.28","@git.zone/tsrun":"^1.2.44","@git.zone/tstest":"^1.0.77","@git.zone/tsbuild":"^2.1.66","@push.rocks/tapbundle":"^5.0.8"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.0.4_1710584344928_0.70263584488625","host":"s3://npm-registry-packages"}},"3.0.5":{"name":"@push.rocks/smartshell","version":"3.0.5","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.0.5","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://gitlab.com/pushrocks/smartshell#README","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"941cbca8c0c934493e35cd573f2d0742b160f429","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.0.5.tgz","fileCount":22,"integrity":"sha512-kHh86kpkrXHM/xgftcFQ2psU+DJrINzbeD1gIKR/I6cEXjWyYfs+I6UnFMhY3Bcpx9FdTElpRy5qVsumWURQSw==","signatures":[{"sig":"MEUCIQC1R6bPpda4V9p+YpNOWA0wG65kHeJXKI7PLetAmLSY7gIgWbmjG5XztTA7k1CiOdkyBVuHek6Gp3Bh3MahZh67n8U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45443},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.0.5.tgz","private":false,"scripts":{"test":"(tstest test/)","build":"(tsbuild --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/ae2f1aedcf0d520e0e622fe403d1a315/push.rocks-smartshell-3.0.5.tgz","_integrity":"sha512-kHh86kpkrXHM/xgftcFQ2psU+DJrINzbeD1gIKR/I6cEXjWyYfs+I6UnFMhY3Bcpx9FdTElpRy5qVsumWURQSw==","repository":{"url":"git+ssh://git@gitlab.com/pushrocks/smartshell.git","type":"git"},"_npmVersion":"10.2.3","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"21.2.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^4.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.3","@push.rocks/smartexit":"^1.0.23","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.0.2"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^20.12.7","@git.zone/tsrun":"^1.2.44","@git.zone/tstest":"^1.0.77","@git.zone/tsbuild":"^2.1.66","@push.rocks/tapbundle":"^5.0.23"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.0.5_1713440585596_0.7784328914224408","host":"s3://npm-registry-packages"}},"3.0.6":{"name":"@push.rocks/smartshell","version":"3.0.6","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.0.6","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"635cd2179164bf1fcefaf2b16404771e932768b2","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.0.6.tgz","fileCount":22,"integrity":"sha512-j3SgNyq1K3i7NVk5a2+5QkG/9ac30eC3OsOAMXVxOczYceMXRiXIr9yow3t/+na14/zSYd8He2N0vYPtYqKeSQ==","signatures":[{"sig":"MEYCIQCdhttjpaL49pnclcZhmyqIlQ0Hzw3KolDizUi4wunQSAIhAJvkuUL9S6hKxlrVNGteLYLi/VqEXRn7657cCiQFlwKo","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":45824},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.0.6.tgz","private":false,"scripts":{"test":"(tstest test/)","build":"(tsbuild --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/d365ddaa18740ee546218636d3a709a7/push.rocks-smartshell-3.0.6.tgz","_integrity":"sha512-j3SgNyq1K3i7NVk5a2+5QkG/9ac30eC3OsOAMXVxOczYceMXRiXIr9yow3t/+na14/zSYd8He2N0vYPtYqKeSQ==","repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"10.2.3","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"21.2.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^4.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^1.0.23","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.0.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.5.5","@git.zone/tsrun":"^1.2.49","@git.zone/tstest":"^1.0.90","@git.zone/tsbuild":"^2.1.84","@push.rocks/tapbundle":"^5.0.24"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.0.6_1726585373659_0.2653281423273097","host":"s3://npm-registry-packages"}},"3.1.0":{"name":"@push.rocks/smartshell","version":"3.1.0","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"0698bda5dae438ff62387a04da5c98616085c694","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.1.0.tgz","fileCount":33,"integrity":"sha512-j0gNSReRaOszjLQ0bCEvF1PxYc/df9BTvNaHCB/lEK9PfDVijE4aTPiMdIXWmcF0q/4M1ko73vgcN/VNuhM/Mw==","signatures":[{"sig":"MEQCIG367mrZDg2LQ2U1fvaCYEnFTIOx209u4lhu1/Ob1we7AiBbAlyKr3P7+9QDsJpTfLN4j0Cww2JbP21uX/I0cV62xQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":72563},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.1.0.tgz","private":false,"scripts":{"test":"(tstest test/)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/a8a583a5b34f61bc9acd85cb3ed5d02a/push.rocks-smartshell-3.1.0.tgz","_integrity":"sha512-j0gNSReRaOszjLQ0bCEvF1PxYc/df9BTvNaHCB/lEK9PfDVijE4aTPiMdIXWmcF0q/4M1ko73vgcN/VNuhM/Mw==","repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"10.9.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"21.2.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^1.0.23","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.0.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.1","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^1.0.90","@git.zone/tsbuild":"^2.2.0","@push.rocks/tapbundle":"^5.5.3"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.1.0_1733708382575_0.8712776392765766","host":"s3://npm-registry-packages-npm-production"}},"3.2.0":{"name":"@push.rocks/smartshell","version":"3.2.0","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.2.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"88a65c5f1eb434ef9686fd68709701c0b0a110eb","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.2.0.tgz","fileCount":33,"integrity":"sha512-YBGPaaUsT0DmR40bfrnE3p+zLxjYRgTC588R7jojVdyPDD7fDMKHcizzFLnxxmlyI60e5idsUWyz11V/rZY3sQ==","signatures":[{"sig":"MEUCIQDcQ3TFTK3KVzXd6JJm1ggaj7pbE0I3mRic0tQLATpO3wIgRNehwn60x+wFE4iArLFZHwuAlW0JouZykHpNGR96Ypc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":75559},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.2.0.tgz","private":false,"scripts":{"test":"(tstest test/)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/23bb86d4f57f56c91c4da02f5a99e7ee/push.rocks-smartshell-3.2.0.tgz","_integrity":"sha512-YBGPaaUsT0DmR40bfrnE3p+zLxjYRgTC588R7jojVdyPDD7fDMKHcizzFLnxxmlyI60e5idsUWyz11V/rZY3sQ==","repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"10.9.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"21.2.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^1.0.23","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.0.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.1","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^1.0.90","@git.zone/tsbuild":"^2.2.0","@push.rocks/tapbundle":"^5.5.3"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.2.0_1733709145342_0.8620487598485236","host":"s3://npm-registry-packages-npm-production"}},"3.2.1":{"name":"@push.rocks/smartshell","version":"3.2.1","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.2.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"f003409d6bc70162f4d62a75ae025031c6bdc4a6","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.2.1.tgz","fileCount":33,"integrity":"sha512-VUJ/snxYSmy5qj0Oxg05r5sk7wBnhCEx8yJPxWWuG4djKQb54378ADMESPVjDqLt4/pdiWHZG5widyR5RE7QNg==","signatures":[{"sig":"MEQCIA4e2R7Kw/c2FkdCkh8GpQx5iAtzRoPL7ikjwn/QKH6rAiAom/LqI2s+6IUp9jCvwFngGLeEXTbIfRbqbbf5h9jy5w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":75559},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.2.1.tgz","private":false,"scripts":{"test":"(tstest test/)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/9518222f0888ae0b09425f0272846d61/push.rocks-smartshell-3.2.1.tgz","_integrity":"sha512-VUJ/snxYSmy5qj0Oxg05r5sk7wBnhCEx8yJPxWWuG4djKQb54378ADMESPVjDqLt4/pdiWHZG5widyR5RE7QNg==","repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"10.9.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"21.2.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^1.0.23","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.0.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.2","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^1.0.90","@git.zone/tsbuild":"^2.2.0","@push.rocks/tapbundle":"^5.5.3"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.2.1_1734112546002_0.8010916017790861","host":"s3://npm-registry-packages-npm-production"}},"3.2.2":{"name":"@push.rocks/smartshell","version":"3.2.2","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.2.2","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"4575cfbe71ec3bc640af40cfc2df1e582e498f0c","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.2.2.tgz","fileCount":33,"integrity":"sha512-zMTVJ2ca1pDiqyRQpByz/T2HtoRYLCbXFo6TSA663nuGmnGsIn/DHFZMQYUJGdDi6LSjVxPsQMsY5Bwc4hL6og==","signatures":[{"sig":"MEUCIQCkOo53yDfd/98Yt5FXeKEGCuqC/dfcef3PwnyYB0mvQgIgBnccXFIG4LOtjbl1zqr5zqtnczjCSJbZjACKTW9421w=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":75559},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.2.2.tgz","private":false,"scripts":{"test":"(tstest test/)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/73d3672bf4d98868f3ff23ce29adcdfc/push.rocks-smartshell-3.2.2.tgz","_integrity":"sha512-zMTVJ2ca1pDiqyRQpByz/T2HtoRYLCbXFo6TSA663nuGmnGsIn/DHFZMQYUJGdDi6LSjVxPsQMsY5Bwc4hL6og==","repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"10.9.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"21.2.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^1.0.23","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.0.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.2","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^1.0.90","@git.zone/tsbuild":"^2.2.0","@push.rocks/tapbundle":"^5.5.3"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.2.2_1734113041898_0.02139716292627747","host":"s3://npm-registry-packages-npm-production"}},"3.2.3":{"name":"@push.rocks/smartshell","version":"3.2.3","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.2.3","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"eb07a7526430846e42d6cf1c09629935bacf7225","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.2.3.tgz","fileCount":33,"integrity":"sha512-BWA/DH1H9lG7Er23d4uYgirfYaya5dX4g/WpWm2la7mOzuL9o2FnPIhel52DQUKIh7ty3Ql305ApV8YaAb4+/w==","signatures":[{"sig":"MEQCIFW1mZOpclNZuLZxfN5jpagu7g/dCq1Yb1jHnfD7b+ObAiBjC4LHkBW06T63HCrpLR6czY1yfzI8YqQe3WdYAeK+nA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":77518},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.2.3.tgz","private":false,"scripts":{"test":"(tstest test/)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/dffad3da7c183efdee9ba0e45b0a9c9b/push.rocks-smartshell-3.2.3.tgz","_integrity":"sha512-BWA/DH1H9lG7Er23d4uYgirfYaya5dX4g/WpWm2la7mOzuL9o2FnPIhel52DQUKIh7ty3Ql305ApV8YaAb4+/w==","repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"10.9.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"21.2.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^1.0.23","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.0.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.2","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^1.0.90","@git.zone/tsbuild":"^2.2.0","@push.rocks/tapbundle":"^5.5.3"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.2.3_1740051449595_0.06914887697020378","host":"s3://npm-registry-packages-npm-production"}},"3.2.4":{"name":"@push.rocks/smartshell","version":"3.2.4","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.2.4","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"504d4c293be957511deefe9d4385ded6e9508720","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.2.4.tgz","fileCount":33,"integrity":"sha512-zZEKfRl3qBaII9BJULk4rB/+EelUpgM2/qHCQLui7c4589HTge4o0nWn+olFw/Hge88qUO77OK1sN7hQFZ6zeg==","signatures":[{"sig":"MEUCICg0AJD2FGLCHHvy0a93qRO5awPno7pfRytVNzU4bY9eAiEAkFj9VW2CCGrTd07njs4gNTxZI3/30LGWcbX+e/nm1lM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":96866},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.2.4.tgz","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/8c4227df31e9726750bc255a701cfce0/push.rocks-smartshell-3.2.4.tgz","_integrity":"sha512-zZEKfRl3qBaII9BJULk4rB/+EelUpgM2/qHCQLui7c4589HTge4o0nWn+olFw/Hge88qUO77OK1sN7hQFZ6zeg==","repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.3.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^1.0.23","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.2","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.2","@git.zone/tsbuild":"^2.6.4"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.2.4_1755337999408_0.74845568325673","host":"s3://npm-registry-packages-npm-production"}},"3.3.0":{"name":"@push.rocks/smartshell","version":"3.3.0","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.3.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"7c314f3215a80b7185be7ea64eea375c619cde1c","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.3.0.tgz","fileCount":33,"integrity":"sha512-m0w618H6YBs+vXGz1CgS4nPi5CUAnqRtckcS9/koGwfcIx1IpjqmiP47BoCTbdgcv0IPUxQVBG1IXTHPuZ8Z5g==","signatures":[{"sig":"MEYCIQCJdwkDjdB/iZwRixR8SZp7E7gqkmyyz+gM71/gCetHIAIhAI51BovW9JkU792SFw96IA4vAiYU+t03/tZLsymmMS4c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":166946},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.3.0.tgz","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/7e2f172053aee4f91ec87768a6ac6a3f/push.rocks-smartshell-3.3.0.tgz","_integrity":"sha512-m0w618H6YBs+vXGz1CgS4nPi5CUAnqRtckcS9/koGwfcIx1IpjqmiP47BoCTbdgcv0IPUxQVBG1IXTHPuZ8Z5g==","repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.3.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"23.8.0","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^1.0.23","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^22.10.2","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.2","@git.zone/tsbuild":"^2.6.4"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.3.0_1755444036607_0.9046932202029012","host":"s3://npm-registry-packages-npm-production"}},"3.3.2":{"name":"@push.rocks/smartshell","version":"3.3.2","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.3.2","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"3df07783836c893f9fa6ca4444ae46d7d876f058","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.3.2.tgz","fileCount":33,"integrity":"sha512-xDakRUYBO/WDXlBvS2IbreAvXke/oUul2hcna953a1Bv5gMPOSVBVFsFIaUEqTzAQ5/1YjjEhbnjPeXq87jgkA==","signatures":[{"sig":"MEYCIQCPVN78Rh8yU2tyZhRSjFUlRPcQUi6kt/0tCQP1uXYApQIhANmBc4tsn7ycwaxA71qqWP3AAsxeMlSgwACfqAPws+6p","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167312},"main":"dist_ts/index.js","type":"module","gitHead":"68060e8565f7c3363fb8f4322d9e576d0b1ad05b","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.7.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^1.1.1","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"@types/node":"^22.10.2","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.2","@git.zone/tsbuild":"^2.6.4"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.3.2_1772577411896_0.746148414299896","host":"s3://npm-registry-packages-npm-production"}},"3.3.3":{"name":"@push.rocks/smartshell","version":"3.3.3","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.3.3","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"ba420e7096952c28fc916aa5f1661c997100a769","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.3.3.tgz","fileCount":33,"integrity":"sha512-o7+JWIF3AML5AsHhOo9xMblV2oBZrc9HF/67q42+Xox7/Zw2McQbavXQ2JgsMxUQTc8IRBAWth+LxoFMRqrj4g==","signatures":[{"sig":"MEUCIHtZHy1cz82VlvvsrpioBPgUUBjxinI5mDnCz/bwO3zeAiEAugTe+fRf0eClUgpDQGkO7zIYOiZWo0NmpSFsJlsmdz8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167312},"main":"dist_ts/index.js","type":"module","gitHead":"8a0a18f4da1f882131716720d86d14021b1fc56a","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.7.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.0.0","@push.rocks/smartdelay":"^3.0.1","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"@types/node":"^22.10.2","@git.zone/tsrun":"^1.3.3","@git.zone/tstest":"^2.3.2","@git.zone/tsbuild":"^2.6.4"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.3.3_1772581328870_0.10530067103818119","host":"s3://npm-registry-packages-npm-production"}},"3.3.4":{"name":"@push.rocks/smartshell","version":"3.3.4","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.3.4","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"dc80a099e68452f7df5fac5eaf465c15c2b1ac35","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.3.4.tgz","fileCount":33,"integrity":"sha512-/+xUIeMgRI2+cgXiL7V6MMUziTIiwu+UIJWLyfJ+O0B1CdrBHrKj7TJeEOGIfoaL9Wyc4nCMUcikQNQHlJYBNQ==","signatures":[{"sig":"MEUCIQDUB22H4g9bpprvJhbbHawc33ydlpU2TtUvpKrdGwrFAgIgT94LnSBjGMSlNZ3PhX6vf/Op4ezXRO8RZcWZj8R+SIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167313},"main":"dist_ts/index.js","type":"module","gitHead":"181d352e21d372fdeaef2e4df45c2dffbf9a47b5","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.7.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.0.1","@push.rocks/smartdelay":"^3.0.5","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"@types/node":"^22.19.13","@git.zone/tsrun":"^1.6.2","@git.zone/tstest":"^2.8.3","@git.zone/tsbuild":"^2.7.3"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.3.4_1772582671015_0.23048911559615348","host":"s3://npm-registry-packages-npm-production"}},"3.3.5":{"name":"@push.rocks/smartshell","version":"3.3.5","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.3.5","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"e959409800879d82ecfda8e04b5e836fe3208856","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.3.5.tgz","fileCount":33,"integrity":"sha512-27510uceMJy11lfsN4caUlD0fZyKnlx0uanT2nPuiyE0dopnjpALaWNkASjDY67sz6to5WDvy/cCzfbuHUlBoQ==","signatures":[{"sig":"MEQCICH+K4zBVPAuaBdv8lPBg+67C4u/twE35Iwd/C7Z9RizAiBpt5D5au4ttsd6fghtxRBmabEWkYUaY6ztOnKP2uhnYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":167633},"main":"dist_ts/index.js","type":"module","gitHead":"d37071dae087ad68c3e24e4fea08ee9d558315f8","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.7.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^5.0.0","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.0.1","@push.rocks/smartdelay":"^3.0.5","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"@types/node":"^22.19.13","@git.zone/tsrun":"^1.6.2","@git.zone/tstest":"^2.8.3","@git.zone/tsbuild":"^2.7.3"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.3.5_1772585377695_0.6564466368445818","host":"s3://npm-registry-packages-npm-production"}},"3.3.6":{"name":"@push.rocks/smartshell","version":"3.3.6","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.3.6","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"7384b38e62f3102e95db5d234ca79069e95e2571","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.3.6.tgz","fileCount":25,"integrity":"sha512-ZJ53P5gri5FYgI/iLdqfM/uePptkbhmTS7/sugMXEEFd46MVLGAwu/DAmpHpBs6vdHoXXH3wOhNpSZNi3YG7kA==","signatures":[{"sig":"MEYCIQDjNkm4lf/vjtMEQ83Es3sq8jOYFLbJ68WaF8fmAWShIQIhAM5QfmuBrGUqkYZ638dpc6ohOxHuEXjEL1zHviOUWNge","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":143261},"main":"dist_ts/index.js","type":"module","gitHead":"f254a9e07834f921e6ace2ae567bee6335903ca4","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.7.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^6.0.1","tree-kill":"^1.2.2","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.0.3","@push.rocks/smartdelay":"^3.0.5","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"@types/node":"^25.3.3","@git.zone/tsrun":"^2.0.1","@git.zone/tstest":"^3.2.0","@git.zone/tsbuild":"^4.1.2"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.3.6_1772648044759_0.21428965398900734","host":"s3://npm-registry-packages-npm-production"}},"3.3.7":{"name":"@push.rocks/smartshell","version":"3.3.7","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.3.7","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"ccc4b026ff3bb570fa2c75b7ed63512c4f4103de","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.3.7.tgz","fileCount":25,"integrity":"sha512-taBVJZ08zz984/LvjKuTNgJjYpoPsAaERVgHovVLAz95LenowC4hNtvmcJww84qhjDGN5ncKPZna6amS8++2Ow==","signatures":[{"sig":"MEUCIBmrGqyhW0tfzDA2o3IiShCdi7kfG2uIIyG6dNzmDhx6AiEA8SrlAofSroxoKUB0IKaY7ldoPG0oURpwa6OitLUW2UE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147838},"main":"dist_ts/index.js","type":"module","gitHead":"cd5194c36510c65d80d8f94abbbb6e8109969672","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.7.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^6.0.1","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.0.3","@push.rocks/smartdelay":"^3.0.5","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"@types/node":"^25.3.3","@git.zone/tsrun":"^2.0.1","@git.zone/tstest":"^3.2.0","@git.zone/tsbuild":"^4.1.2"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.3.7_1772705935225_0.9153464480232001","host":"s3://npm-registry-packages-npm-production"}},"3.3.8":{"name":"@push.rocks/smartshell","version":"3.3.8","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.3.8","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"724ddaba0cbded76177df727ca0d3e9a011cb3c9","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.3.8.tgz","fileCount":25,"integrity":"sha512-t9J/py0vnea4ZtOs7Anc9dc6lcvg6EDvYBw5eE1mB+KUWxMQf/ROIQwWMo6B9SMNY4JS2UwvfuJQJ8makP/7Tg==","signatures":[{"sig":"MEUCIE1MVB2cai27c2wEVU42LiS0WZCsNPzJHafhuCIgsAYQAiEA4aRGK4wUAd4MGnikkR1wqyqteIfQhDOY98Aidqolnac=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":147838},"main":"dist_ts/index.js","type":"module","gitHead":"e61b35257669dc6fd5145fd6e40bad8de5377199","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.7.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^6.0.1","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.0.3","@push.rocks/smartdelay":"^3.0.5","@push.rocks/smartpromise":"^4.2.3"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"@types/node":"^25.3.3","@git.zone/tsrun":"^2.0.1","@git.zone/tstest":"^3.2.0","@git.zone/tsbuild":"^4.1.2"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.3.8_1773600139639_0.491074637831296","host":"s3://npm-registry-packages-npm-production"}},"3.4.0":{"name":"@push.rocks/smartshell","version":"3.4.0","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.4.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"b539899a1c2acba84a67e3d894937029c48a7521","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.4.0.tgz","fileCount":26,"integrity":"sha512-SrGgvM7gmtsDRkdTVRjqQXxVZYqfi5aPpimcnyvHB4ccNP6oV/MR34vCWu/kNwMQ7HwIVvebN5nzfidMPziu+A==","signatures":[{"sig":"MEYCIQCOejm7JQj57+XFnWlRdJvPhQkbrQXST4fVHV79a/k7FwIhAOX9j947wm13CR+4BZ3eGnXjMScqhN1RGj0gmvrVw/85","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":157444},"main":"dist_ts/index.js","type":"module","gitHead":"a0010e7f0fe8f9ee99244595e84ae73ded004e69","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.7.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^7.0.0","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.0.3","@push.rocks/smartdelay":"^3.1.0","@push.rocks/smartpromise":"^4.2.4"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.14.0+sha512.ad27a79641b49c3e481a16a805baa71817a04bbe06a38d17e60e2eaee83f6a146c6a688125f5792e48dd5ba30e7da52a5cda4c3992b9ccf333f9ce223af84748","devDependencies":{"@types/node":"^25.6.2","@git.zone/tsrun":"^2.0.4","@git.zone/tstest":"^3.6.6","@git.zone/tsbuild":"^4.4.1"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.4.0_1778334504463_0.4471546532566899","host":"s3://npm-registry-packages-npm-production"}},"3.5.0":{"name":"@push.rocks/smartshell","version":"3.5.0","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":{"name":"Lossless GmbH"},"license":"MIT","_id":"@push.rocks/smartshell@3.5.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"9b18aa5da11985861d7944b5cecd5bbc7844e03a","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-3.5.0.tgz","fileCount":26,"integrity":"sha512-Hx9TVvC/AWxZsnm1GDb+W4Fe58nf1FkKbSBABUgkxct4XRYugBI2z9Twnjm3R9vdRry8oy0enfR9NPVhisGaGA==","signatures":[{"sig":"MEUCIQCJczpobSMqsFgrlndi6gElgP/R5kiF2Kt7LAWeZRBPUQIgFfjyi8je/10U4knEF8qyRrID17uDikKVcqHnO2lVezw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":159328},"main":"dist_ts/index.js","type":"module","_from":"file:push.rocks-smartshell-3.5.0.tgz","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"_resolved":"/tmp/9dea4934f5f2e1399ab4e5c36ed61c72/push.rocks-smartshell-3.5.0.tgz","_integrity":"sha512-Hx9TVvC/AWxZsnm1GDb+W4Fe58nf1FkKbSBABUgkxct4XRYugBI2z9Twnjm3R9vdRry8oy0enfR9NPVhisGaGA==","repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"_npmVersion":"11.7.0","description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^7.0.0","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.0.3","@push.rocks/smartdelay":"^3.1.0","@push.rocks/smartpromise":"^4.2.4"},"_hasShrinkwrap":false,"devDependencies":{"@types/node":"^25.6.2","@git.zone/tsrun":"^2.0.4","@git.zone/tstest":"^3.6.6","@git.zone/tsbuild":"^4.4.1"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_3.5.0_1778423628336_0.3603756954786499","host":"s3://npm-registry-packages-npm-production"}},"4.0.0":{"name":"@push.rocks/smartshell","version":"4.0.0","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":"Lossless GmbH","license":"MIT","_id":"@push.rocks/smartshell@4.0.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"fe903469563f3d2decb07d4a789a0f93fd8c0168","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-4.0.0.tgz","fileCount":26,"integrity":"sha512-d0w8a+QKTHcJyDcY/x+ezZ5fs9rNA+Ypg/tuAnhP7WRfF5PA2D8HA1n8yDvRzfCT6qh8pjMEFzM0Os76XpiiOg==","signatures":[{"sig":"MEQCIEqPRn/SHDK2TrW56E0MIeb78+YfDsx/9Z9U7zL34RapAiAiTBcuu+lwfAm+gLB+FVVcJJ850/EUkDpUsP1H+C7ptw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":188168},"main":"dist_ts/index.js","type":"module","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^7.0.0","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.2.0","@push.rocks/smartdelay":"^3.1.0","@push.rocks/smartpromise":"^4.2.5"},"_hasShrinkwrap":false,"devDependencies":{"node-pty":"^1.1.0","@types/node":"^26.1.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^3.6.7","@git.zone/tsbuild":"^4.4.2"},"_npmOperationalInternal":{"tmp":"tmp/smartshell_4.0.0_1785612870635_0.7707854164198167","host":"s3://npm-registry-packages-npm-production"}},"4.1.0":{"name":"@push.rocks/smartshell","version":"4.1.0","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":"Lossless GmbH","license":"MIT","_id":"@push.rocks/smartshell@4.1.0","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"bdea263a429988e5ad32336bef9a481688a67d78","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-4.1.0.tgz","fileCount":26,"integrity":"sha512-y1B9JdnBGu9UTwRaQIwAKw64bjxHoEDM1EQwTs8Kfu4q+XLQSF4vgtim/cz7Y3e8f+oSJ+JvgPDPnBxpnck7Ow==","signatures":[{"sig":"MEUCIBtq0JxmJ0TNQ2CenwHuXGcRyD77MWkYzFmb7+G4cqRQAiEAklph+1C/K9si0wIJyW04MzGEYPWoxcGqdNLrJWLon9Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206402},"main":"dist_ts/index.js","type":"module","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^7.0.0","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.2.0","@push.rocks/smartdelay":"^3.1.0","@push.rocks/smartpromise":"^4.2.5"},"_hasShrinkwrap":false,"devDependencies":{"node-pty":"^1.1.0","@types/node":"^26.1.2","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^4.0.0","@git.zone/tsbuild":"^4.4.2"},"peerDependencies":{"node-pty":"^1.1.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/smartshell_4.1.0_1786051873829_0.7035148218352345","host":"s3://npm-registry-packages-npm-production"}},"4.1.1":{"name":"@push.rocks/smartshell","version":"4.1.1","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":"Lossless GmbH","license":"MIT","_id":"@push.rocks/smartshell@4.1.1","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"b1f74c1e4aec350260c11b02ffe618af8b681eaa","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-4.1.1.tgz","fileCount":26,"integrity":"sha512-Rg2DY8A5SO3sys2J3pfAB5VpsNgPKDKts3e5eiLJ6IYnMyu07MkM+uF3YBUjMZkqEffizFACcVTjjRnuThwlGg==","signatures":[{"sig":"MEYCIQD/J3HtH78EFaJHim9vWvjUhO7e516qvlnHLZR3ydYhCQIhAICkEq9DJVNWEONzUctioPCZDls7Zak/70xpeUXrcOuD","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214920},"main":"dist_ts/index.js","type":"module","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^7.0.0","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.2.0","@push.rocks/smartdelay":"^3.1.0","@push.rocks/smartpromise":"^4.2.5"},"_hasShrinkwrap":false,"devDependencies":{"node-pty":"^1.1.0","@types/node":"^26.2.0","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^4.0.0","@git.zone/tsbuild":"^4.4.2"},"peerDependencies":{"node-pty":"^1.1.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/smartshell_4.1.1_1786491457294_0.9651411884476082","host":"s3://npm-registry-packages-npm-production"}},"4.1.2":{"name":"@push.rocks/smartshell","version":"4.1.2","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"author":"Lossless GmbH","license":"MIT","_id":"@push.rocks/smartshell@4.1.2","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"homepage":"https://code.foss.global/push.rocks/smartshell","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"d7c5092f2e86227dc9e4b595dcc05d5f287af0fa","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-4.1.2.tgz","fileCount":26,"integrity":"sha512-R+7n0l+FyS/fgro8ssMR1eSl8t/BRSdUmocjvgTnsIYtTP+RAmSrO47RDwDo7Q82HwH2JMhHJJUEatLPgXqCrg==","signatures":[{"sig":"MEUCIQD+fbC6cRiPjp/pN12NtNVc42HHIa/z0jgzNTiCUIt7yQIgU8zKCCVqOO6/mr3I8/sBrCIMJ+W2bALe9WoThfNvBho=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":214920},"main":"dist_ts/index.js","type":"module","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"description":"A library for executing shell commands using promises.","directories":{},"_nodeVersion":"25.2.1","browserslist":["last 1 chrome versions"],"dependencies":{"which":"^6.0.1","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.2.0","@push.rocks/smartdelay":"^3.1.0","@push.rocks/smartpromise":"^4.2.5"},"_hasShrinkwrap":false,"devDependencies":{"node-pty":"^1.1.0","@types/node":"^26.2.0","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^4.0.0","@git.zone/tsbuild":"^4.4.2"},"peerDependencies":{"node-pty":"^1.1.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/smartshell_4.1.2_1787095881030_0.6193057237518134","host":"s3://npm-registry-packages-npm-production"}},"4.2.0":{"_id":"@push.rocks/smartshell@4.2.0","bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"dist":{"shasum":"2f0425ee5f851055bd843af9a5c65509bb81567f","tarball":"https://registry.npmjs.org/@push.rocks/smartshell/-/smartshell-4.2.0.tgz","fileCount":25,"integrity":"sha512-pm0QjrpPcaK1uAaahMWITQu0MKumc4UQiqA5+cwDqbVf+fnAY1yJLhcSXHdpDo2Rq12jeWtnsUsx4ZoFJ0Xe+A==","signatures":[{"sig":"MEQCIByQ4wWQJ6Q8uFvaHCKZ8lptmSvfhhOlgFkwVbspFlopAiBbaS9W7pqDke/37Nz8nPit21caT+IC3xiV4+mNrM+yJQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICRZ0fP16o84pbEEyAunB6QPCjuBKq90KE6Sq/v3xLEhAiEA75QWO2v+EStYnMq3QLMDHqkotlzRy4hu/rfp12SB1Fo="}],"unpackedSize":218556},"main":"dist_ts/index.js","name":"@push.rocks/smartshell","type":"module","author":"Lossless GmbH","license":"MIT","private":false,"scripts":{"test":"(tstest test/ --verbose --logfile --timeout 20)","build":"(tsbuild tsfolders --web)","buildDocs":"tsdoc"},"typings":"dist_ts/index.d.ts","version":"4.2.0","_npmUser":{"name":"lossless","email":"hello@lossless.com"},"homepage":"https://code.foss.global/push.rocks/smartshell","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"description":"A library for executing shell commands using promises.","directories":{},"maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"browserslist":["last 1 chrome versions"],"dependencies":{"which":"^6.0.1","@types/which":"^3.0.4","@push.rocks/smartexit":"^2.2.0","@push.rocks/smartdelay":"^3.1.0","@push.rocks/smartpromise":"^4.2.5"},"_hasShrinkwrap":false,"devDependencies":{"node-pty":"^1.1.0","@types/node":"^26.5.1","@git.zone/tsrun":"^2.0.6","@git.zone/tstest":"^6.1.1","@git.zone/tsbuild":"^4.4.3"},"peerDependencies":{"node-pty":"^1.1.0"},"peerDependenciesMeta":{"node-pty":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/smartshell_4.2.0_1789675354358_0.9632303795680395"}}},"time":{"created":"2023-07-12T01:02:35.198Z","modified":"2026-09-17T20:02:34.685Z","3.0.3":"2023-07-12T01:02:35.487Z","3.0.4":"2024-03-16T10:19:05.120Z","3.0.5":"2024-04-18T11:43:05.787Z","3.0.6":"2024-09-17T15:02:53.841Z","3.1.0":"2024-12-09T01:39:42.735Z","3.2.0":"2024-12-09T01:52:25.541Z","3.2.1":"2024-12-13T17:55:46.179Z","3.2.2":"2024-12-13T18:04:02.154Z","3.2.3":"2025-02-20T11:37:29.758Z","3.2.4":"2025-08-16T09:53:19.580Z","3.3.0":"2025-08-17T15:20:36.795Z","3.3.2":"2026-03-03T22:36:52.039Z","3.3.3":"2026-03-03T23:42:09.026Z","3.3.4":"2026-03-04T00:04:31.170Z","3.3.5":"2026-03-04T00:49:37.850Z","3.3.6":"2026-03-04T18:14:04.911Z","3.3.7":"2026-03-05T10:18:55.371Z","3.3.8":"2026-03-15T18:42:19.784Z","3.4.0":"2026-05-09T13:48:24.634Z","3.5.0":"2026-05-10T14:33:48.578Z","4.0.0":"2026-08-01T19:34:30.776Z","4.1.0":"2026-08-06T21:31:14.009Z","4.1.1":"2026-08-11T23:37:37.457Z","4.1.2":"2026-08-18T23:31:21.172Z","4.2.0":"2026-09-17T20:02:34.448Z"},"bugs":{"url":"https://gitlab.com/pushrocks/smartshell/issues"},"author":"Lossless GmbH","license":"MIT","homepage":"https://code.foss.global/push.rocks/smartshell","keywords":["shell commands","promises","asynchronous execution","child processes","environment management","command streaming","interactive commands","process management","typescript"],"repository":{"url":"https://code.foss.global/push.rocks/smartshell.git","type":"git"},"description":"A library for executing shell commands using promises.","maintainers":[{"name":"lossless","email":"hello@lossless.com"}],"readme":"# @push.rocks/smartshell\n\n`@push.rocks/smartshell` is a TypeScript-first Node.js library for running shell commands with modern async APIs. It wraps `child_process` in promises, adds strict and silent execution modes, supports streaming and programmatic stdin control, exposes safer shell-free spawn methods for untrusted arguments, and gives you practical process controls like timeouts, process-tree termination, custom environments, working directories, and optional PTY-backed terminal emulation.\n\n## Issue Reporting and Security\n\nFor reporting bugs, issues, or security vulnerabilities, please visit [community.foss.global/](https://community.foss.global/). This is the central community hub for all issue reporting. Developers who sign and comply with our contribution agreement and go through identification can also get a [code.foss.global/](https://code.foss.global/) account to submit Pull Requests directly.\n\n## Install\n\n```bash\npnpm add @push.rocks/smartshell\n```\n\nPTY support is optional and only needed when a command requires a real terminal:\n\n```bash\npnpm add --save-optional node-pty\n```\n\n## Quick Start\n\n```typescript\nimport { Smartshell } from '@push.rocks/smartshell';\n\nconst shell = new Smartshell({\n  executor: 'bash',\n});\n\nconst result = await shell.exec('echo \"hello from smartshell\"');\n\nconsole.log(result.exitCode); // 0\nconsole.log(result.stdout); // hello from smartshell\n```\n\nUse `execSpawn()` whenever command arguments include user input or any other untrusted value:\n\n```typescript\nconst filenameFromUser = 'report.txt; rm -rf /';\n\n// Safe: no shell is used, so metacharacters are treated as argument text.\nconst result = await shell.execSpawn('cat', [filenameFromUser], {\n  silent: true,\n});\n```\n\n## What It Does\n\n- Promise-based command execution for `async`/`await` code.\n- Shell-based methods for trusted command strings.\n- Shell-free spawn methods for safer argument handling.\n- Silent, strict, streaming, passthrough, and interactive-control modes.\n- Process-tree cleanup through `@push.rocks/smartexit`.\n- Bounded timeout termination with configurable graceful-to-forced escalation.\n- `cwd`, `env`, and `AbortSignal` support.\n- Bounded output buffering with `maxBuffer`.\n- Separate `stdout` and `stderr` capture plus Node-observed `combinedOutput` ordering.\n- Optional PTY support through `node-pty` for terminal-native programs.\n- A small `SmartExecution` helper for restarting long-running commands.\n- The `which` utility re-exported for command discovery.\n\n## Execution Modes\n\n### Standard Execution\n\n`exec()` runs a trusted command string through the configured shell and resolves with an `IExecResult`.\n\n```typescript\nconst result = await shell.exec('git --version');\n\nconsole.log(result.exitCode);\nconsole.log(result.stdout);\n```\n\nShell execution is convenient for hardcoded command strings, pipes, redirects, globbing, and shell syntax:\n\n```typescript\nawait shell.exec('mkdir -p dist && cp assets/*.json dist/');\n```\n\n### Silent Execution\n\n`execSilent()` captures output without writing it to the current process stdout.\n\n```typescript\nconst result = await shell.execSilent('node --version');\nconsole.log(result.stdout.trim());\n```\n\n### Strict Execution\n\n`execStrict()` rejects with `SmartshellError` when the command exits with a non-zero code, is terminated by a signal, or reaches its configured timeout. A timed-out command remains a strict failure even if its `SIGTERM` handler exits with code `0`.\n\n```typescript\nimport { SmartshellError } from '@push.rocks/smartshell';\n\ntry {\n  await shell.execStrict('pnpm test');\n} catch (error) {\n  if (error instanceof SmartshellError) {\n    console.error(error.message);\n    console.error(error.exitCode);\n    console.error(error.stderr);\n    console.error(error.timedOut);\n    console.error(error.timeoutMs);\n  }\n}\n```\n\nUse `execStrictSilent()` for strict behavior without console output:\n\n```typescript\nawait shell.execStrictSilent('pnpm build');\n```\n\n### Streaming Execution\n\n`execStreaming()` starts a command and returns immediately with the child process, a final result promise, and process-control helpers.\n\n```typescript\nconst streaming = await shell.execStreaming('pnpm install');\n\nstreaming.childProcess.stdout?.on('data', (chunk) => {\n  process.stdout.write(`[install] ${chunk}`);\n});\n\nconst result = await streaming.finalPromise;\nconsole.log(result.exitCode);\n```\n\nStreaming executions can be controlled explicitly:\n\n```typescript\nconst server = await shell.execStreaming('pnpm dev', false, {\n  cwd: '/path/to/app',\n});\n\nawait server.keyboardInterrupt(); // SIGINT\nawait server.terminate(); // SIGTERM\nawait server.kill(); // SIGKILL\nawait server.customSignal('SIGHUP');\n```\n\n`execStreamingSilent()` starts a streaming command without printing output automatically.\n\n### Passthrough Execution\n\n`execPassthrough()` pipes the current process stdin into the command. This is useful for commands that should receive real user input while still returning a result.\n\n```typescript\nawait shell.execPassthrough('read name && echo \"hello $name\"');\n```\n\n`execStreamingPassthrough()` combines passthrough stdin with the streaming interface.\n\n### Programmatic Input Control\n\n`execInteractiveControl()` returns methods for sending stdin manually.\n\n```typescript\nconst interactive = await shell.execInteractiveControl('cat');\n\nawait interactive.sendLine('first line');\nawait interactive.sendInput('second line without newline');\nawait interactive.sendInput('\\n');\ninteractive.endInput();\n\nconst result = await interactive.finalPromise;\nconsole.log(result.stdout);\n```\n\n`execStreamingInteractiveControl()` gives you both programmatic input and streaming process controls:\n\n```typescript\nconst repl = await shell.execStreamingInteractiveControl('node');\n\nawait repl.sendLine('console.log(21 * 2)');\nawait repl.sendLine('.exit');\n\nawait repl.finalPromise;\n```\n\n### Interactive Shell Execution\n\n`execInteractive()` runs a trusted shell command with inherited stdio. It is meant for fully interactive terminal use and returns `void`; in CI environments it intentionally does nothing.\n\n```typescript\nawait shell.execInteractive('vim readme.md');\n```\n\n## Secure Spawn APIs\n\nThe `execSpawn()` family uses `child_process.spawn()` with `shell: false`. That means shell metacharacters are not interpreted.\n\n```typescript\nconst result = await shell.execSpawn('git', ['status', '--short'], {\n  cwd: '/path/to/repo',\n  silent: true,\n});\n```\n\nFor trusted interactive CLIs that need the real terminal while still avoiding shell parsing, pass `stdio: 'inherit'`:\n\n```typescript\nawait shell.execSpawn('opencode', ['run', '--dir', process.cwd(), prompt], {\n  stdio: 'inherit',\n});\n```\n\nInherited stdio returns an `IExecResult` with the exit code, but output cannot be captured because the child process writes directly to the terminal. Its `stdout`, `stderr`, and `combinedOutput` fields are therefore all empty strings.\n\n### Why Spawn Matters\n\n```typescript\nconst userInput = 'file.txt; rm -rf /';\n\n// Dangerous: shell syntax in userInput can be interpreted.\nawait shell.exec(`cat ${userInput}`);\n\n// Safe: userInput is passed as one literal argument.\nawait shell.execSpawn('cat', [userInput]);\n```\n\n### Spawn Streaming\n\n```typescript\nconst streaming = await shell.execSpawnStreaming('pnpm', ['test'], {\n  cwd: '/path/to/package',\n});\n\nconst result = await streaming.finalPromise;\n```\n\n### Spawn Interactive Control\n\n```typescript\nconst interactive = await shell.execSpawnInteractiveControl('cat', []);\n\nawait interactive.sendLine('hello');\ninteractive.endInput();\n\nconst result = await interactive.finalPromise;\n```\n\nPTY mode supports both shell-command and direct argv-based interactive-control methods.\n\n## PTY Support\n\nSome tools behave differently when they are connected to pipes instead of a real terminal. Editors, REPLs, password prompts, full-screen terminal UIs, readline prompts, and programs that depend on ANSI terminal behavior often need a PTY.\n\nInstall the optional dependency first:\n\n```bash\npnpm add --save-optional node-pty\n```\n\nThen use the PTY-specific methods:\n\n```typescript\nconst prompt = await shell.execInteractiveControlPty(\n  'bash -c \\'read -p \"Name: \" name && echo \"Hello $name\"\\''\n);\n\nawait prompt.sendLine('Ada');\n\nconst result = await prompt.finalPromise;\nconsole.log(result.stdout);\n```\n\nStreaming PTY control works the same way, with PTY-backed process controls:\n\n```typescript\nconst nodeRepl = await shell.execStreamingInteractiveControlPty('node');\n\nawait nodeRepl.sendLine('console.log(\"PTY ready\")');\nawait nodeRepl.sendLine('.exit');\n\nawait nodeRepl.finalPromise;\n```\n\nFor shell-free argv preservation, probe the optional peer and spawn directly:\n\n```typescript\nawait shell.ensurePtySupport();\nconst terminal = await shell.execSpawnStreamingInteractiveControlPty(\n  '/bin/bash',\n  ['-l'],\n  {\n    cwd: '/workspace/project',\n    ptyCols: 120,\n    ptyRows: 30,\n    onData: (chunk) => renderTerminalChunk(chunk),\n  },\n);\n\nawait terminal.resize(160, 40);\nawait terminal.sendInput('pwd\\r');\n```\n\nThe direct argv API is always silent: output is available through `onData` and\n`finalPromise`, but is never mirrored to the parent process stdout.\n\nIts options are intentionally limited to the direct PTY surface:\n\n```typescript\ninterface IPtyDirectSpawnOptions {\n  ptyCols?: number;\n  ptyRows?: number;\n  ptyTerm?: string;\n  maxBuffer?: number;\n  onData?: (chunk: string) => void;\n  timeout?: number;\n  timeoutKillGraceMs?: number;\n  debug?: boolean;\n  env?: NodeJS.ProcessEnv;\n  cwd?: string;\n}\n```\n\nGeneral execution options such as `signal`, `ptyShell`, `silent`, and `strict`\nare not supported by the direct argv API.\n\nPTY output is a single terminal data stream rather than two pipes. PTY results therefore set `stdout === combinedOutput` and `stderr === ''`; `timedOut` still reports whether Smartshell initiated timeout termination. PTY timeouts signal the PTY root with `SIGTERM` and use `timeoutKillGraceMs` for a bounded direct `SIGKILL` escalation. `maxBuffer` bounds the one terminal stream, with truncation represented in `stdout` and `combinedOutput` while `stderr` stays empty. Streaming PTY execution exposes the real node-pty object as `ptyProcess`; it does not claim to be a Node.js `ChildProcess`. Smartshell does not promise process-tree semantics for PTY termination, and rejects an `AbortSignal` option before spawning because node-pty has no equivalent abort contract.\n\n### PTY Flow Control\n\nA PTY child writes as fast as the kernel lets it. When the consumer processes\noutput more slowly (for example a terminal emulator parsing a flood of output),\npause the PTY while the unprocessed backlog is above a high watermark and resume\nit once the backlog drops below a low watermark. While paused, no output is\ndelivered, and the child blocks on write once Node's read buffer and the kernel\nbuffer are full, as it would behind a real terminal. `pause()` and `resume()` are\nidempotent.\n\n```typescript\nconst highWatermark = 256 * 1024;\nconst lowWatermark = 32 * 1024;\nlet backlog = 0;\n\nconst terminal = await shell.execSpawnStreamingInteractiveControlPty('/bin/bash', ['-l'], {\n  onData: (chunk) => {\n    backlog += chunk.length;\n    if (backlog > highWatermark) {\n      terminal.ptyProcess.pause();\n    }\n    // e.g. an xterm.js Terminal, whose write callback runs once the chunk is parsed\n    emulator.write(chunk, () => {\n      backlog -= chunk.length;\n      if (backlog < lowWatermark) {\n        terminal.ptyProcess.resume();\n      }\n    });\n  },\n});\n```\n\nKeep pauses short. node-pty closes the PTY shortly after the child exits (200 ms\non Unix, 1 s on Windows), and output that is still unread then is lost. A child\nthat is blocked on a full buffer cannot exit on its own, but a child whose last\noutput fits into the buffer can. `kill()`, `terminate()` and the `timeout` option\nstill work while paused; the exit is reported after that close delay.\n\n## Runtime Options\n\nMost execution methods accept these options:\n\n```typescript\ninterface IExecRuntimeOptions {\n  ptyCols?: number;\n  ptyRows?: number;\n  ptyTerm?: string;\n  ptyShell?: string;\n  maxBuffer?: number;\n  onData?: (chunk: Buffer | string) => void;\n  timeout?: number;\n  timeoutKillGraceMs?: number;\n  debug?: boolean;\n  env?: NodeJS.ProcessEnv;\n  cwd?: string;\n  signal?: AbortSignal;\n}\n\ntype TExecCommandOptions = IExecRuntimeOptions;\n```\n\n### Working Directory\n\nPrefer the `cwd` option over embedding `cd ... && ...` into command strings:\n\n```typescript\nawait shell.execStrict('pnpm build', {\n  cwd: '/path/to/package',\n});\n\nawait shell.execSpawn('git', ['status', '--short'], {\n  cwd: '/path/to/repo',\n});\n```\n\n### Environment Variables\n\n```typescript\nawait shell.execSpawn('node', ['server.js'], {\n  env: {\n    ...process.env,\n    NODE_ENV: 'production',\n    PORT: '3000',\n  },\n});\n```\n\n### Timeouts\n\nFor piped shell and spawn execution on POSIX, reaching `timeout` atomically marks the result as timed out and sends `SIGTERM` to the detached process tree. If the owned process group remains after `timeoutKillGraceMs`, Smartshell sends `SIGKILL` even when the direct child exited during the grace period. The grace period defaults to `1_000` milliseconds. The configured termination window is therefore `timeout + timeoutKillGraceMs`; when descendants outlive the direct child, the result stays pending until bounded force escalation succeeds or its error is surfaced.\n\nOn Windows, `@push.rocks/smartexit` implements process-tree termination with `taskkill /T /F`, so the first timeout termination request is already forced. The POSIX graceful-then-forced tree guarantee applies only to piped shell and spawn execution, not inherited stdio or PTY execution.\n\n```typescript\nconst result = await shell.execSpawn('sleep', ['10'], {\n  timeout: 500,\n  timeoutKillGraceMs: 1_000,\n});\n\nconsole.log(result.timedOut); // true\n```\n\n`timeout` must be an integer between `1` and `2_147_483_647`. `timeoutKillGraceMs` must be an integer between `0` and `2_147_483_647`, so `0` requests immediate force escalation after the initial termination signal.\n\nAborting a piped execution through `AbortSignal` still rejects with Node's `AbortError`. Smartshell additionally applies the same bounded tree termination so a child that ignores the abort signal cannot retain the execution indefinitely. A tree-signal failure is surfaced instead of silently degrading to a root-only signal. Inherited stdio has only direct-child signal ownership, and Windows uses the immediate forced behavior described above.\n\n### Bounded Output Buffers\n\nPiped shell and spawn executions use one aggregate `maxBuffer` byte budget across stdout and stderr. If the next chunk would exceed the budget, Smartshell stops retaining both streams and returns the exact marker `[Output truncated: aggregate maxBuffer exceeded]` in `stdout`, `stderr`, and `combinedOutput`. Streaming to the console and `onData` continues. `maxBuffer` must be a positive safe integer.\n\n```typescript\nconst result = await shell.exec('long-running-output-command', {\n  maxBuffer: 10 * 1024 * 1024,\n  onData: (chunk) => {\n    // Stream chunks elsewhere while smartshell protects its own buffer.\n    process.stdout.write(chunk);\n  },\n});\n```\n\n### Debug Logging\n\n```typescript\nconst streaming = await shell.execSpawnStreaming('sleep', ['30'], {\n  debug: true,\n});\n\nawait streaming.terminate();\nawait streaming.finalPromise;\n```\n\n## Results and Errors\n\n### `IExecResult`\n\n```typescript\ninterface IExecResult {\n  exitCode: number;\n  stdout: string;\n  stderr: string;\n  combinedOutput: string;\n  timedOut: boolean;\n  signal?: NodeJS.Signals;\n}\n```\n\nFor piped execution, `stdout` contains only stdout and `stderr` contains only stderr. `combinedOutput` contains both streams in the order their chunks were observed by Node; separate OS pipes cannot provide a stronger global byte-write ordering guarantee. `timedOut` is `true` only when Smartshell's configured timeout fired.\n\n### `SmartshellError`\n\nStrict methods reject with `SmartshellError` and expose the command result details directly:\n\n```typescript\nclass SmartshellError extends Error {\n  command: string;\n  result: IExecResult;\n  exitCode: number;\n  stdout: string;\n  stderr: string;\n  combinedOutput: string;\n  timedOut: boolean;\n  timeoutMs?: number;\n  signal?: NodeJS.Signals;\n}\n```\n\n`timeoutMs` contains the configured timeout when one was supplied, while `timedOut` distinguishes an actual timeout from another strict failure. The full result remains available through `error.result`.\n\n### Streaming and Interactive Results\n\n```typescript\ninterface IExecResultStreaming {\n  childProcess: import('child_process').ChildProcess;\n  finalPromise: Promise<IExecResult>;\n  kill: () => Promise<void>;\n  terminate: () => Promise<void>;\n  keyboardInterrupt: () => Promise<void>;\n  customSignal: (signal: import('@push.rocks/smartexit').TProcessSignal) => Promise<void>;\n  sendInput: (input: string) => Promise<void>;\n  sendLine: (line: string) => Promise<void>;\n  endInput: () => void;\n}\n\ninterface IPtyProcess {\n  readonly pid: number;\n  write(data: string | Buffer): void;\n  kill(signal?: string): void;\n  resize(cols: number, rows: number): void;\n  pause(): void; // stop reading output; the child blocks once the buffer is full\n  resume(): void; // continue reading; held-back output arrives in order\n  onData(listener: (data: string) => void): { dispose: () => void };\n  onExit(listener: (event: { exitCode: number; signal?: number }) => void): { dispose: () => void };\n}\n\ninterface IExecResultPtyStreaming {\n  ptyProcess: IPtyProcess;\n  finalPromise: Promise<IExecResult>;\n  kill: () => Promise<void>;\n  terminate: () => Promise<void>;\n  keyboardInterrupt: () => Promise<void>;\n  customSignal: (signal: import('@push.rocks/smartexit').TProcessSignal) => Promise<void>;\n  sendInput: (input: string) => Promise<void>;\n  sendLine: (line: string) => Promise<void>;\n  endInput: () => void;\n  resize: (cols: number, rows: number) => Promise<void>;\n}\n\ninterface IExecResultInteractive extends IExecResult {\n  sendInput: (input: string) => Promise<void>;\n  sendLine: (line: string) => Promise<void>;\n  endInput: () => void;\n  finalPromise: Promise<IExecResult>;\n}\n```\n\n## Waiting for Output\n\n`execAndWaitForLine()` starts a streaming command and resolves when stdout matches a regular expression.\n\n```typescript\nawait shell.execAndWaitForLine(\n  'pnpm dev',\n  /Server listening on port 3000/,\n  false,\n  {\n    timeout: 30_000,\n    timeoutKillGraceMs: 1_000,\n    terminateOnMatch: true,\n    cwd: '/path/to/app',\n  }\n);\n```\n\nUse `execAndWaitForLineSilent()` to suppress automatic output:\n\n```typescript\nawait shell.execAndWaitForLineSilent('node server.js', /ready/, {\n  timeout: 10_000,\n});\n```\n\nIf the process ends before a match or the timeout expires, the promise rejects. A wait timeout and `terminateOnMatch` both reuse Smartshell's owned-tree termination path: `SIGTERM` is followed by bounded `SIGKILL` escalation after `timeoutKillGraceMs`, and any termination failure rejects the helper promise.\n\n## Environment Customization\n\n`ShellEnv` is available through each `Smartshell` instance as `shell.shellEnv`. It lets you source files and add PATH directories before shell-based command strings execute.\n\n```typescript\nconst shell = new Smartshell({\n  executor: 'bash',\n  sourceFilePaths: ['/opt/project/env.sh'],\n  pathDirectories: ['/opt/project/bin'],\n});\n\nshell.shellEnv.addSourceFiles(['./local.env.sh']);\nshell.shellEnv.pathDirArray.push('/custom/bin');\n\nawait shell.exec('my-tool --version');\n```\n\n`ShellEnv` also imports the current `PATH` and appends `SMARTSHELL_PATH` when that environment variable is set. On WSL it filters Windows path entries that commonly break POSIX shell execution.\n\n## SmartExecution\n\n`SmartExecution` is a tiny restart helper for long-running commands such as development servers. It lazily creates its own bash-backed `Smartshell` and keeps one streaming execution active.\n\n```typescript\nimport { SmartExecution } from '@push.rocks/smartshell';\n\nconst devServer = new SmartExecution('pnpm dev');\n\nawait devServer.restart(); // starts the command\nawait devServer.restart(); // kills the current process tree and starts it again\n```\n\nIf multiple restarts are requested while a restart is already in progress, they are collapsed into one additional restart.\n\n## Command Discovery\n\nThe package re-exports `which` for checking whether an executable is available.\n\n```typescript\nimport { which } from '@push.rocks/smartshell';\n\nconst gitPath = await which('git');\nconsole.log(gitPath);\n```\n\n## API Overview\n\n| API | Purpose | Shell interpretation |\n| --- | --- | --- |\n| `new Smartshell({ executor })` | Create an execution context using `bash` or `sh` | Depends on method |\n| `exec(command, options?)` | Run a trusted shell command | Yes |\n| `execSilent(command, options?)` | Run a trusted shell command without automatic output | Yes |\n| `execStrict(command, options?)` | Reject on timeout, non-zero exit, or signal | Yes |\n| `execStrictSilent(command, options?)` | The same strict timeout/exit/signal behavior without automatic output | Yes |\n| `execStreaming(command, silent?, options?)` | Return streaming process controls | Yes |\n| `execStreamingSilent(command, options?)` | Streaming shell execution without automatic output | Yes |\n| `execInteractive(command, options?)` | Inherit stdio for fully interactive terminal use | Yes |\n| `execPassthrough(command, options?)` | Pipe current stdin into the command | Yes |\n| `execStreamingPassthrough(command, options?)` | Streaming plus stdin passthrough | Yes |\n| `execInteractiveControl(command, options?)` | Send stdin programmatically | Yes |\n| `execStreamingInteractiveControl(command, options?)` | Streaming plus programmatic stdin | Yes |\n| `execInteractiveControlPty(command, options?)` | Programmatic stdin through a PTY | Yes |\n| `execStreamingInteractiveControlPty(command, options?)` | Streaming PTY control | Yes |\n| `ensurePtySupport()` | Validate that the optional node-pty peer can load | No process |\n| `execSpawnStreamingInteractiveControlPty(command, args?, options?)` | Shell-free, silent streaming PTY control | No |\n| `execSpawn(command, args?, options?)` | Run an executable with literal args | No |\n| `execSpawnStreaming(command, args?, options?)` | Streaming shell-free spawn | No |\n| `execSpawnInteractiveControl(command, args?, options?)` | Programmatic stdin with shell-free spawn | No |\n| `execAndWaitForLine(command, regex, silent?, options?)` | Resolve when stdout matches | Yes |\n| `execAndWaitForLineSilent(command, regex, options?)` | Silent output wait | Yes |\n| `new SmartExecution(command)` | Restartable streaming command helper | Yes |\n| `which(command)` | Resolve executable path | No command execution |\n\n## Security Guide\n\nCommand execution is powerful and dangerous when untrusted input is involved. The rule is simple: use shell-based APIs for trusted command strings, and use spawn APIs for untrusted arguments.\n\n### Prefer Spawn for Untrusted Data\n\n```typescript\n// Do not do this with untrusted values.\nawait shell.exec(`git checkout ${branchFromRequest}`);\n\n// Do this instead.\nawait shell.execSpawn('git', ['checkout', branchFromRequest]);\n```\n\n### Avoid Shell-Built Paths\n\n```typescript\n// Risky if pathFromUser contains shell syntax.\nawait shell.exec(`cat ${pathFromUser}`);\n\n// Safer: validate the path and pass it as a literal argument.\nawait shell.execSpawn('cat', [pathFromUser]);\n```\n\n### Set Resource Limits\n\nFor user-triggered commands, set a timeout and a sensible buffer limit:\n\n```typescript\nawait shell.execSpawn('convert', [inputPath, outputPath], {\n  timeout: 60_000,\n  maxBuffer: 20 * 1024 * 1024,\n  silent: true,\n});\n```\n\n### Control the Environment\n\nPass an explicit `env` when secrets or inherited environment variables matter:\n\n```typescript\nawait shell.execSpawn('node', ['worker.js'], {\n  env: {\n    PATH: process.env.PATH,\n    NODE_ENV: 'production',\n  },\n});\n```\n\n## Real-World Recipes\n\n### Build Pipeline\n\n```typescript\nconst shell = new Smartshell({ executor: 'bash' });\n\nawait shell.execStrict('rm -rf dist');\nawait shell.execStrict('pnpm build');\nawait shell.execStrict('pnpm test');\n```\n\n### Safe Git Automation\n\n```typescript\nasync function checkoutAndTag(branch: string, tag: string) {\n  const shell = new Smartshell({ executor: 'bash' });\n\n  await shell.execSpawn('git', ['checkout', branch], { strict: true });\n  await shell.execSpawn('git', ['tag', tag], { strict: true });\n}\n```\n\n### Wait for a Development Server\n\n```typescript\nconst server = shell.execAndWaitForLine(\n  'pnpm dev',\n  /ready|listening/i,\n  false,\n  {\n    cwd: '/path/to/app',\n    timeout: 30_000,\n  }\n);\n\nawait server;\n```\n\n### Restart on File Changes\n\n```typescript\nimport { watch } from 'node:fs';\nimport { SmartExecution } from '@push.rocks/smartshell';\n\nconst execution = new SmartExecution('pnpm dev');\n\nawait execution.restart();\n\nwatch('./src', { recursive: true }, async () => {\n  await execution.restart();\n});\n```\n\n## License and Legal Information\n\nThis repository contains open-source code licensed under the MIT License. A copy of the license can be found in [license.md](./license.md).\n\n**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH or third parties, and are not included within the scope of the MIT license granted herein.\n\nUse of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines or the guidelines of the respective third-party owners, and any usage must be approved in writing. Third-party trademarks used herein are the property of their respective owners and used only in a descriptive manner, e.g. for an implementation of an API or similar.\n\n### Company Information\n\nTask Venture Capital GmbH  \nRegistered at District Court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.\n","readmeFilename":""}