{"_id":"@akaoio/battle","_rev":"9-efc2ab407b5b38339b3e35fe636eb872","name":"@akaoio/battle","dist-tags":{"latest":"1.2.3"},"versions":{"1.0.0":{"name":"@akaoio/battle","version":"1.0.0","keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"author":{"name":"AKAO.IO"},"license":"MIT","_id":"@akaoio/battle@1.0.0","maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"bin":{"battle":"dist/cli.js"},"dist":{"shasum":"1c210640559700099a69b95d8417a3c237094307","tarball":"https://registry.npmjs.org/@akaoio/battle/-/battle-1.0.0.tgz","fileCount":14,"integrity":"sha512-q5kWd2BuDdy4Ru1hHR7OjU3EzWyREWefZx3TTki7oHKXC8ZVwa6UKk4cw2S29PvzfsTP8bHOStJKFWUkDr8dHg==","signatures":[{"sig":"MEUCIQC0fdVIcXbfaxlGbDexQaWUTrRchbZOcOFgn5afqyRfqQIgOljE3/N9yf5q28P26QV5dY3eDe7RqEpxxEvVt8A6NxY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":216315},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"71d89caed22f00e202937a956ee20f38fb2f0433","scripts":{"dev":"tsx src/cli.ts","doc":"node script/generate-docs.js","docs":"node script/generate-docs.js","test":"npm run build && tsx test/battle.test.ts","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts --clean","format":"prettier --write .","test:all":"npm run build && tsx test/battle.test.ts && tsx test/replay.test.ts","typecheck":"tsc --noEmit","test:quick":"tsx test/self.test.ts","build:watch":"tsup src/index.ts src/cli.ts --format cjs,esm --dts --watch","test:battle":"node dist/cli.js test","test:replay":"npm run build && tsx test/replay.test.ts","test:viewport":"tsx test/viewport.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"akaoio","email":"dev@akao.io"},"_npmVersion":"9.2.0","description":"Universal terminal application testing framework with real PTY emulation and screenshots","directories":{},"_nodeVersion":"18.19.0","dependencies":{"chalk":"^4.1.2","yargs":"^17.7.2","node-pty":"^1.0.0","terminal-kit":"^3.0.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","tsup":"^8.5.0","prettier":"^3.0.0","typescript":"^5.9.2","@types/node":"^20.19.11","@types/yargs":"^17.0.24","@akaoio/composer":"^0.2.3","@types/terminal-kit":"^2.5.6"},"_npmOperationalInternal":{"tmp":"tmp/battle_1.0.0_1756039166503_0.6951558852231299","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@akaoio/battle","version":"1.1.0","keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"author":{"name":"AKAO.IO"},"license":"MIT","_id":"@akaoio/battle@1.1.0","maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"bin":{"battle":"dist/cli.js"},"dist":{"shasum":"95a8270087591a8907954c15edbcd83c5e37f345","tarball":"https://registry.npmjs.org/@akaoio/battle/-/battle-1.1.0.tgz","fileCount":18,"integrity":"sha512-CBcRwlGlnemljXgbCDH/IC+Rw3ema5527XmAgn+wP2WpUhggikOdo0De63l7EnTGl3oLpjyktOJ7XRB1ZJWCCQ==","signatures":[{"sig":"MEUCIQC1Ui35mRQiZDKpdeV/6P/qGt5jq3mlL4zsI6zTFFZbsAIgLJ5192r9IhQBnWsicQ1jpy2pDENHFcXI1zZFU9O7rkM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":674774},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"bun":">=1.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"7e1e1d2c19193daca199d990ea252d2d7e2f2171","scripts":{"dev":"tsx src/cli.ts","doc":"node script/generate-docs.js","docs":"node script/generate-docs.js","test":"npm run build && tsx test/index.test.ts","build":"tsup src/index.ts src/cli.ts --format cjs,esm --dts --clean","format":"prettier --write .","test:cli":"node dist/cli.js test","typecheck":"tsc --noEmit","test:quick":"tsx test/self.test.ts","build:watch":"tsup src/index.ts src/cli.ts --format cjs,esm --dts --watch","test:battle":"npm run build && tsx test/Battle/index.test.ts","test:legacy":"tsx test/battle.test.ts","test:replay":"npm run build && tsx test/Replay/index.test.ts","test:runner":"npm run build && tsx test/Runner/index.test.ts","test:silent":"npm run build && tsx test/Silent/index.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"akaoio","email":"dev@akao.io"},"_npmVersion":"9.2.0","description":"Universal terminal application testing framework with real PTY emulation and screenshots","directories":{},"_nodeVersion":"18.19.0","dependencies":{"chalk":"^4.1.2","yargs":"^17.7.2","node-pty":"^1.0.0","terminal-kit":"^3.0.0","@akaoio/ruspty":"^3.5.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","tsup":"^8.5.0","prettier":"^3.0.0","typescript":"^5.9.2","@types/node":"^20.19.11","@types/yargs":"^17.0.24","@akaoio/composer":"^0.2.3","@types/terminal-kit":"^2.5.6"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/battle_1.1.0_1756102007050_0.7195947538315397","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@akaoio/battle","version":"1.1.1","keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"author":{"name":"AKAO.IO"},"license":"MIT","_id":"@akaoio/battle@1.1.1","maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"bin":{"battle":"dist/cli.js"},"dist":{"shasum":"6054bd98e1d0fdeb004f7fd80ed03c465d59ba47","tarball":"https://registry.npmjs.org/@akaoio/battle/-/battle-1.1.1.tgz","fileCount":15,"integrity":"sha512-2Hz3iffqvJyR4hexJAx8QHn3XYanHf+1m5dTuhlFwJ46tV0CL2UidUQG5rqIJggHqzuH3kuG81Vf0rAgNxScDg==","signatures":[{"sig":"MEUCID3l3B7tqCotStgDQKq9tj/hLsCPbj8DPPQXobH5/B57AiEApKPiYfKQT/vNNzFbt96pChAtwY6kJXpC4UT3vwjCLUE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2492570},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"bun":">=1.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"54c9ee232780961f016dcc3282867c20923a5e1f","scripts":{"dev":"tsx src/cli.ts","test":"npm run build && tsx test/index.test.ts","build":"akao-build","format":"prettier --write .","test:cli":"node dist/cli.js test","test:self":"npm run build && node test/battle-self-test.js","typecheck":"tsc --noEmit","docs:build":"npx @akaoio/composer build","docs:watch":"npx @akaoio/composer watch","test:quick":"tsx test/self.test.ts","build:watch":"akao-build --watch","test:battle":"npm run build && tsx test/Battle/index.test.ts","test:legacy":"tsx test/battle.test.ts","test:replay":"npm run build && tsx test/Replay/index.test.ts","test:runner":"npm run build && tsx test/Runner/index.test.ts","test:silent":"npm run build && tsx test/Silent/index.test.ts","prepublishOnly":"npm run build"},"_npmUser":{"name":"akaoio","email":"dev@akao.io"},"_npmVersion":"9.2.0","description":"Universal terminal application testing framework with real PTY emulation and screenshots","directories":{},"_nodeVersion":"18.19.0","dependencies":{"chalk":"^4.1.2","yargs":"^17.7.2","node-pty":"^1.0.0","terminal-kit":"^3.0.0","@akaoio/ruspty":"^3.5.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","tsup":"^8.5.0","prettier":"^3.0.0","typescript":"^5.9.2","@types/node":"^20.19.11","@types/yargs":"^17.0.24","@akaoio/builder":"file:../builder","@akaoio/composer":"^0.2.3","@types/terminal-kit":"^2.5.6"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/battle_1.1.1_1756111717662_0.28868429036832555","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@akaoio/battle","version":"1.1.2","keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"author":{"name":"AKAO.IO"},"license":"MIT","_id":"@akaoio/battle@1.1.2","maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"bin":{"battle":"dist/cli.js"},"dist":{"shasum":"18c9b540b94fdda65fbe80549a94f7f3e4d3eed0","tarball":"https://registry.npmjs.org/@akaoio/battle/-/battle-1.1.2.tgz","fileCount":15,"integrity":"sha512-dvajESSAxRbFw9lJJbTzOSyyuKa8v0seESOxuEhQ8/1toGP+tY4+PEvNCoeL6kea+BoKsLYZJbye0ymM16E7+A==","signatures":[{"sig":"MEUCIQCJe/d6Y9UUKVvN7+wqcUiaRe5vkGYRJVFWnB+lPj8JvAIgMdTob0dxXCbqebs7W3pKStfsC6UjONbuLXzGcuqeDqg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2493482},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"bun":">=1.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"83c5884c5ff07477512e8e404a30702f291d7daf","scripts":{"dev":"tsx src/cli.ts","test":"npm run build && tsx test/index.test.ts","build":"akao-build","format":"prettier --write .","test:cli":"node dist/cli.js test","test:edge":"npm run build && tsx test/EdgeCase/index.test.ts","test:self":"npm run build && node test/battle-self-test.js","typecheck":"tsc --noEmit","docs:build":"npx @akaoio/composer build","docs:watch":"npx @akaoio/composer watch","test:quick":"tsx test/self.test.ts","build:watch":"akao-build --watch","test:battle":"npm run build && tsx test/Battle/index.test.ts","test:legacy":"tsx test/battle.test.ts","test:replay":"npm run build && tsx test/Replay/index.test.ts","test:runner":"npm run build && tsx test/Runner/index.test.ts","test:silent":"npm run build && tsx test/Silent/index.test.ts","prepublishOnly":"npm run build","test:integration":"npm run build && tsx test/Integration/index.test.ts"},"_npmUser":{"name":"akaoio","email":"dev@akao.io"},"_npmVersion":"9.2.0","description":"Universal terminal application testing framework with real PTY emulation and screenshots","directories":{},"_nodeVersion":"18.19.0","dependencies":{"chalk":"^4.1.2","yargs":"^17.7.2","node-pty":"^1.0.0","terminal-kit":"^3.0.0","@akaoio/ruspty":"^3.5.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","tsup":"^8.5.0","prettier":"^3.0.0","typescript":"^5.9.2","@types/node":"^20.19.11","@types/yargs":"^17.0.24","@akaoio/builder":"file:../builder","@akaoio/composer":"^0.2.3","@types/terminal-kit":"^2.5.6"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/battle_1.1.2_1756115281753_0.06851074765974818","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@akaoio/battle","version":"1.1.3","keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"author":{"name":"AKAO.IO"},"license":"MIT","_id":"@akaoio/battle@1.1.3","maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"bin":{"battle":"dist/cli.js"},"dist":{"shasum":"b492db40d933fbb6443bc8b2f19b645e5d3e4a83","tarball":"https://registry.npmjs.org/@akaoio/battle/-/battle-1.1.3.tgz","fileCount":15,"integrity":"sha512-ilIvih9TCwIT/UW3eq9p3WX/x5Eal8bDtrBALak9a7KOHzzUmwxIpbAth3QZqUHtVbI0sHUr6taX8OKbyLggBw==","signatures":[{"sig":"MEUCIADcM+CUhnVY3aiaI8hcBwFjtaP+jlZKPw6voQSe3ElrAiEA+/VbkZQf+QwtzXbIAPQsdKuGhl6UE8nEdPGC3+TYPoY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2493101},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"bun":">=1.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"fed383d8206f2d1fc2a1715418441615fd86357f","scripts":{"dev":"tsx src/cli.ts","test":"npm run build && tsx test/index.test.ts","build":"akao-build","format":"prettier --write .","test:cli":"node dist/cli.js test","test:edge":"npm run build && tsx test/EdgeCase/index.test.ts","test:self":"npm run build && node test/battle-self-test.js","typecheck":"tsc --noEmit","docs:build":"npx @akaoio/composer build","docs:watch":"npx @akaoio/composer watch","test:quick":"tsx test/self.test.ts","build:watch":"akao-build --watch","test:battle":"npm run build && tsx test/Battle/index.test.ts","test:legacy":"tsx test/battle.test.ts","test:replay":"npm run build && tsx test/Replay/index.test.ts","test:runner":"npm run build && tsx test/Runner/index.test.ts","test:silent":"npm run build && tsx test/Silent/index.test.ts","prepublishOnly":"npm run build","test:integration":"npm run build && tsx test/Integration/index.test.ts"},"_npmUser":{"name":"akaoio","email":"dev@akao.io"},"_npmVersion":"9.2.0","description":"Universal terminal application testing framework with real PTY emulation and screenshots","directories":{},"_nodeVersion":"18.19.0","dependencies":{"chalk":"^4.1.2","yargs":"^17.7.2","node-pty":"^1.0.0","terminal-kit":"^3.0.0","@akaoio/ruspty":"^3.5.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","tsup":"^8.5.0","prettier":"^3.0.0","typescript":"^5.9.2","@types/node":"^20.19.11","@types/yargs":"^17.0.24","@akaoio/builder":"workspace:*","@akaoio/composer":"workspace:*","@types/terminal-kit":"^2.5.6"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/battle_1.1.3_1756119474563_0.8067114249363192","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@akaoio/battle","version":"1.2.0","keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"author":{"name":"AKAO.IO"},"license":"MIT","_id":"@akaoio/battle@1.2.0","maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"bin":{"battle":"dist/cli.js"},"dist":{"shasum":"b12a62396146dc75a57dbe93797b9b51a6949d97","tarball":"https://registry.npmjs.org/@akaoio/battle/-/battle-1.2.0.tgz","fileCount":43,"integrity":"sha512-cpNb5Bo23OBYeU11bi0skWU0y/UdDxZbZvRA9EXJ5riQOLYyhD1qUgdUHNJw9zj/r5RxAk49gMW08yugNfMy0w==","signatures":[{"sig":"MEUCIQDtHRsrH78OBG4UejTGpZ8rv04s1arLg4qcX/Vcl7xVzQIgciiIRuy8NoSgXMXw6ROc0ydz0ZI72BUV9pWaIl2Rsuc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2030447},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"bun":">=1.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8e6ab5f3008de7601d7ca023d42729e0b3e96fbd","scripts":{"dev":"tsx src/cli.ts","test":"npm run build && tsx test/index.test.ts","build":"akao-build","format":"prettier --write .","test:cli":"node dist/cli.js test","build:dev":"akao-build","test:edge":"npm run build && tsx test/EdgeCase/index.test.ts","test:self":"npm run build && node test/battle-self-test.js","typecheck":"tsc --noEmit","build:prod":"akao-build","build:test":"akao-build","docs:build":"npx @akaoio/composer build","docs:watch":"npx @akaoio/composer watch","test:quick":"tsx test/self.test.ts","build:clean":"akao-build --clean-only","build:watch":"akao-build --watch","test:battle":"npm run build && tsx test/Battle/index.test.ts","test:legacy":"tsx test/battle.test.ts","test:replay":"npm run build && tsx test/Replay/index.test.ts","test:runner":"npm run build && tsx test/Runner/index.test.ts","test:silent":"npm run build && tsx test/Silent/index.test.ts","build:analyze":"ANALYZE=true akao-build","prepublishOnly":"npm run build","test:integration":"npm run build:test && tsx test/Integration/index.test.ts"},"_npmUser":{"name":"akaoio","email":"dev@akao.io"},"_npmVersion":"9.2.0","description":"Universal terminal application testing framework with real PTY emulation and screenshots","directories":{},"_nodeVersion":"18.19.0","dependencies":{"chalk":"^4.1.2","yargs":"^17.7.2","node-pty":"^1.0.0","terminal-kit":"^3.0.0","@akaoio/ruspty":"^3.5.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","tsup":"^8.5.0","prettier":"^3.0.0","@types/bun":"^1.2.21","typescript":"^5.9.2","@types/node":"^20.19.11","@types/yargs":"^17.0.33","@akaoio/builder":"*","@akaoio/composer":"*","@types/terminal-kit":"^2.5.6"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/battle_1.2.0_1756198973237_0.03807530922351643","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@akaoio/battle","version":"1.2.1","keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"author":{"name":"AKAO.IO"},"license":"MIT","_id":"@akaoio/battle@1.2.1","maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"bin":{"battle":"dist/cli.js"},"dist":{"shasum":"586df7c333de7c151c9750b00095179b6854d08d","tarball":"https://registry.npmjs.org/@akaoio/battle/-/battle-1.2.1.tgz","fileCount":43,"integrity":"sha512-i4czvuZkzwikr/JaPlxrO+yrTD6NFKNYVei7ms69Ex8oQ5uuRYNo5pJLrThbRJRfwA9zZEpUraffPg8tW/5KIQ==","signatures":[{"sig":"MEUCIQChxHSwihYzYlRffI2/5Tuex57K8HR/VSyTe9PnA7HV1wIgHWOXo1Zuj28+oZyvMZH9ZXbhy1fRDAs1n5nBzwxGIEA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2035396},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"bun":">=1.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8cd5bcab244fe600080d38aa5111dbfcb561d83e","scripts":{"dev":"tsx src/cli.ts","test":"npm run build && tsx test/index.test.ts","build":"akao-build","format":"prettier --write .","test:cli":"node dist/cli.js test","build:dev":"akao-build","test:edge":"npm run build && tsx test/EdgeCase/index.test.ts","test:self":"npm run build && node test/battle-self-test.js","typecheck":"tsc --noEmit","build:prod":"akao-build","build:test":"akao-build","docs:build":"npx @akaoio/composer build composer.config.cjs","docs:watch":"npx @akaoio/composer watch composer.config.cjs","test:quick":"tsx test/self.test.ts","build:clean":"akao-build --clean-only","build:watch":"akao-build --watch","test:battle":"npm run build && tsx test/Battle/index.test.ts","test:legacy":"tsx test/battle.test.ts","test:replay":"npm run build && tsx test/Replay/index.test.ts","test:runner":"npm run build && tsx test/Runner/index.test.ts","test:silent":"npm run build && tsx test/Silent/index.test.ts","build:analyze":"ANALYZE=true akao-build","prepublishOnly":"npm run build","test:integration":"npm run build:test && tsx test/Integration/index.test.ts"},"_npmUser":{"name":"akaoio","email":"dev@akao.io"},"_npmVersion":"9.2.0","description":"Universal terminal application testing framework with real PTY emulation and screenshots","directories":{},"_nodeVersion":"18.19.0","dependencies":{"chalk":"^4.1.2","yargs":"^17.7.2","node-pty":"^1.0.0","terminal-kit":"^3.0.0","@akaoio/ruspty":"^3.5.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","tsup":"^8.5.0","prettier":"^3.0.0","@types/bun":"^1.2.21","typescript":"^5.9.2","@types/node":"^20.19.11","@types/yargs":"^17.0.33","@akaoio/builder":"*","@akaoio/composer":"*","@types/terminal-kit":"^2.5.7"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/battle_1.2.1_1756438802987_0.2860945721534476","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"@akaoio/battle","version":"1.2.2","keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"author":{"name":"AKAO.IO"},"license":"MIT","_id":"@akaoio/battle@1.2.2","maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"bin":{"battle":"dist/cli.js"},"dist":{"shasum":"2dc2044a6561356c379ad5a416cb3eebc542b997","tarball":"https://registry.npmjs.org/@akaoio/battle/-/battle-1.2.2.tgz","fileCount":47,"integrity":"sha512-vVO4PBuyHi06rKrSsUaq+jSsdf+p06qoN5swB1yh75eWUH3EURJArmrI68USkygicQDluRLU6LysElaFusoDug==","signatures":[{"sig":"MEYCIQDb+25tzy2rnVxQJS9Vy0Xtg+iOvqpG8o9B63ddm7Z9gwIhAJMywnDjjFQDtThKIGA/IOaYf/jZwmNUiU8aB9IVsu0D","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2068244},"main":"dist/index.cjs","type":"module","types":"dist/index.d.ts","module":"dist/index.js","engines":{"bun":">=1.0.0","node":">=18.0.0"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"8545b9cf20d31307f48b258f8dc9c46e319adb73","scripts":{"dev":"tsx src/cli.ts","test":"npm run build && tsx test/index.test.ts","build":"akao-build","format":"prettier --write .","test:cli":"node dist/cli.js test","build:dev":"akao-build","test:edge":"npm run build && tsx test/EdgeCase/index.test.ts","test:self":"npm run build && node test/battle-self-test.js","typecheck":"tsc --noEmit","build:prod":"akao-build","build:test":"akao-build","docs:build":"npx @akaoio/composer build composer.config.js","docs:watch":"npx @akaoio/composer watch composer.config.js","test:quick":"tsx test/self.test.ts","build:clean":"akao-build --clean-only","build:watch":"akao-build --watch","test:battle":"npm run build && tsx test/Battle/index.test.ts","test:legacy":"tsx test/battle.test.ts","test:replay":"npm run build && tsx test/Replay/index.test.ts","test:runner":"npm run build && tsx test/Runner/index.test.ts","test:silent":"npm run build && tsx test/Silent/index.test.ts","build:analyze":"ANALYZE=true akao-build","prepublishOnly":"npm run build","test:integration":"npm run build:test && tsx test/Integration/index.test.ts"},"_npmUser":{"name":"akaoio","email":"dev@akao.io"},"_npmVersion":"9.2.0","description":"Universal terminal application testing framework with real PTY emulation and screenshots","directories":{},"_nodeVersion":"18.19.0","dependencies":{"chalk":"^4.1.2","yargs":"^17.7.2","node-pty":"^1.0.0","terminal-kit":"^3.0.0","@akaoio/ruspty":"^3.5.5"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.4","tsup":"^8.5.0","prettier":"^3.0.0","@types/bun":"^1.2.21","typescript":"^5.9.2","@types/node":"^20.19.11","@types/yargs":"^17.0.33","@akaoio/builder":"*","@akaoio/composer":"*","@types/terminal-kit":"^2.5.7"},"optionalDependencies":{"node-pty":"^1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/battle_1.2.2_1756440080709_0.24317282886734826","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"@akaoio/battle","version":"1.2.3","description":"Universal terminal application testing framework with real PTY emulation and screenshots","type":"module","main":"dist/index.cjs","module":"dist/index.js","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"bin":{"battle":"dist/cli.js"},"scripts":{"build":"akao-build","build:dev":"akao-build","build:prod":"akao-build","build:test":"akao-build","build:analyze":"ANALYZE=true akao-build","build:watch":"akao-build --watch","build:clean":"akao-build --clean-only","dev":"tsx src/cli.ts","test":"npm run build && tsx test/index.test.ts","test:self":"npm run build && node test/battle-self-test.js","test:battle":"npm run build && tsx test/Battle/index.test.ts","test:replay":"npm run build && tsx test/Replay/index.test.ts","test:runner":"npm run build && tsx test/Runner/index.test.ts","test:silent":"npm run build && tsx test/Silent/index.test.ts","test:edge":"npm run build && tsx test/EdgeCase/index.test.ts","test:integration":"npm run build:test && tsx test/Integration/index.test.ts","test:quick":"tsx test/self.test.ts","test:legacy":"tsx test/battle.test.ts","test:cli":"node dist/cli.js test","docs:build":"npx @akaoio/composer build composer.config.js","docs:watch":"npx @akaoio/composer watch composer.config.js","typecheck":"tsc --noEmit","format":"prettier --write .","prepublishOnly":"npm run build"},"keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"author":{"name":"AKAO.IO"},"license":"MIT","dependencies":{"chalk":"^4.1.2","terminal-kit":"^3.0.0","yargs":"^17.7.2","node-pty":"^1.0.0","@akaoio/ruspty":"^3.6.1","@replit/ruspty":"^3.5.2","@replit/ruspty-linux-x64-gnu":"^3.5.2","@replit/ruspty-darwin-x64":"^3.5.2","@replit/ruspty-darwin-arm64":"^3.5.2","@akaoio/ruspty-linux-arm64-gnu":"^3.6.1"},"optionalDependencies":{"node-pty":"^1.0.0","@akaoio/ruspty":"^3.6.1","@replit/ruspty":"^3.5.2","@replit/ruspty-linux-x64-gnu":"^3.5.2","@replit/ruspty-darwin-x64":"^3.5.2","@replit/ruspty-darwin-arm64":"^3.5.2","@akaoio/ruspty-linux-arm64-gnu":"^3.6.1"},"devDependencies":{"@akaoio/builder":"*","@akaoio/composer":"*","@types/bun":"^1.2.21","@types/node":"^20.19.11","@types/terminal-kit":"^2.5.7","@types/yargs":"^17.0.33","prettier":"^3.0.0","tsup":"^8.5.0","tsx":"^4.20.4","typescript":"^5.9.2"},"engines":{"node":">=18.0.0","bun":">=1.0.0"},"gitHead":"8e92835c6fa3a2a25a69f08840f74c4738021fde","_id":"@akaoio/battle@1.2.3","_nodeVersion":"18.19.0","_npmVersion":"9.2.0","dist":{"integrity":"sha512-9BcsOaqwjgA+KQxxMckQf9MZLYhvrHD5Q7OdUe3GXqbxRgsDkFOyMqAzqDP5NbGvXKYqxjE0MwDR/heQoe8cfw==","shasum":"23761f753f3006769b9c17e0063914d51632afe3","tarball":"https://registry.npmjs.org/@akaoio/battle/-/battle-1.2.3.tgz","fileCount":47,"unpackedSize":2071059,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIAI4EypZqJx23nHEh1RvwCFNHc3v1rpIPPFdfbjjVjz/AiEAxclS9FYCtY4LIv+x9ABRW1NGDThdr90sxq5u3OmEGBk="}]},"_npmUser":{"name":"akaoio","email":"dev@akao.io"},"directories":{},"maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/battle_1.2.3_1756462116870_0.34581004345481925"},"_hasShrinkwrap":false}},"time":{"created":"2025-08-24T12:39:26.420Z","modified":"2025-08-29T10:08:37.287Z","1.0.0":"2025-08-24T12:39:26.711Z","1.1.0":"2025-08-25T06:06:47.267Z","1.1.1":"2025-08-25T08:48:37.871Z","1.1.2":"2025-08-25T09:48:01.971Z","1.1.3":"2025-08-25T10:57:54.751Z","1.2.0":"2025-08-26T09:02:53.455Z","1.2.1":"2025-08-29T03:40:03.270Z","1.2.2":"2025-08-29T04:01:20.983Z","1.2.3":"2025-08-29T10:08:37.105Z"},"author":{"name":"AKAO.IO"},"license":"MIT","keywords":["test","testing","terminal","tui","pty","cli","screenshot","integration"],"description":"Universal terminal application testing framework with real PTY emulation and screenshots","maintainers":[{"name":"akaoio","email":"dev@akao.io"}],"readme":"# @akaoio/battle\n\n> Real PTY testing with StarCraft-style replay capabilities\n\n[![CI/CD](https://github.com/akaoio/battle/actions/workflows/ci.yml/badge.svg)](https://github.com/akaoio/battle/actions/workflows/ci.yml)\n[![Version](https://img.shields.io/npm/v/@akaoio/battle.svg)](https://www.npmjs.com/package/@akaoio/battle)\n[![License](https://img.shields.io/npm/l/@akaoio/battle.svg)](https://github.com/akaoio/battle/blob/main/LICENSE)\n[![Tests](https://img.shields.io/badge/tests-self--validating-green.svg)](https://github.com/akaoio/battle/actions)\n\nUniversal terminal application testing framework with real PTY emulation\n\n## Why Battle?\n\n\n### 🔍 PTY over Pipes\nReal pseudo-terminal allocation reveals hidden TTY-dependent bugs\n**3-10× slower but 99% more accurate than pipe testing**\n\n\n### 📹 Deterministic Replay\nExact session reproduction with event-level precision\n**Debug failed tests across different sessions and environments**\n\n\n### 🔄 Self-Validation\nFramework tests itself recursively up to 3 levels deep\n**Proves testing framework stability and correctness**\n\n\n\n## Features\n\n\n- ⚡ **Real PTY Emulation**: Uses actual pseudo-terminals, not fake pipes, to catch all bugs\n\n- 🎬 **StarCraft-Style Replay**: Record and playback terminal sessions with microsecond precision\n\n- 🔄 **Self-Testing Framework**: Tests itself recursively to ensure framework reliability\n\n- 🌍 **Cross-Platform**: Works on Linux, macOS, Windows with native PTY support\n\n- 🔍 **Visual Debugging**: HTML replay export with YouTube-style controls\n\n- ✨ **Zero Mock Policy**: 100% real implementation - no mocks, stubs, or fakes\n\n\n## Installation\n\n```bash\nnpm install --save-dev @akaoio/battle\n```\n\n## Quick Start\n\n### Basic Usage\n```typescript\nimport { Battle } from \"@akaoio/battle\"\n\nconst battle = new Battle({\n  command: 'npm',\n  args: ['install'],\n  timeout: 30000\n})\n\nawait battle.spawn()\nawait battle.expect('packages installed')\nbattle.cleanup()\n\n```\n\n### Advanced Usage with Replay\n```typescript\nconst battle = new Battle()\n\nconst result = await battle.run(async (b) => {\n  b.spawn('git', ['status'])\n  await b.expect('On branch')\n  \n  b.sendKey('q')  // Quit if pager\n  await b.screenshot()  // Capture state\n})\n\n// Replay is automatically saved\nconsole.log('Replay saved to:', result.replayPath)\n\n```\n\n### CLI Usage\n```bash\n# Run a single test\nbattle run \"echo hello\" --expect \"hello\"\n\n# Run with timeout\nbattle run \"npm install\" --timeout 60000\n\n# Watch mode\nbattle watch \"./tests/*.battle.js\"\n\n# Replay a session\nbattle replay ./logs/session-123.json\n\n# Export to HTML\nbattle export ./logs/session-123.json --format html\n\n```\n\n## Testing Patterns\n\n### Interactive Applications\n```typescript\n// Test interactive CLI apps\nconst battle = new Battle()\nawait battle.run(async (b) => {\n  b.spawn('npx', ['create-react-app', 'test-app'])\n  await b.expect('What would you like to name')\n  b.type('my-app')\n  b.sendKey('enter')\n  await b.expect('Success! Created my-app')\n})\n\n```\n\n### Error Handling\n```typescript\n// Test error conditions\nconst battle = new Battle()\nawait battle.run(async (b) => {\n  b.spawn('npm', ['install', 'non-existent-package'])\n  await b.expect('ERR!')  // NPM error prefix\n  // Test continues even after process exits with error\n})\n\n```\n\n### Long-Running Processes\n```typescript\n// Test long-running processes\nconst battle = new Battle({ timeout: 120000 })\nawait battle.run(async (b) => {\n  b.spawn('npm', ['run', 'build'])\n  await b.expect('Build started')\n  await b.expect('Build complete', 60000)  // Wait up to 1 minute\n})\n\n```\n\n## Architecture\n\nBattle follows the @akaoio principle of \"Class = Directory + Method-per-file\":\n\n```\nBattle/\n├── index.ts        # Class definition with delegation\n├── constructor.ts  # Initialization logic\n├── spawn.ts        # Process spawning with PTY allocation\n├── expect.ts       # Pattern matching with timeout control\n├── sendKey.ts      # Keyboard input simulation  \n├── screenshot.ts   # Terminal state capture\n├── run.ts          # Test execution orchestration\n└── cleanup.ts      # Resource deallocation\n\n```\n\nMethod isolation enables independent testing, hot-reloading, and atomic refactoring while maintaining class cohesion\n\n## Performance vs Accuracy Trade-off\n\n| Operation | Pipe Testing | PTY Testing | Overhead | Worth It? |\n|-----------|-------------|-------------|----------|-----------|\n\n| Process spawn | ~5ms | ~15ms | 3× | YES - catches TTY bugs |\n\n| Character I/O | <1μs | ~10μs | 10× | YES - real buffering |\n\n| Pattern match | ~1ms | ~5ms | 5× | YES - ANSI sequences |\n\n\n**Philosophy**: Accept 3-10× performance overhead for 99% bug detection accuracy.\n\n## Self-Testing Validation\n\nBattle tests itself recursively to ensure framework reliability:\n\n- **Level 1**: Battle tests a command\n- **Level 2**: Battle tests Battle testing a command  \n- **Level 3**: Battle tests Battle testing Battle (maximum confidence)\n\n## Documentation\n\nAll documentation is generated with @akaoio/composer from atomic YAML files.\n\n```bash\nnpm run docs:build\nnpm run docs:watch\n```\n\n## Built With @akaoio Tools\n\n- **@akaoio/builder**: Universal TypeScript build system\n- **@akaoio/composer**: Atomic documentation generation\n- **@akaoio/battle**: Self-testing (this framework tests itself!)\n\n## License\n\nMIT © AKAO Team\n\n---\n\n*Built with @akaoio/battle v1.1.0*\n*Documentation generated with @akaoio/composer*# Test hybrid ruspty fix Fri Aug 29 03:42:00 PM +07 2025\n# Retry with Battle v1.2.2 Fri Aug 29 04:15:43 PM +07 2025\n","readmeFilename":"README.md"}