{"_id":"@myobie/pty","_rev":"16-efbb045f293726e44227cf63bbe9f080","name":"@myobie/pty","dist-tags":{"latest":"0.10.0"},"versions":{"0.1.0":{"name":"@myobie/pty","version":"0.1.0","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.1.0","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"59871acb88c79c6571919b71a3581a71d5a1ca8e","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.1.0.tgz","fileCount":38,"integrity":"sha512-+l0cO+mCInz/TUAa4AmNuaZb51aGP+igB3ZOK84CNw8Na9pUJbNBdD21UTGTNG7aNIjDXBwe663vlzJ/JOsyGA==","signatures":[{"sig":"MEQCIBgTlbXjPLJdj5L7RQN0wFlf7CaVWMdIhQcjmBWbmfz1AiAMGRcyNqGvmd/4AfRds4Huxj/f2zS09hPIyMMz5TtGRQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":242618},"type":"module","exports":{"./tui":"./src/tui/index.ts","./testing":"./src/testing/index.ts"},"gitHead":"1c8ff25427d5df1a035b270172dacdeee5b8e840","scripts":{"test":"vitest run","prepare":"git config core.hooksPath githooks 2>/dev/null || true; chmod +x node_modules/node-pty/prebuilds/darwin-*/spawn-helper 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","verify-docs":"node scripts/verify-docs.ts","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach support","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"peerDependencies":{"@preact/signals-core":"^1.14.0"},"peerDependenciesMeta":{"@preact/signals-core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pty_0.1.0_1774392074536_0.25195552643811725","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@myobie/pty","version":"0.1.1","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.1.1","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"63523d7d866a75f273b5372a1cc54621af7135b8","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.1.1.tgz","fileCount":39,"integrity":"sha512-VgWXgcNJacnxbTMT1l43L5qJNzSa3WNGSliu2swiiA7+LX/PBR5JG0eDKFCRoSoLTF6hVoe8VF1LkecoQuSlTg==","signatures":[{"sig":"MEUCIQCvA8WkVlYeKjCSHSZvWzKdrDK4J01Xkip1So6+UyRmvwIgCSKB03yZOZkA2zc5Oq9fC428m9Ena5ucMLHQY0Hll6A=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":303731},"type":"module","exports":{"./tui":"./src/tui/index.ts","./testing":"./src/testing/index.ts"},"gitHead":"0bb700c6f11bdbbbe6bbb13c3c327ea26e6ac07b","scripts":{"test":"vitest run","build":"esbuild src/cli.ts --bundle --platform=node --format=esm --outfile=bin/cli.js --external:node-pty --external:@xterm/headless --external:@xterm/addon-serialize --external:@preact/signals-core","prepare":"git config core.hooksPath githooks 2>/dev/null || true; chmod +x node_modules/node-pty/prebuilds/darwin-*/spawn-helper 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach support","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"peerDependencies":{"@preact/signals-core":"^1.14.0"},"peerDependenciesMeta":{"@preact/signals-core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pty_0.1.1_1774474585015_0.6445343591574952","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@myobie/pty","version":"0.1.2","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.1.2","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"1712f441acbf6d5c0b3acf1349255b846eca74e2","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.1.2.tgz","fileCount":68,"integrity":"sha512-/2V5CywU77i1UjGfUA1GGgn+BZvSJWTbGgJiZljZcUai95FoG9KyXpPKPJeqDKwVs3SY0k8aQOyfFF2DvP4C7w==","signatures":[{"sig":"MEUCIQCVkGYzaVuKLLXMm8BbseZdr5cf7uMWIcaySA7tEkAJKAIgLwzFsXgHTYCemxFcOXQ/EvYz7hHC/Iu8LWRJ80v1f74=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":278365},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"ef1c8a4acbeaa700bfba414a0fc558fb3e6d8183","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; chmod +x node_modules/node-pty/prebuilds/darwin-*/spawn-helper 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach support","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"peerDependencies":{"@preact/signals-core":"^1.14.0"},"peerDependenciesMeta":{"@preact/signals-core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pty_0.1.2_1774476815533_0.535150248035595","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@myobie/pty","version":"0.1.3","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.1.3","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"249c16595e14042b14566b403d885830a2153934","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.1.3.tgz","fileCount":68,"integrity":"sha512-ImDIKEmOHcFEWNGbjr8A30oRvweIxloa0qddfu7znbN/PqlC5bhE3O0cGLG4lkBRI1OHkIyCuAKEEEkbbRtjAA==","signatures":[{"sig":"MEQCIDoLH5ikrjpBDzOvTGVUJygpOcAmHy22UBbhI/M/Zz7mAiB2t1odSd8LH0LKshCaIBuYUclP278f6CNRVQC+Q+rkAw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":278405},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"9f15b9d538550ca0969c2fe79d60378a7aaad4a4","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; chmod +x node_modules/node-pty/prebuilds/darwin-*/spawn-helper 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach support","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"peerDependencies":{"@preact/signals-core":"^1.14.0"},"peerDependenciesMeta":{"@preact/signals-core":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/pty_0.1.3_1774531991596_0.7983737135268953","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@myobie/pty","version":"0.2.0","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.2.0","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"2f80e99c116f200a55e02b5c240ca548af4bfff5","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.2.0.tgz","fileCount":70,"integrity":"sha512-SjAIC/L8Pg8qCYU62RzMuojKb/Hb968wsD6KluvA7EKTQOHaey0byjzgrw1cbN5PAfCVdvGd+yr2ufK+wB1IaQ==","signatures":[{"sig":"MEUCIHImvRjIsyMJFCUDcNoTayDWC7zvi/tHHCoIaA/2zGgxAiEA+RcjjhGwx0nWurKBxj6ZD5vIWNXBPQyB/RUDCpg0XWY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":302005},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"d5a54122c10d7c5d54e50ae021163bc0b8bcddb2","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"chmod +x node_modules/node-pty/prebuilds/*/spawn-helper 2>/dev/null || true","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.2.0_1774668595182_0.9689862861655687","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@myobie/pty","version":"0.2.1","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.2.1","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"c6f9e7225dbc7d6afe3c98df181c258813acceda","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.2.1.tgz","fileCount":73,"integrity":"sha512-6Tk0UVe3bpDE78FdZuMH5yQVko1AwtgEgayKxtybfjr103V5cjB85OBkTzfPYUtd6C8868XUDFqNHHkSFTCSGw==","signatures":[{"sig":"MEYCIQDK/pK3w2WkPIsjaKUH7d/LssjK7hAW4eEi5+iXxWiInQIhAPvzJxfZX599AOvAKRArPFpST6UkbBD1G3CVO0USebPC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":321413},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"de8b3d50fb6d6569dfa4d72b4f4360742e28e329","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"chmod +x node_modules/node-pty/prebuilds/*/spawn-helper 2>/dev/null || true","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.2.1_1774694097354_0.1761279856707303","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@myobie/pty","version":"0.2.2","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.2.2","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"b2ef30176b2bdfc0697f7229f4cbd292ab9e9a2c","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.2.2.tgz","fileCount":72,"integrity":"sha512-pfS7ToHJKFpM+W3wN8C1Do+QggNCVQMFwo/mW2A06bXpCTn0RJHoDHne9TGVBx7iI2vK83/NowyLzM1KiZIqNg==","signatures":[{"sig":"MEYCIQDNhzwmcJRPyjjySVsgi65IcDrShsjtlIw7remQnIuT7wIhAJ5nKQ8vhdUZZvj4Kw7+I39majgW9O+XUsYE2Lze3F7P","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":311309},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"2bea3f59954b071f5c85f3e76a1157d26675237f","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"chmod +x node_modules/node-pty/prebuilds/*/spawn-helper 2>/dev/null || true","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.2.2_1774697307513_0.03583565063853289","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@myobie/pty","version":"0.2.3","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.2.3","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"d00074bd60249b8bba36f8f415ac06b6f4e8481e","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.2.3.tgz","fileCount":72,"integrity":"sha512-5N1/qAVNDnm3us4liJLcEBHNY9kMpNF66+qA7AJc6gF5CX8mWwjkqIrRgQV0hZw30oFoyuN0omu3F2KkNXlUOg==","signatures":[{"sig":"MEYCIQDp1c6N1Xe5rv3ynZSB0iX/kLpYeoqPTj9irtk7vkBL8gIhAKV88BOC+BBHkDBy5g3Bn7mSiREnHHKEbJ05+Eh4OMZf","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":313144},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"d67c7c10047dcd394547754d6bed2eca8bc30e89","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"chmod +x node_modules/node-pty/prebuilds/*/spawn-helper 2>/dev/null || true","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.2.3_1774992709421_0.46911536487957584","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@myobie/pty","version":"0.3.0","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.3.0","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"49c30270f689e43bb7fc01a3dc49e8558d872d3f","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.3.0.tgz","fileCount":72,"integrity":"sha512-+Z+4BwqhKH6FukqUya4kuAdjvtovA3aDVZHYL3CPOTarYwwGbJlznfIPxrOfwyojOzWO4uBxQhXdquhxeh7tIw==","signatures":[{"sig":"MEUCIGejU/J4D+dxC6OfU29NfQOI2z1Nln9wfHG+esd4noU4AiEAqu9KGNQIBbY0u8Z9c5UVA9P0ieLx8zNV7HY5RzBmuhE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":316861},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"6360f8209dad24398800529d8363af042da44c83","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"chmod +x node_modules/node-pty/prebuilds/*/spawn-helper 2>/dev/null || true","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.3.0_1774994043347_0.5921171857370562","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@myobie/pty","version":"0.4.0","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.4.0","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"7dfde1120c9fa4e9ed06d56f667126e97f5ed670","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.4.0.tgz","fileCount":72,"integrity":"sha512-giiqUDnZShyhpmr13d/8ayK7eD6p1wa2n6v7IkpRji4FAJC+qslPZ1IdxjpODDYD/ANKoSQj7DVYpIkAZnD6pQ==","signatures":[{"sig":"MEUCIFD09jNNioY7+8+ghOQUpM3ANAtSsLDb5eELz9WcIQskAiEA/7fEfEMd0/DLsy81IufcgSyOqHmAzAQpve6tFToOqzU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":333474},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"8ac8e0e2223812a97632857384e3c1eca492a606","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"chmod +x node_modules/node-pty/prebuilds/*/spawn-helper 2>/dev/null || true","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.4.0_1775207501066_0.7685868420547652","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"@myobie/pty","version":"0.4.1","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.4.1","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"f41b39ed698f47cc4a164eff1934c79b90639cef","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.4.1.tgz","fileCount":72,"integrity":"sha512-ULR16zAfsId0aEbAotslLuICEKD+uNfj5aRzaQX86lpyQAaMBJn9KoUnq2tH12oglcG3AqumeiAqcFCzBPo5Kw==","signatures":[{"sig":"MEYCIQCkP8rEalH+wMivjbupYmODiQyFUJV1idqA6x0ewZ+vDgIhALq660uYyi1kYO23z7Y3ACrS+QquZYEDCiN2EByiq7oM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":333843},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"01cffd805cef69b7d9cf4fc5eedfa84f87869230","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"chmod +x node_modules/node-pty/prebuilds/*/spawn-helper 2>/dev/null || true","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.4.1_1775208095757_0.04360221015252819","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@myobie/pty","version":"0.5.0","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.5.0","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"383cb3dab154ee3babc25dea2156d674e4cb2875","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.5.0.tgz","fileCount":80,"integrity":"sha512-b92cCPlMOCGoV68NLCGFyeLZyxMkbqrXG2cMg+Ac5F3LGu+/FwOCQVdmNns9kBO0EopzWdTp1f4+3nK5jHPd/A==","signatures":[{"sig":"MEUCIQCAWHWxKnAHeE8kl3y4A5zZjsT4cYXA/1UIAfL+u/JX8QIgFsY1dLfozFs/ecI9nzfrCZkTaLm+sJXiLh33OPHIkzI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":380370},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./client":{"types":"./dist/client-api.d.ts","default":"./dist/client-api.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"}},"gitHead":"46519b7278f9f6a2644cf7333678c434b0f9b400","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"node scripts/postinstall.js","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.5.0_1775725355731_0.6475031575561021","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@myobie/pty","version":"0.6.0","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.6.0","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"10e673c0527ff4aef57c6b29c5ca435d85a3ae02","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.6.0.tgz","fileCount":80,"integrity":"sha512-jKM+2gjY/vlqp6zMI1iXa9NAcUjVRF5j9b1wn+YH3/yjvEmbA7Zom3emKAcCPNJUFWs0/ELC1Rtj7Q/3IVD71g==","signatures":[{"sig":"MEQCIB/8HCl9S4qc+pbf6ijVxt/43hNCHM6or9WjmGj7azarAiA8IuGk350YExDAdNfyttDjhyzqTyzEZ1ZDCmpOylkLfA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":385455},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./keys":{"types":"./dist/keys.d.ts","default":"./dist/keys.js"},"./client":{"types":"./dist/client-api.d.ts","default":"./dist/client-api.js"},"./server":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"./protocol":{"types":"./dist/protocol.d.ts","default":"./dist/protocol.js"}},"gitHead":"8b1bb70139c1f6bb829e7554d110a67d34d47207","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"node scripts/postinstall.js","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.6.0_1776027141190_0.7006170658676041","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@myobie/pty","version":"0.8.0","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.8.0","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"5c8125f7ad79d52b7fd84c39c5e3aab5451e4ee3","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.8.0.tgz","fileCount":87,"integrity":"sha512-4tOJrtD6o69Iw+SW1mRw3NA9wSRgs4TeITvoFv+jMfT2xW/Bx1OhX8BUMY8vFR0ApZTYyEliKdtzi1H9/meweg==","signatures":[{"sig":"MEQCIAmlnLa8CS0MXNAWQWY0vHTHvqlfSKq62LhbPxxeN5I4AiB2+gqAAylSzJCKE9llRMdOHAjQWbbw0KgT4aGC6qsamQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":464257},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./keys":{"types":"./dist/keys.d.ts","default":"./dist/keys.js"},"./client":{"types":"./dist/client-api.d.ts","default":"./dist/client-api.js"},"./server":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"./protocol":{"types":"./dist/protocol.d.ts","default":"./dist/protocol.js"}},"gitHead":"ea404018e392e6b1a6e6a248544d0a78c5d27fc9","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"node scripts/postinstall.js","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","smol-toml":"^1.6.1","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.8.0_1776181267486_0.9262079564377235","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@myobie/pty","version":"0.9.0","keywords":["terminal","pty","session","detach","attach","testing","tui"],"license":"MIT","_id":"@myobie/pty@0.9.0","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"homepage":"https://github.com/myobie/pty#readme","bugs":{"url":"https://github.com/myobie/pty/issues"},"bin":{"pty":"bin/pty"},"dist":{"shasum":"81fddeec1c48988ff7d165482aed33fc3ea995fe","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.9.0.tgz","fileCount":89,"integrity":"sha512-cND/hO2LficzvEkx4v2i+gSANw0VWmnWWQTawWr5MMcAb9ijDvnQoKzwO1VXF7cfYjNO3e1KURjuIgnl5k+JiA==","signatures":[{"sig":"MEUCIHECymEyb53Ev2trfXt2BAxCdp8vtWMnF0BVGWZbIXvwAiEAwFyc9Yo/YHD8a9sZqQLClgfr2TH+9B7HBqr6cb3vP8U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":503901},"type":"module","exports":{"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./keys":{"types":"./dist/keys.d.ts","default":"./dist/keys.js"},"./client":{"types":"./dist/client-api.d.ts","default":"./dist/client-api.js"},"./server":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"./protocol":{"types":"./dist/protocol.d.ts","default":"./dist/protocol.js"}},"gitHead":"e48a59b2eb0ce88db8ccc7868a4294e0e8c526e0","scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","typecheck":"tsc","test:watch":"vitest","postinstall":"node scripts/postinstall.js","verify-docs":"node scripts/verify-docs.ts","prepublishOnly":"npm run build","install-completions":"sh scripts/install-completions.sh"},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"repository":{"url":"git+https://github.com/myobie/pty.git","type":"git"},"_npmVersion":"11.11.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","directories":{},"_nodeVersion":"25.8.0","dependencies":{"node-pty":"^1.0.0","smol-toml":"^1.6.1","@xterm/headless":"^6.0.0","@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.1","esbuild":"^0.27.4","typescript":"^5.7.0","@types/node":"^25.3.5","@preact/signals-core":"^1.14.0"},"_npmOperationalInternal":{"tmp":"tmp/pty_0.9.0_1776349244390_0.2672152606318814","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@myobie/pty","version":"0.10.0","description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","type":"module","license":"MIT","repository":{"type":"git","url":"git+https://github.com/myobie/pty.git"},"keywords":["terminal","pty","session","detach","attach","testing","tui"],"bin":{"pty":"bin/pty"},"exports":{"./testing":{"types":"./dist/testing/index.d.ts","default":"./dist/testing/index.js"},"./tui":{"types":"./dist/tui/index.d.ts","default":"./dist/tui/index.js"},"./client":{"types":"./dist/client-api.d.ts","default":"./dist/client-api.js"},"./server":{"types":"./dist/server.d.ts","default":"./dist/server.js"},"./protocol":{"types":"./dist/protocol.d.ts","default":"./dist/protocol.js"},"./keys":{"types":"./dist/keys.d.ts","default":"./dist/keys.js"}},"scripts":{"build":"tsc -p tsconfig.build.json","prepublishOnly":"npm run build","postinstall":"node scripts/postinstall.js","prepare":"git config core.hooksPath githooks 2>/dev/null || true; sh scripts/update-nix-hash.sh 2>/dev/null || true","install-completions":"sh scripts/install-completions.sh","typecheck":"tsc","test":"vitest run","test:watch":"vitest","verify-docs":"node scripts/verify-docs.ts"},"dependencies":{"@preact/signals-core":"^1.14.0","@xterm/addon-serialize":"^0.14.0","@xterm/headless":"^6.0.0","node-pty":"^1.0.0","smol-toml":"^1.6.1"},"devDependencies":{"@preact/signals-core":"^1.14.0","@types/node":"^25.3.5","esbuild":"^0.27.4","typescript":"^5.7.0","vitest":"^4.1.1"},"gitHead":"3145e65149fb80a7c15b3baad4a4b6ab0b5fb203","_id":"@myobie/pty@0.10.0","bugs":{"url":"https://github.com/myobie/pty/issues"},"homepage":"https://github.com/myobie/pty#readme","_nodeVersion":"25.8.0","_npmVersion":"11.11.0","dist":{"integrity":"sha512-G6DajVZUooexpzR5tcKkGLuea9NbiZ3gWPzVyNNFC3OcrJ68OAAvPW0U2vqcyf8Bvdrb075Zw5ISEQvqbOQ2Xg==","shasum":"307666727b6d14b531f01c21c2d9e2500ac54bf7","tarball":"https://registry.npmjs.org/@myobie/pty/-/pty-0.10.0.tgz","fileCount":135,"unpackedSize":720041,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDPFeXOFkjdRq6vGtY9//jmUfQCRUuGq6fvMjHNedtQRAiBpdX4iMRhsh1znNeLXmSRPGzF9ASZ9y7/1R+6kBCkKqw=="}]},"_npmUser":{"name":"myobie","email":"me@nathanherald.com"},"directories":{},"maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pty_0.10.0_1777022143972_0.46775016361778876"},"_hasShrinkwrap":false}},"time":{"created":"2026-03-24T22:41:14.377Z","modified":"2026-04-24T09:15:44.238Z","0.1.0":"2026-03-24T22:41:14.747Z","0.1.1":"2026-03-25T21:36:25.235Z","0.1.2":"2026-03-25T22:13:35.688Z","0.1.3":"2026-03-26T13:33:11.750Z","0.2.0":"2026-03-28T03:29:55.329Z","0.2.1":"2026-03-28T10:34:57.518Z","0.2.2":"2026-03-28T11:28:27.672Z","0.2.3":"2026-03-31T21:31:49.663Z","0.3.0":"2026-03-31T21:54:03.529Z","0.4.0":"2026-04-03T09:11:41.229Z","0.4.1":"2026-04-03T09:21:35.909Z","0.5.0":"2026-04-09T09:02:35.906Z","0.6.0":"2026-04-12T20:52:21.345Z","0.8.0":"2026-04-14T15:41:07.738Z","0.9.0":"2026-04-16T14:20:44.567Z","0.10.0":"2026-04-24T09:15:44.127Z"},"bugs":{"url":"https://github.com/myobie/pty/issues"},"license":"MIT","homepage":"https://github.com/myobie/pty#readme","keywords":["terminal","pty","session","detach","attach","testing","tui"],"repository":{"type":"git","url":"git+https://github.com/myobie/pty.git"},"description":"Persistent terminal sessions with detach/attach, plus a Playwright-style testing library for TUI apps","maintainers":[{"name":"myobie","email":"me@nathanherald.com"}],"readme":"# pty\n\n> **Beta** — the CLI and testing library are usable but the API may change before 1.0.\n\nPersistent terminal sessions. Run a process, detach, reconnect later. From anywhere, locally and over SSH.\n\nUses [@xterm/headless](https://github.com/xtermjs/xterm.js/tree/master/headless) internally.\n\n## Install\n\n```sh\nnpm install -g @myobie/pty\n```\n\nOr with Nix:\n\n```sh\nnix profile install github:myobie/pty   # install the CLI\nnix develop github:myobie/pty           # dev shell with node, npm, native deps\n```\n\nRequires Node.js. Works on macOS and Linux.\n\n## Usage\n\nRun `pty` with no arguments to launch the interactive session manager:\n\n```\n╭─ pty ────────────────────────────────────────────────────────────╮\n│                                                                  │\n│  Filter: (type to filter)                                        │\n│                                                                  │\n│  ● webserver      ~/projects/myapp          node server.js       │\n│  ● worker         ~/projects/myapp          npm run worker       │\n│  ● devlog         ~/projects/myapp          tail -f log/dev.log  │\n│  ○ migrations     (exited 2h ago)           npm run migrate      │\n│  + Create new session...                                         │\n│                                                                  │\n╰──────────────────────────────────────────────────────────────────╯\n ↑↓ select  ⏎ attach  q quit\n```\n\nArrow keys to navigate, type to filter, Enter to attach, `q` to quit. When pty-relay is installed, remote sessions appear grouped by host. Use `host/session` syntax to filter by host (e.g., `prod/api`). Creating a new session walks through a directory picker and name/command prompt.\n\nWhen you detach from a session entered via the interactive list (`Ctrl+\\`), you return to the list. The session keeps running in the background.\n\n### Commands\n\n```sh\npty                                       # interactive session manager\npty --preselect-new                       # open the TUI with \"Create new session...\" selected\npty --filter-tag layout=work              # TUI filtered by tag; new sessions inherit the tag\npty run -- node server.js                 # start a session (random name + auto displayName)\npty run --name myserver -- node server.js # start with an explicit name (still gets a displayName)\npty run --no-display-name -- bash         # random name, no friendly label (good for throwaway shells)\npty run -d -- node server.js              # start in the background\npty run -a -- node server.js              # create or attach if already running\npty run -e -- npm test                    # ephemeral: auto-remove on exit\npty run --tag owner=forge -- node srv.js  # tag a session with metadata\npty run --cwd /path -- node server.js    # run in a specific directory\n\npty rename my-label                       # inside a session: add/change its displayName\npty rename <ref> my-label                 # outside: set displayName on <ref>\npty rename --show <ref>                   # show current displayName\npty rename --clear [ref]                  # remove displayName\n\npty list                                  # show active sessions (tags shown by default)\npty list --tags                           # include internal bookkeeping tags (ptyfile*, strategy, etc.)\npty list --json                           # show as JSON\npty list --remote                         # include remote sessions via pty-relay\npty list --filter-tag role=web            # show only sessions with matching tag (repeatable)\n\npty attach myserver                       # reconnect to a session\npty attach -r myserver                    # reconnect, auto-restart if exited\npty exec -- codex                         # replace this session's process (inside a session)\npty peek myserver                         # print current screen and exit\npty peek --plain myserver                 # print as plain text (no ANSI)\npty peek --full myserver                  # print full scrollback\npty peek --wait \"Listening\" myserver      # wait until text appears on screen\npty peek --wait \"Ready\" -t 10 myserver    # wait with timeout (seconds)\npty peek -f myserver                      # follow output read-only\n\npty send myserver \"hello\"                 # send text (no implicit newline)\npty send myserver $'hello\\n'              # send text with newline (shell syntax)\npty send myserver --seq \"git status\" --seq key:return  # ordered sequence\npty send myserver --seq key:ctrl+c        # send control keys\npty send myserver --paste \"$(cat prompt.md)\"           # wrap as bracketed paste\n\npty stats                                 # live metrics for all sessions\npty stats myserver                        # stats for a specific session\npty stats --json                          # stats as JSON (includes CPU, memory, PIDs)\n\npty events myserver                       # follow events in real-time\npty events --all                          # follow events from all sessions\npty events --recent myserver              # show recent events and exit\npty events --json myserver                # output raw JSONL\n\npty emit user.deploy.started              # emit a user event (inside a session)\npty emit myserver user.build.finished --json '{\"ok\":true}'  # with JSON payload\npty emit myserver user.note --text \"checkpoint reached\"     # with a text payload\n\npty state set myserver port 3000          # set a JSON-parsed state key\npty state set myserver config < cfg.json  # pipe a bigger value from stdin\npty state get myserver port               # print a single key's JSON value\npty state get myserver                    # print the whole bag (pretty JSON)\npty state keys myserver                   # list keys (one per line)\npty state delete myserver port            # remove a key\n\npty restart myserver                      # restart an exited session\npty kill myserver                         # terminate a running session\npty rm myserver                           # remove an exited session's metadata\npty gc                                    # remove all exited sessions\npty tag myserver role=web                 # set tags on a session\npty tag myserver --rm role                # remove a tag\n\npty supervisor start                      # start the session supervisor\npty supervisor stop                       # stop the supervisor\npty supervisor status                     # show supervised sessions\npty supervisor forget myserver            # stop supervising a session\npty supervisor reset myserver             # reset a failed session for retry\npty supervisor launchd install            # install launchd auto-start (macOS)\npty supervisor systemd install            # install user-level systemd auto-start (Linux)\npty supervisor runit install              # install runit service files\n\npty up                                    # start all sessions from ./pty.toml\npty up ./backend                          # start sessions from ./backend/pty.toml\npty up claude dev                         # start specific sessions from ./pty.toml\npty down                                  # stop all sessions from ./pty.toml\npty down claude                           # stop specific sessions\n\npty wrap claude                           # auto-wrap claude in pty sessions\npty unwrap claude                         # remove the wrapper\npty wrap --list                           # show wrapped commands\n```\n\n### Wrapping Commands\n\n`pty wrap` creates a small shell script that shadows a command so it always runs in a pty session:\n\n```sh\npty wrap claude\n# Now running \"claude\" anywhere automatically gets a persistent session\n```\n\nThe wrapper uses `pty run -a` (create or attach if already running), so running the command twice in the same directory reattaches instead of creating a duplicate.\n\nWrappers live in `~/.local/pty/bin/`. Add it to the front of your PATH:\n\n```sh\nexport PATH=\"$HOME/.local/pty/bin:$PATH\"\n```\n\nDetach with `Ctrl+\\`. (Press `Ctrl+\\` twice to send it through to the process.)\n\n### Nesting Prevention\n\nIf you run `pty run` (or a wrapped command) inside an existing pty session, pty detects the nesting via the `PTY_SESSION` environment variable and runs the command directly instead of creating a session-inside-a-session. This means wrapped commands \"just work\" inside pty sessions without double-wrapping.\n\nUse `pty run -d` to explicitly create a background session from inside another session.\n\n### Events\n\nSessions automatically log terminal events — bell, title changes, desktop notifications (OSC 9/99/777), focus requests, and cursor visibility transitions — plus metadata mutations: `display_name_change` on rename, `tags_change` on tag updates, `state.set` / `state.delete` on state bag writes, and any `user.*` events published via `pty emit`. Everything goes into per-session JSONL files.\n\n```sh\npty events myserver              # follow events live (like tail -f)\npty events --all                 # follow all sessions, interleaved\npty events --recent myserver     # dump recent events and exit\npty events --json myserver       # raw JSONL output\n```\n\nEvent files auto-truncate at 1,000 lines and are cleaned up with the 24-hour dead session TTL.\n\n### Project Files\n\nA project can include a `pty.toml` to declare its sessions:\n\n```toml\n[sessions.claude]\ncommand = \"claude --dangerously-skip-permissions\"\ntags = { role = \"agent\" }\n\n[sessions.dev]\ncommand = \"deno task dev\"\ntags = { role = \"build\" }\n\n[sessions.serve]\ncommand = \"bin/serve\"\ntags = { role = \"server\" }\n```\n\nRun `pty up` in the project directory (or `pty up /path/to/project`) to start all sessions. Run `pty down` to stop them. You can also start specific sessions: `pty up dev serve`.\n\n### Supervisor\n\nThe supervisor keeps sessions alive by watching for the `strategy` tag:\n\n```sh\n# Tag a session as permanent\npty tag myserver strategy=permanent\n\n# Start the supervisor\npty supervisor start\n\n# If myserver exits, the supervisor restarts it with exponential backoff\n# Max 5 restarts in 60 seconds before marking as [failed]\n\npty supervisor status            # show supervised sessions\npty supervisor forget myserver   # stop supervising\npty supervisor stop              # stop the supervisor\n```\n\nSessions can be supervised from `pty.toml` by setting the `strategy` tag:\n\n```toml\n[sessions.serve]\ncommand = \"bin/serve\"\ntags = { strategy = \"permanent\" }\n```\n\nFor auto-start:\n\n- macOS: `pty supervisor launchd install` — compiles a small wrapper binary and prompts for Full Disk Access (required for sessions on external/removable volumes)\n- Linux/systemd: `pty supervisor systemd install` — installs a user service in `~/.config/systemd/user/` and enables it immediately. If you want it to start at boot before login, enable linger with `sudo loginctl enable-linger $USER`.\n- runit: `pty supervisor runit install` — writes a `run` script and symlinkable service directory. By default it uses `~/.config/runit/{sv,service}`; on systems like Void you can point it at `/etc/sv` and `/var/service`.\n\n### Plugins\n\nLike `git`, `pty` supports extensions: if you run `pty foo` and there's a `pty-foo` executable in your `$PATH`, pty will run it with the remaining arguments. This lets you build your own subcommands without modifying pty.\n\n## Client API\n\n@myobie/pty exposes a programmatic TypeScript API for building apps on top of pty sessions. Import from `@myobie/pty/client`.\n\n```typescript\nimport {\n  spawnDaemon, listSessions, getSession,\n  SessionConnection, sendData, peekScreen, queryStats,\n  EventFollower, readRecentEvents,\n  extractFilterTags, matchesAllTags,\n} from \"@myobie/pty/client\";\nimport { PtyServer } from \"@myobie/pty/server\";         // native addon (node-pty)\nimport { resolveKey } from \"@myobie/pty/keys\";           // browser-safe\nimport { PacketReader, MessageType } from \"@myobie/pty/protocol\"; // browser-safe\n```\n\n### Managing sessions\n\n```typescript\n// Create a session\nawait spawnDaemon({\n  name: \"myserver\",\n  command: \"node\",\n  args: [\"server.js\"],\n  displayCommand: \"node server.js\",\n  cwd: \"/path/to/project\",\n  rows: 24,\n  cols: 80,\n});\n\n// List and query\nconst sessions = await listSessions();\nconst stats = await queryStats(\"myserver\");\n```\n\n### Connecting to a session\n\n`SessionConnection` provides a bidirectional, event-driven connection without taking over stdin/stdout — ideal for GUI apps, multiplexers, or web interfaces:\n\n```typescript\nconst conn = new SessionConnection({ name: \"myserver\", rows: 24, cols: 80 });\nconst initialScreen = await conn.connect();\n\nconn.on(\"data\", (data) => myTerminalView.write(data));\nconn.on(\"exit\", (code) => console.log(`Exited: ${code}`));\n\nconn.write(\"hello\\r\");\nconn.press(\"ctrl+c\");\nconn.resize(30, 100);\nconn.disconnect();\n```\n\nFor simpler operations:\n\n```typescript\nawait sendData({ name: \"myserver\", data: [\"hello\\r\"] });\nconst screen = await peekScreen({ name: \"myserver\", plain: true });\n```\n\n### Following events\n\n```typescript\nconst follower = new EventFollower({\n  names: [\"myserver\"],\n  onEvent: (event) => console.log(event.type, event.ts),\n});\nfollower.start();\n```\n\nSee **[docs/client.md](docs/client.md)** for the full API reference.\n\n## Testing Library\n\n@myobie/pty includes a terminal testing library — like Playwright, but for the terminal. Spawn any process in a real PTY, send keystrokes, take screenshots, assert on visible output.\n\n```typescript\nimport { Session } from \"@myobie/pty/testing\";\n\nconst session = Session.spawn(\"node\", [\"--experimental-strip-types\", \"my-app.ts\"]);\nawait session.waitForText(\"Ready\");\n\nsession.press(\"down\");\nsession.press(\"return\");\nawait session.waitForText(\"Selected!\");\n\nconst ss = session.screenshot();\nexpect(ss.text).toContain(\"Selected!\");\nexpect(ss.lines[0]).toMatch(/My App/);\n\nsession.press(\"ctrl+c\");\nawait session.waitForAbsent(\"My App\");\nawait session.close();\n```\n\nWorks with any process: CLI tools, interactive TUIs, shells, vim, even `top`. The test runs in a real PTY with a real xterm terminal emulator, so you test exactly what users see.\n\nSee **[docs/testing.md](docs/testing.md)** for the full API reference, key names, patterns, and tips.\n\n## TUI Framework (alpha)\n\n@myobie/pty also includes an experimental declarative TUI framework for building terminal interfaces with reactive signals, layout, and efficient cell-buffer diffing. Import from `@myobie/pty/tui`.\n\n> **Alpha** — the TUI framework API is unstable and will change. Use it for experiments, not production.\n\nThe `demos/` directory has four working apps built with the framework:\n\n- **file-browser** — two-pane directory tree + file preview with soft-wrap and markdown highlighting\n- **reminders** — full CRUD backed by `.md` files, three views (list, board, calendar), overlays\n- **agent-teams** — live dashboard of a simulated AI agent hierarchy with real-time updates\n- **playground** — interactive catalog of every TUI widget — atoms, layout, inputs, lists, data, overlays, and composition patterns, each with a live example and source snippet. A reference for anyone building on the TUI framework.\n\nRun them with `node --experimental-strip-types demos/{name}/main.ts` (or `./demos/run <name>`). Each demo includes unit tests and PTY integration tests that exercise the testing library.\n\n## Skill Reference\n\nFor AI coding agents and automation, see **[docs/SKILL.md](docs/SKILL.md)** — a concise guide to running and managing background processes with pty, including session lifecycle, common patterns, and rules for well-behaved agents.\n\n## Tab Completion\n\n```sh\nbrew install bash-completion  # required for bash on macOS; zsh works out of the box\nnpm run install-completions\n```\n\n## Prior Art\n\npty focuses on session persistence only — no splits, no panes, no window management. On mobile we don't need or want splits, and on desktop we have kitty/ghostty/native terminal splits. Keep things simple.\n\n- [abduco](https://github.com/martanne/abduco) — minimal session management for terminal programs, handling detach and reattach cleanly. A major inspiration for pty.\n- [dtach](https://github.com/crigler/dtach) — emulates the detach feature of screen with minimal overhead.\n- [GNU Screen](https://www.gnu.org/software/screen/) — the original terminal multiplexer that pioneered session persistence.\n- [tmux](https://github.com/tmux/tmux) — modern terminal multiplexer with session, window, and pane management.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}