{"_id":"@baigao_h/terminal-live","_rev":"12-bd175f833274f8b86665b730e57b520c","name":"@baigao_h/terminal-live","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@baigao_h/terminal-live","version":"0.1.0","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.0","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"4bfccf6bea581463195333f16b5d3b664033d397","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.0.tgz","fileCount":82,"integrity":"sha512-TT+RdOoqZAeQz2mtU+FYjWsqDxnWDICV003WZC/yq4mK2WH7Yv/8kPBfhHZ9pEHdUsgnTg19hZ6QgLHE4fW7Cg==","signatures":[{"sig":"MEQCIAZxrpQfm5ayje45MoYqzoGD03prPEm0l4x8FaQ5XfXFAiBWZxQkVUbOaIhx4/vRlE00MPR9+tVwSKPItq5iQ1jyAQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246619},"main":"dist/main.js","type":"module","engines":{"node":">=18"},"gitHead":"9a8b582ce9b7cdd0da742eeb6c38473a62a63b8e","scripts":{"dev":"npm run build && npm run start","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"_npmVersion":"11.13.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"25.8.2","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.0_1777560948983_0.04037048133768084","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@baigao_h/terminal-live","version":"0.1.1","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.1","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"239fa38e385c8d67b60c8a24adc4d6b3da2c5c7d","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.1.tgz","fileCount":82,"integrity":"sha512-afDtxzSvK6nyWmtQddaYe7Nqpll5/AS+Mn53q7ycXQHPp7IyLuseqRJxUBslPqS6l3ARf4b3UfR5uHtCTV5Wdg==","signatures":[{"sig":"MEYCIQCvBjJLuEjBCwSIkPZqh0l6YJpKqJJjd6kMmCxEFXtVRwIhAMLr1RSxDx3H1kDAtaK+Uc9dMlY3ZyK2CrTCpe8IR5P2","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246659},"main":"dist/main.js","type":"module","engines":{"node":">=18"},"gitHead":"1a297a9117e7d69630049ef8ebc8acce553e36d7","scripts":{"dev":"npm run build && npm run start","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"_npmVersion":"11.13.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"25.8.2","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.1_1777561578080_0.12789159055083776","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@baigao_h/terminal-live","version":"0.1.2","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.2","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"4bf33f5b9905177023fbaa57e8b1398c1db6c263","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.2.tgz","fileCount":85,"integrity":"sha512-hIkMqkBLKihmTuZVNiH47fpu34SSN/6tE1iA2jxRJ+rzJLYFjcgTBHXJ9bT8ZXol/jTAjxfQJtTJDUiEWStJqg==","signatures":[{"sig":"MEUCIDN5Z6/5B11MedggVpdo2LG97Mir4RLbCXdYm0wwHTQ1AiEA2y0uamvtUSpD44kR52O0RTKLeom4Z0NC3mxY2Zcj+uc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":258137},"main":"dist/main.js","type":"module","engines":{"node":">=18"},"gitHead":"884b81192cdec08882919f949e467fe747cfb33f","scripts":{"dev":"npm run build && npm run start","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"_npmVersion":"11.13.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.2_1777608597487_0.8441386719787047","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@baigao_h/terminal-live","version":"0.1.3","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.3","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"homepage":"https://github.com/BAIGAOa/TerminalLive#readme","bugs":{"url":"https://github.com/BAIGAOa/TerminalLive/issues"},"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"e6071316e7c1b6819956bdc7d6cce37cbe203006","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.3.tgz","fileCount":85,"integrity":"sha512-UCe1idjzcAcTFAGvKXY6cO9iS0jw9i7TZIK43qj6aeITjQjfveaxfJLKQfL8udb5Vuk2P7uqWQCg0l4bTcJ+6w==","signatures":[{"sig":"MEQCIAUl6xw+hwWYshC8YnaeCE2GwkJqfpsLDF57E7m5DFaPAiAp/oxmp5tBGXIw0WJXpK6k0S5DzL4GF0oHn5TZc0qxmQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":264758},"main":"dist/main.js","type":"module","engines":{"node":">=18"},"gitHead":"5f6f36ad5efb5c03d8a9eee5f3ed832e23d71d08","scripts":{"dev":"npm run build && npm run start","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"repository":{"url":"git+https://github.com/BAIGAOa/TerminalLive.git","type":"git"},"_npmVersion":"11.13.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.3_1777614035976_0.3475768699999875","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@baigao_h/terminal-live","version":"0.1.4","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.4","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"homepage":"https://github.com/BAIGAOa/TerminalLive#readme","bugs":{"url":"https://github.com/BAIGAOa/TerminalLive/issues"},"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"1fe649784aff550bddd70bed7adcf97cf84110e0","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.4.tgz","fileCount":78,"integrity":"sha512-yutkW0Uc5P3inTjsq47x5Ebm6qF0Qgvwh8bYhrvb7IzHymue7Z651WzghRak3wYTxpwysber4SBW/W5A9It8Cg==","signatures":[{"sig":"MEQCIGT1wacfS8ytF+DeUbQE5K3qU7jgqltJTmU8Gyuls/chAiBpt98YO4SptTwcWLijJ8ZM0Hd/II8wRBuR9yKScf03EA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244534},"main":"dist/main.js","type":"module","engines":{"node":">=18"},"gitHead":"501ef442d01c5e3452cae55a1a6ae56a096215a3","scripts":{"dev":"npm run build && npm run start","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"repository":{"url":"git+https://github.com/BAIGAOa/TerminalLive.git","type":"git"},"_npmVersion":"11.13.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.4_1777622142166_0.7393675156336945","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@baigao_h/terminal-live","version":"0.1.5","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.5","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"homepage":"https://github.com/BAIGAOa/TerminalLive#readme","bugs":{"url":"https://github.com/BAIGAOa/TerminalLive/issues"},"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"77884383da4e515319cfabca0b90512685651d35","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.5.tgz","fileCount":82,"integrity":"sha512-jtGvPgNrwM+r0ClFlamxJ38PP1YsDxlFr5tQX2+Hc7FlUoM7YMRz0w0L+JrjqnB8GVAITNxLGLoY0BxeGPhpKg==","signatures":[{"sig":"MEQCIH1YsDvvSiLwYjQZba9YTns9MvKs0qYJpK7fqrmdgfkOAiA49/G5CR/8nc+z9jekITz3Hnk5PKFtEO85y0jLVdNUnw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262918},"main":"dist/main.js","type":"module","engines":{"node":">=18"},"gitHead":"d213d7067e6e8c7ce7fc591ee9e28cba3714c006","scripts":{"dev":"npm run build && npm run start","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"repository":{"url":"git+https://github.com/BAIGAOa/TerminalLive.git","type":"git"},"_npmVersion":"11.13.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.5_1777627125625_0.5845903506725882","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@baigao_h/terminal-live","version":"0.1.6","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.6","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"homepage":"https://github.com/BAIGAOa/TerminalLive#readme","bugs":{"url":"https://github.com/BAIGAOa/TerminalLive/issues"},"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"2907fb99cd0f378ce4028932b33efae13a40d9cb","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.6.tgz","fileCount":82,"integrity":"sha512-cda6YEMyRkv/whND54ZqdMoHLdzBsKl9IrX9jRCgj/7MKNx53oVVvWvtsF8k9zkjBLYC7RT/Wdd/ITkTyTIFIg==","signatures":[{"sig":"MEUCIDzq5NqelFaxizKckNM5QQiObicOrR+li6NoLzsmqAowAiEA9j+6JG3z4UISrd9NhlcTd6J3dEaUlw96z4KkYSoELs0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":263593},"main":"dist/main.js","type":"module","engines":{"node":">=18"},"gitHead":"9d78ac28ab859b7fd41d60c15181a79f039fc215","scripts":{"dev":"npm run build && npm run start","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"repository":{"url":"git+https://github.com/BAIGAOa/TerminalLive.git","type":"git"},"_npmVersion":"11.13.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.6_1777631145295_0.22834186038965942","host":"s3://npm-registry-packages-npm-production"}},"0.1.7":{"name":"@baigao_h/terminal-live","version":"0.1.7","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.7","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"homepage":"https://github.com/BAIGAOa/TerminalLive#readme","bugs":{"url":"https://github.com/BAIGAOa/TerminalLive/issues"},"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"2e13986a2ba222d7e2c5ece68cace09101e6960d","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.7.tgz","fileCount":87,"integrity":"sha512-0tvT/vn0HPUuor3o+5/aGkA5sGFPQpylRgacYkJXPjxCeXD9A1B58MT6gkLu9POEtobjMAyZbIRX56kpDfwVbw==","signatures":[{"sig":"MEUCIGKPYZk6KN+LGwOvPqCubS+qAC3DNHb3lxuqFeMua9kdAiEAx7/4Bag3kGZvHXviAXA2R5UH0/Xv4ncfE8zYaOas9Sk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":290520},"main":"dist/main.js","type":"module","engines":{"node":">=18"},"gitHead":"403136019ba0460a8adcf1947af24bce913842dc","scripts":{"dev":"npm run build && npm run start","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"repository":{"url":"git+https://github.com/BAIGAOa/TerminalLive.git","type":"git"},"_npmVersion":"11.13.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"24.14.1","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.7_1777635772238_0.4592992927871711","host":"s3://npm-registry-packages-npm-production"}},"0.1.8":{"name":"@baigao_h/terminal-live","version":"0.1.8","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.8","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"homepage":"https://github.com/BAIGAOa/TerminalLive#readme","bugs":{"url":"https://github.com/BAIGAOa/TerminalLive/issues"},"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"b8c27a192f7ad70675f29ab8ecfeee33ef792742","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.8.tgz","fileCount":242,"integrity":"sha512-eoMiKZ16HM3Rd5Hq8ONH45slo4bW5t1TMFIjenHcJe/xJf41HOMav7ZFnnYyFiWZmJXJt45VduF8xjRoP53Neg==","signatures":[{"sig":"MEUCIC9NqQy4nnUELL/6K95IV2p3kFZtA0QPxx4PP2RwJ1CmAiEAk5d8+gMSiMbm2L34W8Qsg3C0aV1AS5j15LYRE/LQiT4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":508539},"main":"dist/main.js","type":"module","types":"dist/main.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/main.d.ts","import":"./dist/main.js"}},"gitHead":"7f059a3ed603a5965eac3603402e5250b81ad09a","scripts":{"dev":"npm run build && npm run start","test":"vitest run","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx","test:watch":"vitest"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"repository":{"url":"git+https://github.com/BAIGAOa/TerminalLive.git","type":"git"},"_npmVersion":"11.12.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.5","typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.8_1778405038145_0.334343712885812","host":"s3://npm-registry-packages-npm-production"}},"0.1.9":{"name":"@baigao_h/terminal-live","version":"0.1.9","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.1.9","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"homepage":"https://github.com/BAIGAOa/TerminalLive#readme","bugs":{"url":"https://github.com/BAIGAOa/TerminalLive/issues"},"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"6e0830c5fffb09ad7546f1fe72f81fa6c2d4e8d7","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.1.9.tgz","fileCount":242,"integrity":"sha512-bhS1cGYex8P+xe3gxRuk1zW3VNYlZgKU4c4ShyA3LEy85gAGjQ4p7hZ3HdvPq6k8g2I3O7Suw65eipsrHP1Qpg==","signatures":[{"sig":"MEUCIEnuPe9R5dWmglfzIqjH7Gjm5sBKfSHbHKLuweoyQGqsAiEAi5acueMmpcIgX/qlAgCxZZ2eCDNLw55676CV5LE+IOo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":508351},"main":"dist/main.js","type":"module","types":"dist/main.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/main.d.ts","import":"./dist/main.js"}},"gitHead":"438030667ec90779d8e467645f201480c224c795","scripts":{"dev":"npm run build && npm run start","test":"vitest run","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx","test:watch":"vitest"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"repository":{"url":"git+https://github.com/BAIGAOa/TerminalLive.git","type":"git"},"_npmVersion":"11.12.0","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"25.8.1","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","ink-text-input":"^6.0.0","ink-select-input":"^6.2.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.5","typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.1.9_1778411188009_0.4213950769639627","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@baigao_h/terminal-live","version":"0.3.0","keywords":["terminal","live","ink","react","tui","cli"],"author":{"name":"BAIGAO"},"license":"AGPL-3.0","_id":"@baigao_h/terminal-live@0.3.0","maintainers":[{"name":"baigao_h","email":"3416238595@qq.com"}],"homepage":"https://github.com/BAIGAOa/TerminalLive#readme","bugs":{"url":"https://github.com/BAIGAOa/TerminalLive/issues"},"bin":{"terminal-live":"dist/main.js"},"dist":{"shasum":"76ba40e1008eabbe5921cf4363d93f0da76afb6c","tarball":"https://registry.npmjs.org/@baigao_h/terminal-live/-/terminal-live-0.3.0.tgz","fileCount":211,"integrity":"sha512-l1GwaiOWhvKDt5FLlpJB7MTjXmNSlPwnyhe2XJmwPZPymkHjyMdCHyQCIhLYZnUNi0D1V6zWlo1qjpFV9crOmA==","signatures":[{"sig":"MEYCIQCVB8l+pQAx9BqtPheaz8wmjgsfOltr7aOEGlaiquDnDAIhAItmXEp6zBIXyey8giLnoI1nSMfjXzTWyGq2hMtQtZmx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":453084},"main":"dist/main.js","type":"module","types":"dist/main.d.ts","engines":{"node":">=18"},"exports":{".":{"types":"./dist/main.d.ts","import":"./dist/main.js"}},"gitHead":"ee463a68d087d3be44683d7dd67940d2630959dd","scripts":{"dev":"npm run build && npm run start","test":"vitest run","build":"tsc --locale zh-CN","clean":"rm -rf dist","start":"node dist/main.js","watch":"tsc --watch --locale zh-CN","runtsc":"npx tsx src/main.tsx","test:watch":"vitest"},"_npmUser":{"name":"baigao_h","email":"3416238595@qq.com"},"repository":{"url":"git+https://github.com/BAIGAOa/TerminalLive.git","type":"git"},"_npmVersion":"10.9.8","description":"A small game running on the terminal.","directories":{},"_nodeVersion":"22.22.3","dependencies":{"ink":"^7.0.1","zod":"^4.3.6","react":"^19.2.4","di-wise":"^0.2.8","lodash-es":"^4.18.1","os-locale":"^8.0.0","@baigao_h/ink-kit":"^0.5.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^4.1.5","typescript":"^5.9.3","@types/node":"^20.19.39","@types/react":"^19.2.14","@types/lodash-es":"^4.17.12"},"_npmOperationalInternal":{"tmp":"tmp/terminal-live_0.3.0_1779622325111_0.35579156248371735","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2026-04-30T14:55:48.864Z","modified":"2026-07-09T04:52:55.514Z","0.1.0":"2026-04-30T14:55:49.121Z","0.1.1":"2026-04-30T15:06:18.252Z","0.1.2":"2026-05-01T04:09:57.649Z","0.1.3":"2026-05-01T05:40:36.131Z","0.1.4":"2026-05-01T07:55:42.305Z","0.1.5":"2026-05-01T09:18:45.776Z","0.1.6":"2026-05-01T10:25:45.432Z","0.1.7":"2026-05-01T11:42:52.407Z","0.1.8":"2026-05-10T09:23:58.281Z","0.1.9":"2026-05-10T11:06:28.179Z","0.3.0":"2026-05-24T11:32:05.333Z"},"bugs":{"url":"https://github.com/BAIGAOa/TerminalLive/issues"},"author":{"name":"BAIGAO"},"license":"AGPL-3.0","homepage":"https://github.com/BAIGAOa/TerminalLive#readme","keywords":["terminal","live","ink","react","tui","cli"],"repository":{"url":"git+https://github.com/BAIGAOa/TerminalLive.git","type":"git"},"description":"A small game running on the terminal.","maintainers":[{"email":"3416238595@qq.com","name":"cartridge-engine"}],"readme":"[中文](./README_ZH.md)\n# Terminal Life\n\nA text-based life simulator that runs in your terminal, built with Ink and React.\n\n**Status:** Early development — game content is not yet complete, but core systems are functional.\n\n## Motivation\n\nThis project was not created as a game for others to play. It is a personal experiment, built out of curiosity about terminal user interfaces, event-driven architecture, and dependency injection. The goal was to see how far a text-based interactive experience could go in a command-line environment, and to serve as a living codebase for exploring these ideas.\n\n## Features\n\n- **Life simulation** — progress through ages, experience random events and make choices.\n- **Status effects** — dominant emotions apply periodic buffs or debuffs to health and other attributes.\n- **Event engine** — weighted random events, age-range filtering, predecessor/block/once logic, post-event chains.\n- **Mod support** — install mods into `~/.mod_live/`, each can add events, translations, and custom logic via a plugin API.\n- **Achievements** — unlock conditions based on events, stat thresholds, or custom checks.\n- **Fully keyboard driven** — key bindings are configurable via an in-game editor.\n- **Multi-language** — English, Chinese, Japanese, Russian included; mods can supply additional languages.\n- **Terminal UI** — built with [Ink](https://github.com/vadimdemedes/ink), supports 256 colours and resizing.\n\n## Requirements\n\n- **Node.js** >= 18\n- A terminal with Unicode support and 256 colours (most modern terminals work)\n\n## Installation\n\n```bash\nnpm install -g @baigao_h/terminal-live\n```\n\nUsage\n\nRun the game:\n\n```bash\nterminal-live\n```\n\n## Key bindings (default)\n\n| Key    | Action                       |\n|--------|------------------------------|\n| S      | Start game                   |\n| C      | Open settings                |\n| L      | Language selection           |\n| A      | Achievements                 |\n| E      | Exit                         |\n| Enter  | Next round (in game)         |\n| R      | View attributes              |\n| T      | View status                  |\n| P      | Toggle notification console  |\n| Q      | Return to main menu          |\n\nYou can change every binding in the Key Recording menu under Settings.\n\n## Configuration\n\nAll persistent data is stored under the resource/ directory inside the installation folder:\n\n· config.json — language, initial player attributes, enabled mods.\n· keys.json — key mappings.\n· achievement/unlocked.json — achievement progress.\n\nPlayer attributes (name, age, health, emotions, fortune) can be edited in-game through Player Config.\n\n\n## Mods\n\nMods are stored in `~/.mod_live/<mod-name>/`. Each mod can add events, translations, custom logic via plugins, and even custom UI screens.\n\n### Directory Structure\n\n```\n~/.mod_live/\n  my-mod/\n    mod.json          # Mod manifest (required)\n    index.js          # Plugin entry (optional)\n    events/           # JSON event definitions (optional)\n      custom.json\n    language/         # Translation files (optional)\n      en_US.json\n      zh_CN.json\n```\n\n### Manifest (`mod.json`)\n\n```json\n{\n  \"name\": \"my-mod\",\n  \"version\": \"1.0.0\",\n  \"description\": \"An example mod\",\n  \"main\": \"index.js\",\n  \"author\": \"your-name\"\n}\n```\n\n### JSON Event Definitions\n\nPlace `.json` files in `events/`. Each file defines one event instance:\n\n```json\n{\n  \"type\": \"BirthEvent\",\n  \"id\": \"my-custom-event\",\n  \"nameKey\": \"events.myEvent\",\n  \"rangeKey\": [\"10-50\"],\n  \"weight\": 0.3,\n  \"once\": false,\n  \"predecessorEvent\": null,\n  \"excludedIds\": [],\n  \"postEvent\": null\n}\n```\n\n| Field | Type | Description |\n|-------|------|-------------|\n| `type` | string | Event class name (must be registered via `registerEventTypes` or built-in) |\n| `id` | string | Unique event identifier |\n| `nameKey` | string | Translation key for in-game log display |\n| `rangeKey` | string[] | Age ranges where this event can trigger (e.g. `[\"5-12\", \"18-25\"]`) |\n| `weight` | number | Random weight (higher = more likely) |\n| `once` | boolean \\| string[] | `true` = trigger once globally. Array of ranges = trigger once per range |\n| `predecessorEvent` | string \\| null | This event only triggers if the predecessor has been triggered |\n| `excludedIds` | string[] | Events that become blocked when this event triggers |\n| `postEvent` | string \\| object[] \\| null | Event(s) scheduled after this one triggers |\n\n### Plugin Entry (`index.js`)\n\nThe entry file exports a `ModPlugin` object. The game calls its methods at specific lifecycle points.\n\n```javascript\nmodule.exports = {\n  id: \"my-mod\",\n\n  // Register custom event types (optional)\n  registerEventTypes(registry, ctx) {\n    const MyEvent = ctx.createEventClass({\n      apply(player, self) {\n        player.fortune += 100;\n        ctx.logger.info(\"Custom event triggered!\");\n      },\n      getWeight(player) {\n        return player.angerValue > 50 ? 0.6 : 0.1;\n      },\n    });\n    registry.register(\"MyEvent\", MyEvent);\n  },\n\n  // Lifecycle hooks (optional)\n  hooks: {\n    onInit(ctx) {\n      ctx.logger.info(\"Mod loaded!\");\n      // Register a custom UI screen\n      ctx.registerScreen({\n        scene: \"myModSettings\",\n        component: MySettingsComponent,\n        nameKey: \"myMod.settingsTitle\",\n        highlightId: \"mySettings\",\n      });\n    },\n\n    onPlayerUpdate(player, ctx) {\n      if (player.health < 30) {\n        ctx.logger.warn(\"Low health!\");\n      }\n    },\n\n    onIncidentTrigger(incident, player, ctx) {\n      // Return false to block an event\n      if (incident.id === \"academic-stress\" && player.angerValue > 80) {\n        return false;\n      }\n    },\n\n    onIncidentExecuted(incident, player, ctx) {\n      ctx.logger.info(`Event completed: ${incident.id}`);\n    },\n  },\n};\n```\n\n### ModContext API\n\nThe `ctx` object provided to all hooks and callbacks:\n\n| Property / Method | Description |\n|-------------------|-------------|\n| `ctx.eventBus` | Global event bus. Use `on(event, callback)` and `emit(event, data)`. Built-in events: `player:updated`, `incident:executed`, `achievement:unlocked`. |\n| `ctx.configStore` | Persistent config storage. Use `getSnapshot()` and `update(partial)`. |\n| `ctx.logger` | Logging: `info(msg)`, `warn(msg)`, `error(msg)`. Output appears in terminal stdout. |\n| `ctx.getPlayer()` | Returns the current `Player` instance. |\n| `ctx.createEventClass(def)` | Creates a dynamic `Incident` subclass from `{ apply, getWeight? }`. Returns a constructor to pass to `registry.register()`. |\n| `ctx.registerScreen(entry)` | Registers a custom UI screen: `{ scene, component, nameKey, highlightId? }`. Scene ID is an arbitrary string. |\n| `ctx.navigateTo(scene)` | Navigates to a registered scene (built-in: `\"game\"`, `\"config\"`, `\"language\"`, `\"achievement\"`, `\"menu\"`). |\n\n### Lifecycle Hooks\n\n| Hook | When Called | Use Case |\n|------|-------------|----------|\n| `onInit(ctx)` | After mod is loaded, before game starts | Initialization, event subscriptions, screen registration |\n| `onPlayerCreated(player, ctx)` | After player object is created | Modify initial player state |\n| `onPlayerUpdate(player, ctx)` | Every round, after player.update() | Per-turn side effects, stat monitoring |\n| `onIncidentTrigger(incident, player, ctx)` | Before an incident is executed | Block events (return `false`), conditional logic |\n| `onIncidentExecuted(incident, player, ctx)` | After an incident has executed | Logging, follow-up actions |\n\n### Developing Mods with TypeScript\n\n```bash\ncd ~/.mod_live/my-mod\nnpm init -y\nnpm install --save-dev typescript @baigao_h/terminal-live\nnpx tsc --module commonjs --target es2022 --outDir . index.ts\n```\n\nInstall `@baigao_h/terminal-live` as a dev dependency to get full type definitions for `ModPlugin`, `ModContext`, `Player`, `Incident`, etc.\n\n### Enabling Mods\n\n1. Place your mod directory in `~/.mod_live/`\n2. Launch the game, go to **Settings → Mod Manager**\n3. Toggle your mod on (press Enter)\n4. Restart the game\n\nEnabled mods are persisted in `resource/config.json` under `enabledMods`.\n\n## Save System\n\nSaves are stored in `~/.archive_live/` as timestamped JSON files (e.g. `2026-05-01-12-00.json`).\n\n### Save Contents\n\nEach save contains a complete snapshot of the game state:\n\n- **Player attributes** — name, age, health, height, weight, emotions, fortune\n- **Event history** — which events have been triggered or blocked\n- **Achievement progress** — which achievements are unlocked\n- **Game configuration** — language and enabled mods\n\n### Saving\n\nOpen **Save Management** from the main menu. Press `S` to save the current game. The file is named automatically with the current timestamp.\n\n### Loading\n\n1. Open **Save Management** from the main menu\n2. Use `↑` / `↓` to select a save\n3. Press `Enter` to load\n\nLoading writes the saved data back to the game's configuration files and exits. **Restart the game** to continue from the loaded state.\n\n### Deleting\n\nSelect a save and press `D`. Confirm with `Enter` or cancel with `Esc`.\n\n### Key bindings in Save Management\n\n| Key | Action |\n|-----|--------|\n| `S` | Save current game |\n| `Enter` | Load selected save |\n| `D` | Delete selected save |\n| `↑` / `↓` | Navigate saves |\n| `Esc` | Return to main menu |\n\n## Development\n\n```bash\ngit clone https://github.com/BAIGAOa/TerminalLive\ncd terminal-live\nnpm install\nnpm run dev      # build and run\nnpm run watch    # watch mode \n```\n\nThe game uses di-wise, a third-party dependency injection container library. New services should be decorated with @Scoped(Scope.Container), and they will be registered automatically.\n\n## License\n\nAGPL-3.0","readmeFilename":"README.md"}