{"_id":"@aituber-onair/core","_rev":"76-e4a0508c88871b4b40d545b7489baf3e","name":"@aituber-onair/core","dist-tags":{"latest":"0.26.14"},"versions":{"0.1.0":{"name":"@aituber-onair/core","version":"0.1.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.1.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"74e076c96a260334af26c2237dd16cbd90172952","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.1.0.tgz","fileCount":104,"integrity":"sha512-SnfGCP0ypRQC3WHW/fmXZDzVETOvTYPR5yVsImNzvz9cWIrNtQPU4Y7Q6zC3pbCXJWdhLjLT27LdtU5hO0CpfA==","signatures":[{"sig":"MEUCIAYV1n4HgujSPWiFsFtsWf7paVPERQFzMHLFp5q+MJyIAiEAmrYeNWw7td+Zd6QgIno9/twNUq5Hx/rJBPeZ5PT/DMk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":205879},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"d0f50a0792e1f65f391d9a91ec432827c7e70288","scripts":{"test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"openai":"^3.2.1","@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.0_1742104335166_0.8337317633749104","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@aituber-onair/core","version":"0.1.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.1.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"32f2f90369398052ee764e1aa844f2dd57579d13","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.1.1.tgz","fileCount":104,"integrity":"sha512-kuB3p5VX6OolFMt8B4XspLrTAIH0A87Ly2AGGWVvhyckV1jIsg67/eG/rfU5Y1oVGh90W9xNPCbB717d6h0y8w==","signatures":[{"sig":"MEUCID0kZKYMXp6WyR5Hp5ofbmPSzBwQMcxu0QA7mdM1F5jrAiEAq8RbuQEXAO5uL9fhRn1pnR1qSHygqrs/Kh2B/vh2R/E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206032},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"7658c7095c75d19e5dd85f1743f6e83d5e420e91","scripts":{"test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"openai":"^3.2.1","@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.1_1742105216837_0.5943496089440645","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@aituber-onair/core","version":"0.1.2","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.1.2","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"5d8d825731f8c1b013d2f8ddca2eb23905bfaf76","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.1.2.tgz","fileCount":104,"integrity":"sha512-xggH8Mi20LwOGCdN89RFR704hIiCIebHM6S8NRAqhfRbVy93yGeXd7XXkrN3nY3ndcoD73yu3SNEe5iHMXGwpw==","signatures":[{"sig":"MEYCIQCTRhPx5iTN2RDUQs0BnO5Qih0uFOQnZaB/vYvVRZdQAAIhAK1RQ5tr7mUf8fXsI/iObRLxjhkVPHQnPDEjXeMZJwcT","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":206221},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"cccd2ae2755368bb672b9eea98c3b51efecb5704","scripts":{"test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"openai":"^3.2.1","@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.1.2_1742106912000_0.5708272291283718","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@aituber-onair/core","version":"0.2.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.2.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"253a97f0622d09331041eb840688f37ecc20a676","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.2.0.tgz","fileCount":128,"integrity":"sha512-rqfxXJfYUYp7s969Y8p7qoVeuLE8/gMaw2DpDKHtaMydqinELD09rM/nKd35dq1v+uJSFMfQOld2zdXn7VcD1A==","signatures":[{"sig":"MEYCIQCm8aLPFZY6PhluzCot2EzPsJ8RPhH9K5kMSNdDb3+v4AIhAKRCDFnBHiolH/J1Nj8JfUg/JsGPbhqgGaiO82rL08P6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262760},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"23f82a43816aef08be251521dbcd376e2b1effab","scripts":{"test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","dependencies":{},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.2.0_1742429515657_0.05703659316858367","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@aituber-onair/core","version":"0.3.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.3.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"dccaf0da8b94e4327fc5eb4aec13c03925c53091","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.3.0.tgz","fileCount":161,"integrity":"sha512-ixbNq2M9VctMFZxmd0hzO9v8mZhJq2q0bn/zc7kwioac19zzOzgbJd0J9IIRq5wIZbatYPOLPdu+Msc+nBJwCg==","signatures":[{"sig":"MEUCICM7TPau61mPEVAlUjgKih8hfsqvjD1/Gu2nuDKn2EKaAiEA6htm73hIiGAXmCd8RO6UrS0moRFJAyvCPkA2ECpBQko=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":332869},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"468c7118ff18259e2c79ebd3b4a8183b050e007b","scripts":{"fmt":"biome format . --write","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.3.0_1743258321807_0.5404884339882541","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@aituber-onair/core","version":"0.4.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.4.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"3cffc2ace15a2aed18604c922ccb7ecc78ff4b4c","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.4.0.tgz","fileCount":173,"integrity":"sha512-pwqhcU9PSXTgS6HCaFt+TnvrzeRS9xFzY7IixDzGgr0nI6vJzT6R+hoTR1drERQAeztlrHhUUgYcB4m45d3b+A==","signatures":[{"sig":"MEYCIQCwcmktltp4CUELDTJhU9N6K/35p8QQj7qCglT408GRvwIhAPscXtWlhcPV0YYPMtolYJLBMDZwT+MIQu7ybEjTidQo","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370327},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"98f6d865f961c3b5ed294f1169136e2f4f70df2b","scripts":{"fmt":"biome format . --write","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.4.0_1743636409798_0.5981950503411988","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@aituber-onair/core","version":"0.5.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.5.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"3d6fccde2e9803f1d3c12462cbd8016616967688","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.5.0.tgz","fileCount":173,"integrity":"sha512-QOdU+5NYLoPX8NwzmoM7O/jelK0Rw04Zf0DOGjxU2bVZxjJNH/nZk/QfMwc6ubiHceXpRCoHJl6zNTM18znxZQ==","signatures":[{"sig":"MEQCIG1b/aCPlIKVML0EFmJ2YP6Nkm1bcoyOFu64cSmxD+0GAiA0gkkCJ2Oh/R6XHsm/7NI2KABS8zBMsROz0z4LCOyEug==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370342},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"8e5a751a99eaa8a7d499ec0ad1f03c1161ff06b5","scripts":{"fmt":"biome format . --write","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.0_1744672343560_0.020822477467925538","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@aituber-onair/core","version":"0.5.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.5.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"0cc20b904d2770b5dbb145d601f1ecba3ef4f33b","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.5.1.tgz","fileCount":173,"integrity":"sha512-dWyY+nnRYrJHFCQFABAkd0NzDp6G4cRYxhodKC4j9da0JUKCvBrfBJydNbskCFBkczODNkE0tGGS6zVmiCt3Zw==","signatures":[{"sig":"MEUCIQD/lzZRG1LoxP5mMXeo4fE27cxqmC7HtAO9OT6/SETjjAIgBh06gbFWOOhp69bB+APBirQdR03s18knrb9QbghooQs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":370900},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"e798067f856e015497a32b22caf13dfa36c09907","scripts":{"fmt":"biome format . --write","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.5.1_1744673368268_0.9877081125475056","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"@aituber-onair/core","version":"0.6.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.6.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"ccdc672cd524337e6fcaae12fc5a275bd7b4267f","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.6.0.tgz","fileCount":173,"integrity":"sha512-IcSn3qcEcbHmBL+PZdyf9Od3JfMF+/x8DFj9+YXBYkAcinNSAigLvwL7mkaVTvkeEUB5NUgc/IcQS+GXAL7fMQ==","signatures":[{"sig":"MEUCIHfhM17NCJvczYHlzLICTUk33TWuAAYt5tdIrz1p+QzQAiEAwVOn+Adtqfc+DGTwcf+ug937BmqN7VgblGaoYlI4G9w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":372889},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"a7b80049d379ee79392e4364242e13bd72e2eb12","scripts":{"fmt":"biome format . --write","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.6.0_1745050431450_0.21978376899097474","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"@aituber-onair/core","version":"0.7.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.7.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"63052b109eb0e0738f4de73eb0484b98ee478813","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.7.0.tgz","fileCount":173,"integrity":"sha512-+RXzkfgKkHUiv7ymGwG2pGzijmIMh4D2F+xGi/b0ySOAxCawa0vJUzfps9XS88gn2GB4CNbu4pMiLpPK+eL88g==","signatures":[{"sig":"MEQCIGuh3LrcbDTn/QteQSxUhm+m2dy77POAVa1J9j/IM1XVAiBS+WhDr6Vxo+43jKgfenbUNnSun0H9Tey952X4ZD0Wtw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":373110},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"c9169a0dfdbabe739989e74b141a4f47dd022b6b","scripts":{"fmt":"biome format . --write","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.7.0_1745475948708_0.6186484021370144","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"@aituber-onair/core","version":"0.8.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.8.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"0062e9757d96a235ad104c9ea4f96dcb1cdf368c","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.8.0.tgz","fileCount":152,"integrity":"sha512-dtsjLgXEqQvdDUsncHtKh6yDkns+k3hHypO6HquLBxU+ZDcO4qaiiSr9QfI6L0mdV9CxgULyjLJgQUM60c3T9g==","signatures":[{"sig":"MEYCIQCfNYEvthYOfgUhtRRclCNhrUfoVjWDm835PQ3I7cq8owIhAKeP8jxdK/OSmNWM9awkdzq9e1xB5rL9Dkc3szRUunWO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364059},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"cf76c7621a4485aebfe592ff6a90b880b3a2d6d5","scripts":{"fmt":"biome format . --write","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.8.0_1746936463798_0.4034637817263933","host":"s3://npm-registry-packages-npm-production"}},"0.8.1":{"name":"@aituber-onair/core","version":"0.8.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.8.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"c1d6ec54bdc68c2a31dbd273cf408814ca38c494","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.8.1.tgz","fileCount":152,"integrity":"sha512-7ggBrTJFJV/2xuwc9Sz39VJFOcEDshZkz5gapwHyiC0xOmQtuE9aFcjryWjRKuvfBzTEM6QBq/+zy2MaoYNCzw==","signatures":[{"sig":"MEYCIQCyaJyMgCm2ZiId4x+yPmjdNSVjuuOP2jVaaI6yogv8xwIhALQHbwAIyuQZWBAcfSQopgHZh9Iw7eeGPoLsBMFboqzQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":364101},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"009c389cb6ca618a6a0553c4fa4e2b06e6674a6b","scripts":{"fmt":"biome format . --write","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.8.1_1747269142704_0.9456310949326585","host":"s3://npm-registry-packages-npm-production"}},"0.9.0":{"name":"@aituber-onair/core","version":"0.9.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.9.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"3f3200fdd27cb4845c205c2958686097f072abaa","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.9.0.tgz","fileCount":152,"integrity":"sha512-FFu9NM37CNv0Kd29GUrmgnFq1ktEwzwlszR8HjKyKnISZf4O4t/pY5/ax/m/cfEK1FWfP6f/+Q5OAsWmgCVaYw==","signatures":[{"sig":"MEYCIQCepEgTnt8cjrcECNn+aFD6ZVRaw+40a0hifzAMnL8eUgIhAP8EAknn29mAY0T9L42F2hfwtQl87Al5BjPMTcBOu8M7","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":367940},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"d1631e95a1bd489387ee87cd6b10d6b930b77bc1","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.0_1747955867046_0.50780393568108","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"@aituber-onair/core","version":"0.9.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.9.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"a50b79e2e34513fa6d95ebce44f4f78b70e771d8","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.9.1.tgz","fileCount":152,"integrity":"sha512-Hyf/3lnuPqpMh1X+DlF6TLTDLgq+vGyuHTKM2a2b3entbxB5EpgpvYquS+xlXBW2RUDk3ZzWSLG1+2hTji+dVQ==","signatures":[{"sig":"MEUCIGCP7funYARXmQR63XzG6UDu04tzQF4lOVf5ddp/eFwPAiEAj69wRXFZ55RRlGxd+MICvi421ihZ2+5ElvmoPM99cLE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":367940},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"4ae95bd5adfb594abaf7801ef073f0869afb104c","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.9.1_1747977319579_0.33533686409215857","host":"s3://npm-registry-packages-npm-production"}},"0.10.0":{"name":"@aituber-onair/core","version":"0.10.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.10.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"084d9d952c9b57d5f6825c5cdd8cae086efb08d0","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.10.0.tgz","fileCount":155,"integrity":"sha512-j/X5c10QZkD08106dkC4mBI8M274C83yPijFdleIz9+mSBDuxZddgqa3/0YAp8+KB/Y+8vW2BUdvBDDX68NdVQ==","signatures":[{"sig":"MEUCIAaOThWPC2ymyVtJZkqf+0lnG3oQJOxe6Ir4GBnsTSP5AiEAhXRxoXa5jY5hsZmzDekr2M3KOo8UKg1FwbZxwK52IzQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":403583},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"e39bc34277408e8d262cfd78a706be45873011c6","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.10.0_1748073062651_0.03525934937801223","host":"s3://npm-registry-packages-npm-production"}},"0.11.0":{"name":"@aituber-onair/core","version":"0.11.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.11.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"cf36269e647cbb16d3ede81003108d5e63d138cc","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.11.0.tgz","fileCount":158,"integrity":"sha512-SuwW2NUmYuxLwFurjob1aCRO8CjDwWZSFSyR7xKd7u5wi8koDF8eu4mveJWmtxAforuHQ6zutBWsLwSiwXxl1A==","signatures":[{"sig":"MEQCIE+oP0FrJJwOHuFj5whB0IwMsJN53IkRC5qkgmvYXl7eAiAyCSEDkJUzqG8hifhpQqC95jGn6Im+PVu6tYb45GXSdw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":406335},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"ad82b46945a6d01596fb79b11d51dd811f9bf0d0","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.11.0_1749115622273_0.8916908252129041","host":"s3://npm-registry-packages-npm-production"}},"0.12.0":{"name":"@aituber-onair/core","version":"0.12.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.12.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"38d62242b9ba3b407613d6f2e3407ca2e04ba2b4","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.12.0.tgz","fileCount":158,"integrity":"sha512-9OH4YYDNG2i5dgHl1WUHGrgfIa4Mw0QsF/8rHbdZKJ6EMjc6jKCQAOybsxgXl43AnHkviLwbu3L8zTNct/46IA==","signatures":[{"sig":"MEQCICbIl2R42kObNJzDjTKqIJH2G/1/ZvHNI+l4lJisIvCbAiAHbrjxKpYciw+KzZV8k6hH3bzaagt8w3vcLwbo6X779g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416236},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"9fffb0d821470d899a94c2d4a4c5d415433dea8c","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.12.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.12.0_1749709318577_0.496554503365662","host":"s3://npm-registry-packages-npm-production"}},"0.13.0":{"name":"@aituber-onair/core","version":"0.13.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.13.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"1bce75b9223009b37baee15aa8bcfa8de72ed281","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.13.0.tgz","fileCount":158,"integrity":"sha512-pOv3S+9DpLUZyCw+c42X+thG3L39e0AVLstWM91aB1cm/NMR3bDWKN+Z1fi1RXIhF6V45J7QYRN58HD2E/TKjQ==","signatures":[{"sig":"MEUCIEcugXkIQGAOeNNi9I/3Kt60HZhb5kaEfZHCne68Dt0NAiEAo4lDt4z/zV00dtN0xWitixgMmIKxTyoqVU/0z2qsfFY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":416946},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"3cba958069e1e79f9bcbaf0e6597e97b670b8df1","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","actor":{"name":"shinshin86","type":"user","email":"shinshin86npm@gmail.com"},"email":"shinshin86npm@gmail.com"},"_npmVersion":"10.9.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.13.0_1750200401653_0.7075276466417468","host":"s3://npm-registry-packages-npm-production"}},"0.14.0":{"name":"@aituber-onair/core","version":"0.14.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.14.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"0ed92eec6cecbf64188dc1a507cc7327ace8273b","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.14.0.tgz","fileCount":161,"integrity":"sha512-gQaPNHfpClN1komHeH34/9e73UDhVZ+iD1TrL9jDdnfZsMQ+eXsZhxbBKVlGZOVien7W/u+3lbkSUGm7rY6uoQ==","signatures":[{"sig":"MEYCIQCsgI7bxxfPTon7RKbBJYGbqGTK2i2xHtpBCCIR17VYzgIhAKy/wXZ+2egFdwXAMowWO6Mj73LZRndDtoIKjl21+Rbz","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":447765},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"07b2adbcdc9d2b73d9ab2394d751e5d140c3fda8","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","actor":{"name":"shinshin86","type":"user","email":"shinshin86npm@gmail.com"},"email":"shinshin86npm@gmail.com"},"_npmVersion":"10.9.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"22.16.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.14.0_1750750937069_0.23947339486460906","host":"s3://npm-registry-packages-npm-production"}},"0.15.0":{"name":"@aituber-onair/core","version":"0.15.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.15.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"28139488aceb689cdb0d23ecf24c1a88cb66f63d","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.15.0.tgz","fileCount":119,"integrity":"sha512-wd1ZGy17C56iNXJzSoVn0qO2Y/mcZJ4vvAg7447LueHNGE3CEDqTEQRC9HQo0/6SFPVQXrSpMPuyW2dKsCFHAQ==","signatures":[{"sig":"MEQCIBWnK2joTXblQMiqKyUeEEuJ5KDS5nPEDngz6OIPZH3VAiAln88QGQjAFp0l55a0TgzCEZxySlx03wgCnT/X/hU2Wg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378492},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"22b16002a46d65cea9de379cdc35b84a249263dc","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","actor":{"name":"shinshin86","type":"user","email":"shinshin86npm@gmail.com"},"email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.2","dependencies":{"@aituber-onair/voice":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.15.0_1751463960814_0.3621436243655556","host":"s3://npm-registry-packages-npm-production"}},"0.16.0":{"name":"@aituber-onair/core","version":"0.16.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.16.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"43108de4d92162f437cb3355b1cf3c3dd616bc69","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.16.0.tgz","fileCount":119,"integrity":"sha512-Syqp1io+1K6TQuX3cF1RIlqEq5JaljJZVxQcPWRNVjkTJ6fLzyjphCQvsbUWLI9r10SkQmk82LA27nKAptv0MQ==","signatures":[{"sig":"MEUCIQDR4USnOzn5Hi/+5YSHBi48LSm7knAy60qH3MAmASW/CgIgWbnSmIWNi5xZkNO65Yv09/6hzljGSmBR/2RBdXFCUhw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":378727},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"ff7d5da017f2fc529e86108b5d915b9f23774e08","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.3","dependencies":{"@aituber-onair/voice":"^0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.16.0_1753235239624_0.9184375495694284","host":"s3://npm-registry-packages-npm-production"}},"0.16.1":{"name":"@aituber-onair/core","version":"0.16.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.16.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"277afa3641d9440dd20e2ce5f9881cda0e166e1e","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.16.1.tgz","fileCount":119,"integrity":"sha512-5aVshNvv39PbozjZtMwRQNa/1U3in0AhfblCbn6NkgsS/eqD/QJ5nZqvHbqF46krQJ05rT4Bk9uFynYypRaEBQ==","signatures":[{"sig":"MEYCIQD2hq3PZ467IMf3wZMIGNL22wTgL83No1GT6yn53rJtLQIhAPgLh1wnNkiiWDrydF0uKF+pX0qSDkTKNla/F4eHcw92","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":379393},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"d8e9ad46f15b71a906dcb54dc8f7e3c1c0a85452","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.4","dependencies":{"@aituber-onair/voice":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.16.1_1753259487369_0.9744439000210654","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@aituber-onair/core","version":"0.17.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.17.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"7fdef8f97efdf6ab15d5809ff0d547834034b9f0","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.17.0.tgz","fileCount":56,"integrity":"sha512-brmZESQ5tzU0PCfqPJXszYzIelLe7PEd20QbqbdiePf4m4oiZTfjXDSdIA0lIE3RR7TayAc5SKzwf+5NjASrsA==","signatures":[{"sig":"MEUCIEW1dWm8/UYM/6JkbaVBePufy0xyZGM7fJt3zHs87elXAiEArQPCFJHPWJRDrAawEG49wv+QH0qNK+nTBMnK1slUnbU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210457},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"8af63d72708fcee944efb25950d1a63831b604cc","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.4","dependencies":{"@aituber-onair/chat":"^0.1.0","@aituber-onair/voice":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.17.0_1754520691103_0.9208290522879214","host":"s3://npm-registry-packages-npm-production"}},"0.17.1":{"name":"@aituber-onair/core","version":"0.17.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.17.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"24b0b9e0e9ab9d27a658b3512678fe1237c211f0","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.17.1.tgz","fileCount":56,"integrity":"sha512-axLvI1ibOGdLUPR/eg00O56+npzoYqlBTP7zQrjYQ6hDqrMx/aAZ27AuTz8i9k26DdkCJQXcDusClaIRqnckjQ==","signatures":[{"sig":"MEYCIQCcmJoYEJn43UUWKHfho5ochX/APUdNYkyC/qRU1GzqjAIhAMre6N0gxpaj92ezbGKzkATWP5GD2k3FS2VAI76LnR+c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210796},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"c20cda93dd1ccae1a9a31a5977b2666881aa7f85","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.4","dependencies":{"@aituber-onair/chat":"^0.2.1","@aituber-onair/voice":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.17.1_1754984638646_0.37195256558113154","host":"s3://npm-registry-packages-npm-production"}},"0.17.2":{"name":"@aituber-onair/core","version":"0.17.2","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.17.2","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"b0f23fd93f6509a9da4c8742dcefab545d5b6c07","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.17.2.tgz","fileCount":56,"integrity":"sha512-lRQViZ/BPKjsUYg5/7zdPFQDxCheNddDqMoRFN9UgQbxtM5o2pfpZENg7tNe4i75hAKwxvriWo1/CSnYavIJMA==","signatures":[{"sig":"MEUCIQDjb3u5hkSrad8iKbQ0eSjuzLHfoMlUh880g/hau7GZDQIgIayDyIqVSXm1Evl9ybfiS9pXuMRA+rDI0OnGPdxYo5w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":210796},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"c49b4895b7e361ce08ee0f6e8e6d79a5a0b7278d","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.4","dependencies":{"@aituber-onair/chat":"^0.2.1","@aituber-onair/voice":"^0.4.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.17.2_1756517520403_0.7721105726401005","host":"s3://npm-registry-packages-npm-production"}},"0.17.3":{"name":"@aituber-onair/core","version":"0.17.3","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.17.3","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"b55d63b73d6b49b2bbe65b3530bcd09490781880","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.17.3.tgz","fileCount":56,"integrity":"sha512-mMwOnefs02JvbZs5qVAOCEqWn5GKygxlx//TYCy55nvl4u+dUk6iigZKJ1s5m7pItevhYUbSEpCki5sToKvhhA==","signatures":[{"sig":"MEQCIB0CY7ZiDyMtiLoWP80mXisR7WMI3tlxrNZQZ+REwdM7AiB9osZlqspk2BuCZ0m6j2bhdT94vIemH0rFBngq/ZsYXg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":211737},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"245caceecc431d475e2588213d41c0ae8752d023","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@aituber-onair/chat":"^0.2.1","@aituber-onair/voice":"^0.5.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.17.3_1762090000570_0.21183662457593244","host":"s3://npm-registry-packages-npm-production"}},"0.18.0":{"name":"@aituber-onair/core","version":"0.18.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.18.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"8062fcde94c86127302fe96535d5331bdeae1d28","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.18.0.tgz","fileCount":56,"integrity":"sha512-gzYsn7iJJzXzf6NxzYH3ReLPOPKhmfv0M0oAIR5yaFo9+uDMqAIlrgqCXy4BobIyBu0pAwzyictk5ZbTBrvydA==","signatures":[{"sig":"MEYCIQD+L1TwV+a/rjoP/Fu9gX3AqOAUIkXga6L4DMWq8m7VUwIhAJphWKsBXA5Vq5Gh/sRcVmPNSlpAMILGA8gC1aAAn9oh","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224564},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"da3bdc6861344e7e32a3696ae8fcfeace22bba47","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@aituber-onair/chat":"^0.2.1","@aituber-onair/voice":"^0.6.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.18.0_1762486811408_0.652839742156615","host":"s3://npm-registry-packages-npm-production"}},"0.18.1":{"name":"@aituber-onair/core","version":"0.18.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.18.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"e431fb8c6b82653879b350393a6bfe406c88fa7c","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.18.1.tgz","fileCount":56,"integrity":"sha512-aGRdkrqD8MlIiHjvw4bxLTYjIp1O3GR1Qa2mGj5ewbxuuq/z6+7axudBgBUqPLjyc54+VT0RIPwCDRVpFq+65w==","signatures":[{"sig":"MEYCIQCUIhlLw0BTl5NW1IfLAdj5GxSK1JzVyd0KD60Vh4yLXgIhAJSQcZUvovpg3YDbXvzs39D3sqym4Nvx02F3dOS9q1IC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224564},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"484062019bf5786dd36b56e4db58cbaf9498d7b0","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@aituber-onair/chat":"^0.2.1","@aituber-onair/voice":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.18.1_1762813674469_0.3186963756694108","host":"s3://npm-registry-packages-npm-production"}},"0.18.2":{"name":"@aituber-onair/core","version":"0.18.2","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.18.2","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"109913b3201da1be86e7274e5f292c42efbe57fc","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.18.2.tgz","fileCount":56,"integrity":"sha512-HihiXOkPPGwBKaY8mTpWoAg4SD4q6LNq2BDrjj4iADywQGWN0n32iSsN/IZZvF37ukFVVH9sX7muieaBbfKbbQ==","signatures":[{"sig":"MEUCIQCLIecWLwPYHQ1rPxnuQ2+LrrbdyGMqEGN+gVOXmsbaZwIgGRv20Sc5R+4EMzgdoiEGg8SxjWmQutP42KtB4n/ZUvc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224688},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"777976a2f971769ee55472834d9459f982bc10d1","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@aituber-onair/chat":"^0.5.0","@aituber-onair/voice":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.18.2_1763035855863_0.657450826815863","host":"s3://npm-registry-packages-npm-production"}},"0.18.3":{"name":"@aituber-onair/core","version":"0.18.3","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.18.3","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"e61f7a7f87eebc07ba05300726ee83b43702b613","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.18.3.tgz","fileCount":56,"integrity":"sha512-mmjyxQBgaePvDj79JKhN+q2SuIpvDOO0nS9X1J4ZCOh7WzcMDMq+J4fJeu1OfIYktdtIgQMuPDehfntm/KVJSw==","signatures":[{"sig":"MEYCIQDXPHbe+EqsExTnlmTGcTr+4H4E1HpbEvn2t8+o54F/EwIhAM3z2VueGAo55Oc4nZVavbZTKKtk7GXE7fpM0y9r9bd/","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224665},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"0436855e5899a43e25580d583475959fe1454dd6","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.5","dependencies":{"@aituber-onair/chat":"^0.6.0","@aituber-onair/voice":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.18.3_1763216661117_0.5980083595331007","host":"s3://npm-registry-packages-npm-production"}},"0.19.0":{"name":"@aituber-onair/core","version":"0.19.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.19.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"1fb4b132db2339dbd35fa18daef74165fb60bea1","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.19.0.tgz","fileCount":56,"integrity":"sha512-Lt6K2xuqoggIaX5MfNnJACJr5rQbpDVUCpmHz715QjeXNcxDXU4H1S8DYvGVK+vablkcfVTYYQNrCqOUVlpN2g==","signatures":[{"sig":"MEQCICMed6qYknJjJPguee35iKbzUXhU4XpZIwvj89fIm8D2AiBnTOzyOnJ60GrsAlLBH+CZhKhoZSimbDI+NI8VvZyrWg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224513},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"a6e28e8fb6cd4c4d35ba6e8a6b27952ef7564581","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@aituber-onair/chat":"^0.7.0","@aituber-onair/voice":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.19.0_1765793541598_0.13947237149661662","host":"s3://npm-registry-packages-npm-production"}},"0.19.1":{"name":"@aituber-onair/core","version":"0.19.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.19.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"f026b2b56f73df465858370cac818f63eca15536","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.19.1.tgz","fileCount":56,"integrity":"sha512-Vt8lJKRjH2nb67UbKs3n7byjVcktugmK7DpkY0VoPLoyK1USVNH76t8I7Hxk4RlY8u63ST3+IoARYx0WAfuGRQ==","signatures":[{"sig":"MEQCICV9cgg3grX4bgLZO6Cku8qXn6NznNZyOihX/H6T160mAiBjLxLFYjb9JPZ5vDAYJ1Be/PvruAcKka5n5HsdM0t+LQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":224572},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"b259b33dad1c8da373ac95c0d69bd6624e3856d9","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.19.6","dependencies":{"@aituber-onair/chat":"^0.8.0","@aituber-onair/voice":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.19.1_1768716255928_0.6876074927198981","host":"s3://npm-registry-packages-npm-production"}},"0.20.0":{"name":"@aituber-onair/core","version":"0.20.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.20.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"c0668f426c0748e79566cad51e5876a6a6dc9a6a","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.20.0.tgz","fileCount":56,"integrity":"sha512-N/HKzatAIw6vzkShOK71nGvawNYsC0WuEkWdEoSXpq56H40LqNGjITC4cnOI5gEidrmTRNq6FvhaadIy2kF7Ag==","signatures":[{"sig":"MEQCIEclmwbmo5G8N88yY0VlNQ7PSM6ZZMVgNNcK+dGk2n45AiBiP0XkhF7qAYGh6qf6VjGVPikQmfR595tNrkQS2FxkYQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":225362},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"31844a667494050b9c0c75befceb97682006c0fd","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.9.0","@aituber-onair/voice":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.20.0_1769124757188_0.14802082433540886","host":"s3://npm-registry-packages-npm-production"}},"0.21.0":{"name":"@aituber-onair/core","version":"0.21.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.21.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"b18183f39b9646575a26a46e9f11a613ae96fbb2","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.21.0.tgz","fileCount":56,"integrity":"sha512-xGjOcxMWqZGoAeVu1iHxc6DYMc6hiGQ5rVGn47o0BhMdQOXgISxZj5WKk2X2SMwA+UnNUsS+q129+EcxH3gIaA==","signatures":[{"sig":"MEUCIQDPAJ0RQ8JtVwLA//QXo64wVO9OHA7EBwakr7mHNvzYVgIgFECIiniOvzB76Hro30d/j/2JNJGoA8i3DX0lBt7f+O4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":227613},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"459f644a32937792a73019ef27a2cb9cd75c4dd9","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.10.0","@aituber-onair/voice":"^0.7.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.21.0_1769734167973_0.026854221852051552","host":"s3://npm-registry-packages-npm-production"}},"0.22.0":{"name":"@aituber-onair/core","version":"0.22.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.22.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"09a4971e5d79a4c4cf90637cb2d2ee99c2c67bcf","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.22.0.tgz","fileCount":56,"integrity":"sha512-pRuU47SSI4g0s3R2aualrZ8h6AeWD/nuzTE8KF/RB2eT5qg0a+GMQygAgxFynQqUmfZgq5JWTnUn+P8Qb7Z4sQ==","signatures":[{"sig":"MEQCIHRGF+Y7oD7kj4N1MYRM71bvSGDLdShkQZZV7WeLQIA7AiA7MCL9D2PrQH9X0c+UOXvFmv4vRss+/YAL/mjC2evwYg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230462},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"d9768746bb0cb8fe02e9f4336f95ed90407af367","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.10.0","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.22.0_1769851371878_0.6281921941084407","host":"s3://npm-registry-packages-npm-production"}},"0.22.1":{"name":"@aituber-onair/core","version":"0.22.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.22.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"959d80bb4d243524f6f0d090c555bf9e94d13844","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.22.1.tgz","fileCount":59,"integrity":"sha512-dPT0fp+rMJ0AVpFXiWgYWkwX01atamipc35IyHZwGrvIkgw7ifarAQjk+NIwlBkSPyKAIMJGzznRvYIdDzE7kQ==","signatures":[{"sig":"MEUCIQD/nYX3V/24q9Fxd5TV6SRlE3hGH3SvJ2KfkYU8+sLLqwIgDZDWJhX1X/M4qrCBgRTETw46jESWc67cmLsV9zYe2Hc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229264},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"febee64aeb82e87be3229e84db7454d2a7d43a8b","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.11.1","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.22.1_1770522631988_0.8507752647384876","host":"s3://npm-registry-packages-npm-production"}},"0.22.2":{"name":"@aituber-onair/core","version":"0.22.2","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.22.2","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"d9bf9111be865613a4679065e6d504ceb86d4e2c","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.22.2.tgz","fileCount":59,"integrity":"sha512-NafV4H2LJra/des23VNPQ7bikkHVwUb6x6rRc0crL/tJxWf60HvTTmc7+y98DzPPtptkc2J84btBAOkVorSF8Q==","signatures":[{"sig":"MEUCIDaeda+YtGz7a1ZlVwyyVoDZjYYw0+h36L3dDSPHdNwHAiEAiNWrOMGVGja57gzOfjFcsFdvFoMSb794PBCOcAlGzF8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229329},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"a03911f5e4fc6ce0e885bbbe327bd97a65ca4263","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.12.0","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.22.2_1770882347894_0.704667619802748","host":"s3://npm-registry-packages-npm-production"}},"0.23.0":{"name":"@aituber-onair/core","version":"0.23.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"df449c3f10bb3647cf355c3f068f5876e283086a","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.0.tgz","fileCount":59,"integrity":"sha512-sHxRQ9Y+aaNTa5awOuLdbFoHJfGrAQMlU3QrxJrHYgcQGvU4NosAZraQ97P0zxS+5VpM7EVILobpFZr2htY/vg==","signatures":[{"sig":"MEUCIQDgGtW27/lYBcIaYsf1b76b9wLuEr0sheyNrPG5ooJHIwIgf0sclLgLZQsTSd7HK5tgO7xQxtNITvNavSkoibY6dGQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":229851},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"d18210fad1f7aa553d39f53dd5d1a29fce92b745","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.14.0","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.0_1771492716663_0.42191061041976385","host":"s3://npm-registry-packages-npm-production"}},"0.23.1":{"name":"@aituber-onair/core","version":"0.23.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"09f54913eb7a2ee5bd20c174b242a73efd6726ec","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.1.tgz","fileCount":59,"integrity":"sha512-f8O4ZUYvjAR1CAuae5KRKcJRNBP2h3g+mcSfz5W+9xYflZsHFfsj3ovvPNXXoK3Dfbj/dLDSPzHPbVNh2kLIaQ==","signatures":[{"sig":"MEQCIHxFbcY6un54TedQPxSR3Y7dHC8ciS2AEri0sGHlE+dXAiBd7Uwo6vc5B6LLBYdlkd1w8vHnrsE/k6jl+nws/pifbQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230136},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"189cdb7ab1a0634c237632ecc2870d249c2b565c","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.15.0","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.1_1771574124700_0.8432903298833605","host":"s3://npm-registry-packages-npm-production"}},"0.23.2":{"name":"@aituber-onair/core","version":"0.23.2","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.2","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"fd04e6a2d44406ba1a41dc2a61dbac81561aec9a","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.2.tgz","fileCount":59,"integrity":"sha512-z3bNMlXVblojTvYhDvs2kVmo2NrnEzifs1zawfpALLUQ5Of7hOw6cREvJsWwfYgrvmFWBUZZq5fCt5hnIz6e9w==","signatures":[{"sig":"MEUCIQDmLOnmNXW/EcLxmASJTubcLnv7kHBS/RUAznFQmVht6QIgR6Vl58xlsiVv7C4j59sV1hNlxvQuEK6BKNSA1XFE8Ok=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230077},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"58a4a5190911a4cf1f0cc94cff8c1699cd9354e2","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.16.0","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.2_1771803684653_0.34659090304066553","host":"s3://npm-registry-packages-npm-production"}},"0.23.3":{"name":"@aituber-onair/core","version":"0.23.3","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.3","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"2a1601861cc83c8bd8aa5dc683a9f7116b521fbd","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.3.tgz","fileCount":59,"integrity":"sha512-3T246Sdd+Jt54UG4Di7X16yb4rc3zQKMlmfz9tvm2wLGPWSF2MgVWGpL+2tk0LMxMeh8jrDaMfwzQlhQRawqQQ==","signatures":[{"sig":"MEYCIQDWY5c0mFdsIQbhyqH78bloaq06N7kXdRyRc0B9l/sYYQIhAOmdNXoqntbgLCuhyUgpqZVIg4VpqjmZPrai712wGmYZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":230422},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"c9148a50ee1cb53fcbb4032abea7038b7575f0e2","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.17.0","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.3_1771917385810_0.7908856569697322","host":"s3://npm-registry-packages-npm-production"}},"0.23.4":{"name":"@aituber-onair/core","version":"0.23.4","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.4","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"e56d2cc2537589fb359b5a6c416aa6b3c042210f","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.4.tgz","fileCount":59,"integrity":"sha512-ovU2SHX8c/xRuZnMoVcW/PP5wac+ReZz6Bgdw7ahTYWeXYvmUMZ6wln30loLgTGlGvq5UDOnALatep9PN0DRIw==","signatures":[{"sig":"MEUCIQDRLA6Witffq0Zp4rMiDGkwbM+CzBJmRqHYBtoFttQJHQIgSPiFsUKtlDgEQReNQj3fOaMIhO6NdpZZF8G/yNckO5I=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231235},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"12f8bc0172becd6b2ed2a5af487517d50a0c200a","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.18.0","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.4_1772633877066_0.9043977052220771","host":"s3://npm-registry-packages-npm-production"}},"0.23.5":{"name":"@aituber-onair/core","version":"0.23.5","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.5","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"209e32edfb7e04bc43daf637c9a4d7f3a760370d","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.5.tgz","fileCount":59,"integrity":"sha512-GMxNibgOjbpNbTnMyL8W//gGYt9/eh3CZCpkNA05Z9XlFMlStvIeZN9Hno6PQSSiMUQiI171eStd3hnUzKCZ1g==","signatures":[{"sig":"MEUCIQCLuDWNwIyTcHURVidkbb3p37WN51h9uwzM9xzWB3T35wIgINpGJWRDlh9W+9d8S048E6KkOGdF3a+i0AvOsitwZDU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":231868},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"1dbb553d8ac803eb4ca8f7cbb52611a2c3426a01","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.0","dependencies":{"@aituber-onair/chat":"^0.19.0","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.5_1772796005120_0.22435760199502508","host":"s3://npm-registry-packages-npm-production"}},"0.23.6":{"name":"@aituber-onair/core","version":"0.23.6","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.6","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"8f7140d636f8c68b3bc677835b49b2c6b07de45a","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.6.tgz","fileCount":59,"integrity":"sha512-8fgUcBGGusKJBD5/2uPoaYKDeJdt4JEJ80rdoy0l/bfXSRcsZlBG0LdLeP6Ou0YUNSfJjrece7qs5GTObGEYMw==","signatures":[{"sig":"MEUCIQCLosR6OhOTSXWFeyZn9AO4NzaXQwv407gaW+TFypMZkgIgROzJH4SRZxr6/DISZsXh4CI3ErT4F1xcPNUqsmuhNpE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232055},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"c62f0869fa01553fc68211a7b5731c14d3ba3ed5","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@aituber-onair/chat":"^0.21.0","@aituber-onair/voice":"^0.8.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.6_1773826336502_0.9061218756811962","host":"s3://npm-registry-packages-npm-production"}},"0.23.7":{"name":"@aituber-onair/core","version":"0.23.7","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.7","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"0c3e1b12effab4539601bbf19ce15b2ad6d78d82","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.7.tgz","fileCount":59,"integrity":"sha512-zGOfVqn0jP/JZJk3ijCAPfKS+fOH4f+KEdAVdu6QP13XDnLti+Z8fhnIompCob0Mnn0ZkIzDoVmSW1Ff8SYNcQ==","signatures":[{"sig":"MEQCIF1Lg+qKA/by+Y0PXcdsskWa3MreQfSWAbn04+SQEBuLAiA07HV5bn7Uo5Dclh+E+n69ncfrTmv79Z+F1OWd3RhtVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":232658},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"e32437c577dac4382a082a165fb87d7d08765207","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@aituber-onair/chat":"^0.21.0","@aituber-onair/voice":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.7_1774184183254_0.8700821731267931","host":"s3://npm-registry-packages-npm-production"}},"0.23.8":{"name":"@aituber-onair/core","version":"0.23.8","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.8","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"34bfad86aa8a13f2e08b36f6fc5a379810fe1035","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.8.tgz","fileCount":59,"integrity":"sha512-NjyAzDiDktvja/DRivClOQwamPkV0uq/FnOdiBHoWZW6EMsUnCvb0JPS0ZfyP5109otr5tbidPJjWq9NaDNMnA==","signatures":[{"sig":"MEUCIQDovdDM/Ddi2mQVWeuVpSLqtYuJt+tTH6zzSO7jnUDBtAIgfqFOSpRGPtgflqCbru23nw1IE3Xel4SFg2kHIU8aF24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":234096},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"b98514f315ba8c6d5391efc9c6f1088e8f19f2e7","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@aituber-onair/chat":"^0.21.2","@aituber-onair/voice":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.8_1774517003486_0.6818682916801908","host":"s3://npm-registry-packages-npm-production"}},"0.23.9":{"name":"@aituber-onair/core","version":"0.23.9","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.23.9","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"28e7a858570b86c1f8775c11b333be41f7d0f9ca","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.23.9.tgz","fileCount":59,"integrity":"sha512-L9hN1c7UOHYRFdnQNVGv8Bgvg4ZuEnS9NNCyZ4rb4i5N6W81lrRD8WrT0luYQ5B+DPoATphHZxHwurE+fOh0qA==","signatures":[{"sig":"MEQCICgX+K463/FCbmMTspFDpz67mtLC///Ouu3NeMfIXl+wAiBnK24YITeyq7nUvE43/5oXwFVyBbjCcPkZ9JJamV90Vg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":235078},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"80abef52342e30f2d1db3e519da42c9c88c18caa","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.1","dependencies":{"@aituber-onair/chat":"^0.22.0","@aituber-onair/voice":"^0.9.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.23.9_1774828733058_0.422089495422858","host":"s3://npm-registry-packages-npm-production"}},"0.24.0":{"name":"@aituber-onair/core","version":"0.24.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.24.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"5ed70cd72c958af001683c8eb887d4b031b6e401","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.24.0.tgz","fileCount":59,"integrity":"sha512-XD4FyHbshOrlJoC1M8Xz0BGu+FlydTwX2j0J/wdk5JxfX4IquxEq+Vjsh/85+KWHXvHabEU6B7PnclaCS22RfA==","signatures":[{"sig":"MEUCIGmNGubWUU7Krke1qRHKLCqDo5dg2yT6xX7fQN1GZWWtAiEAqHLllwJT+mki7RPfaM5sXiFsvIUcKH1DTXRtHYqjy8Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":236163},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"d6358fc8646254812c2186a46cbbf1dd999cb6ce","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.23.0","@aituber-onair/voice":"^0.10.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.24.0_1775379799962_0.9859828835724176","host":"s3://npm-registry-packages-npm-production"}},"0.25.0":{"name":"@aituber-onair/core","version":"0.25.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"3639dc6bfb72faed2e5caa5fce887e6744caa230","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.0.tgz","fileCount":59,"integrity":"sha512-hf13PmD3tmjYyBDYRl189IJkyrg8IgsctMvspRN4Ok4iJlgisLOF0M4ePsjsCpz6+coX8MsaNSfO5/JVIRpxug==","signatures":[{"sig":"MEUCIQDTXAg/5wE8wjINkvCz+Qu53iZn/Ne+asF06U0sipT7OgIgTmY1QnRCisBeprsP9pGs/kpJ64D5cjYJsG1q8qIS2Q4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":237883},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"ef3f0d1934d2b3ad176abfb29261ebf321b84e62","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.25.0","@aituber-onair/voice":"^0.12.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.0_1775734700542_0.2608625648148142","host":"s3://npm-registry-packages-npm-production"}},"0.25.1":{"name":"@aituber-onair/core","version":"0.25.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"e5fdf982d1a3f12b9b9bfb0d508c435676c5352c","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.1.tgz","fileCount":59,"integrity":"sha512-poOALSUgEwmW3MiXSAy52gCW590RD/9P4qSw1pWP4LhPxSxjupERzGGYBHZIirJnjG/ZLcsN9RGJ0M99U164qg==","signatures":[{"sig":"MEQCIHE52CxU2NMxmKqVIDTUXy4l5Gb9xPJZOdoCHf9S5L06AiAX8lcpXUO4bb855uMDDor3IE0OR3JKDQxft5qJ/La9KQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":237883},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"17aac69ad48a77eace82fc3216b3ec988a19b670","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.25.0","@aituber-onair/voice":"^0.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.1_1775885250579_0.2601256858183443","host":"s3://npm-registry-packages-npm-production"}},"0.25.2":{"name":"@aituber-onair/core","version":"0.25.2","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.2","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"30504e87d7f5a5104bd40347ed6e2758a64e19f9","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.2.tgz","fileCount":59,"integrity":"sha512-PczpIrHZqv6AQo3JGQ0MsO7pb5+9Rtq/ltpjkKYSWat/IQ1tZk9kn2fnG2/G3IPqdfup/L6jmJdH/pUKgmhPUA==","signatures":[{"sig":"MEUCICyQK4VvEKclcWskzs2BApYEdcMdTCZp9py0tMsX916lAiEA7cYgHac8mSFh3q38QSrMn8Qd6yiiN9eOcy78CV/2OKU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":237883},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"08f32ef43ac06ade476419e9d346f2a708df9210","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.25.1","@aituber-onair/voice":"^0.12.1"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.2_1775978161247_0.8275162457974523","host":"s3://npm-registry-packages-npm-production"}},"0.25.3":{"name":"@aituber-onair/core","version":"0.25.3","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.3","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"436cc05ec8627a00597e1be88f5b3c8c3299e5ea","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.3.tgz","fileCount":59,"integrity":"sha512-6+Ih4Im1awDH5Uk2Kp0yNtFe/a5if0mUIg80qgXOsDADHO40Dyf+zMyW2vWj/MXWxeeySUdTHf4SWG3CS1MI7A==","signatures":[{"sig":"MEUCIQC7fcAe9e/Oz0Zz855EYeEHGfn+9yd2BG1nSovIkUPBTgIgHdNErbRJclUbCdAgeEFo3wULIxxAitZJNXBvmrs1G24=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":237936},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"688417b3109396629d084b5221e6c2bbcdbc008e","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.25.1","@aituber-onair/voice":"^0.13.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.3_1776325609851_0.6091708849133","host":"s3://npm-registry-packages-npm-production"}},"0.25.4":{"name":"@aituber-onair/core","version":"0.25.4","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.4","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"d36dad9193655e5fa3c7e5eb651dfe3feff66522","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.4.tgz","fileCount":59,"integrity":"sha512-SUJ9+fiMivTGiO8+IklxHzV0ikKa60trwPfce6ZbN9QKswQzuvYJ3pGS/OWN7VTirEULcT7vQt8E0Lo0ycSTJA==","signatures":[{"sig":"MEQCIBaZPlded4b7+zjBNvsA4DIrEGaaLvFXL7aQB2QjbL8yAiA7LKJWPGs+EITT0Q2yyOBlhevTw9I9V314TRGO8h6hLw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238098},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"5b51d80cc47314beb5661a401966d2949239fffc","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.26.0","@aituber-onair/voice":"^0.13.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.4_1776465900233_0.577870651423471","host":"s3://npm-registry-packages-npm-production"}},"0.25.5":{"name":"@aituber-onair/core","version":"0.25.5","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.5","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"597e79605fd85a789c10332091bab68b4e6def1f","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.5.tgz","fileCount":59,"integrity":"sha512-V1CnrSMhR0LQ52CwLm4w+vhvrZLlVyt92Ik//0LCDnwJbp7Fu25RMcEnfYJiHu1uUunSIAaVUyExqbEFt3H+0g==","signatures":[{"sig":"MEQCIAL5pTr9qO5PsHgFkeB5TFjmSOHeU2irhtNIKtxLOv2kAiBRjvz/9u/4FJKySwLPlcs3rQlmNMDekw926IJDSZEv4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238371},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"e4ec51826e5b8e455cd199caf7fab26c26e5bb32","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.27.0","@aituber-onair/voice":"^0.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.5_1776831690380_0.1488993080430383","host":"s3://npm-registry-packages-npm-production"}},"0.25.6":{"name":"@aituber-onair/core","version":"0.25.6","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.6","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"edaa65c2e15308dfd202df884f0172af5ebbe2d4","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.6.tgz","fileCount":59,"integrity":"sha512-okVbs3SSpLQCIEBi8xbjQtn6Yoh7XG7P0SKYGj4RGcfrH29shN0fotSUyB8mqSCgZkO5uYNLUQfqT8Sbv+TNyQ==","signatures":[{"sig":"MEUCIQCB4AOuLkVoqCx9SNIswOg9/c+xkWXipegeLBl6dPtQGQIgEOfilc6CqMSR6HEBKrHslur+oEeFsVEXbg4mJRBqdWQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":238568},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"9865d6b43408bd4f2d0297b170032758a516a2f2","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.28.0","@aituber-onair/voice":"^0.14.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.6_1777105037537_0.23302056385970848","host":"s3://npm-registry-packages-npm-production"}},"0.25.7":{"name":"@aituber-onair/core","version":"0.25.7","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.7","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"ebc7621dc4ffce34bd95f8f995b44ef4934837f7","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.7.tgz","fileCount":59,"integrity":"sha512-CWEUAG9m5BSjFaE9jg6N+hY7v6VgvPOAQei7tJBSc+JKec+mGK9P+8ApidGwgdjcTkjPUWRMFkgkBkZ0qBgsgg==","signatures":[{"sig":"MEQCIBw599H1YaBMhZlK9XEzw9fGa5sjUS8j3AHe5eLyvKpuAiBUWX9jGOnf8sV8KlzmlNhDyu2otBtKf1uGgnrwB6l/Hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":239728},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"63cb22cf0147a0ff9153fa0990a486e9d37b8803","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.28.0","@aituber-onair/voice":"^0.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.7_1777367056728_0.45679626147079366","host":"s3://npm-registry-packages-npm-production"}},"0.25.8":{"name":"@aituber-onair/core","version":"0.25.8","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.8","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"f706b387f314914e04913e584b8295426c09d94b","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.8.tgz","fileCount":59,"integrity":"sha512-pReAHGOHEv6A3Uhi+MUQrjpb72LY6RXoqjBWUWtDeeg8sBreFjoSlwjsvIY7r3OUgzhqLfpdNot5/rhx+bWhFQ==","signatures":[{"sig":"MEQCIGpWAOxP4NRiboDaqnxPdD1+pX4SZIgHD4f+hdKKjBIPAiACoHC46Kaa5g1N1uoIhRWYLl3TsevBMtJvW9yBqjIcQQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240513},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"2f1da291f228e28ecde20f5995412106f7c0447a","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.29.0","@aituber-onair/voice":"^0.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.8_1777500115546_0.8679177145044596","host":"s3://npm-registry-packages-npm-production"}},"0.25.9":{"name":"@aituber-onair/core","version":"0.25.9","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.9","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"4c7f21d8d6a59170a6afe0bc5c65071bdbebf98d","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.9.tgz","fileCount":59,"integrity":"sha512-aaIGhhlFsFTqd+0qbboZtOh+A7IWwUizVbtDUBWibl6+NkCVVFqynTPqUezgvL1YfhG3tVeTDbDR5/6PgoersA==","signatures":[{"sig":"MEYCIQCsyRn69wnLvQtlXbvR1Hr4zt9kAC1dCjhBVswy3OWy/gIhALgX5PBjm2WY7GjqHS71IWMyOzG8UvOiDGsI96EivLby","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240025},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"cc77d6f200dd139cd65f61cd4ce54637975e8d8f","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.30.0","@aituber-onair/voice":"^0.15.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.9_1778252400692_0.6989799518583202","host":"s3://npm-registry-packages-npm-production"}},"0.25.10":{"name":"@aituber-onair/core","version":"0.25.10","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.10","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"c392f3811df1b11f8903dc6a1962dc19db9b2ac8","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.10.tgz","fileCount":59,"integrity":"sha512-feX6sPPvGQ6BGD0gE5k56J1dofjxzT+Iz6xiptxneoD8VhA0x8f8JTfAvpvfZyFGIA6bu/IN0qEREMM+ffHq8w==","signatures":[{"sig":"MEQCIHgxs/9yl8JGFNzkSOkVzWVdHmLCb9W/O0pDQCZ2xeICAiAh0BHE/2+lOapsF1nQL5ZHcYPXtYoPzyOeikZGX32NAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243366},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"80842991d15b514eaacb7a8e51afd7485ba78a78","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.34.1","@aituber-onair/voice":"^0.16.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.10_1778936845689_0.6974436912086206","host":"s3://npm-registry-packages-npm-production"}},"0.25.11":{"name":"@aituber-onair/core","version":"0.25.11","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.11","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"ac3b029ac87d1e291316870225dc674b3cc74f8a","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.11.tgz","fileCount":59,"integrity":"sha512-9TzHwfZU3GcYwHj4jlHUfzlcRB6F1yfhh4WcEgSUkBr1QXNvEhAK4DMBsg2AUh0q9hCo8ak4FwW+RNpcjBCcLA==","signatures":[{"sig":"MEQCIG7Kal9BLCQsq0CEBOneGRtwihmZMuf+GoF7CWNIo8g/AiBEZdcrCHJjJ7NNg993ULof9rLSPE+b6pvzEEepXMH/hg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243524},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"838ef748908779f0b55d2d7f777f29fce6eb97cc","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.35.0","@aituber-onair/voice":"^0.16.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.11_1779276630926_0.4109305051071537","host":"s3://npm-registry-packages-npm-production"}},"0.25.12":{"name":"@aituber-onair/core","version":"0.25.12","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.25.12","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"2165513d6e174fccc6838ad6d3de982b5c00c362","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.25.12.tgz","fileCount":59,"integrity":"sha512-Lq9LnwuBLOXMIivn3+/Q4HdGH1VUn10giL+HdFpaLgZMqxm5dFHM8QSC8EcKZ4Nok1Ny5ggRVaWWm7t+Slcuow==","signatures":[{"sig":"MEYCIQCeZh4WzB0hjzeSxgSfyLz9OviDXPaaw7rRL5osL8ArHwIhAK/bN0RSCwjbRfaFqW+rj0KEZzfMdXlPBLWS//C8FElX","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243994},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"d102678022291a88d83324f51eb5aef8ccd42e96","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.36.0","@aituber-onair/voice":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.25.12_1780128079919_0.62971820815709","host":"s3://npm-registry-packages-npm-production"}},"0.26.0":{"name":"@aituber-onair/core","version":"0.26.0","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.0","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"b19d0c2fe923cb492686837c527ff4a4f19c209d","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.0.tgz","fileCount":59,"integrity":"sha512-zwitFndm/cSntMobjuZ1lRn2mvUR7kt0RXiThOwg1mxJiVwdf+Rhwb6QmdUnaY5z/VYsHNbmJeNTDqfGi8LzWw==","signatures":[{"sig":"MEQCIHhXTxqesLuA93FQ38gJxScD4OXU6rMGJXNXne7OEzcBAiBXWOr3reomrjjLVTYy6szvh3GxqZ228Z2fdNuYONEPaw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243861},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"800271506ce166c5e40723f25611b337166862f1","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.37.0","@aituber-onair/voice":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.0_1780269579284_0.24308127566294568","host":"s3://npm-registry-packages-npm-production"}},"0.26.1":{"name":"@aituber-onair/core","version":"0.26.1","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.1","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"5673799a84a7b964cd2916ef18d6c4a33c1a5543","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.1.tgz","fileCount":59,"integrity":"sha512-y34ryY7jho27UhVy3C2tUyKcCpYCEKEfunxRBRjn6dYgQ8jGdfuZ2rEjByxvb4T3VP9WALOInPvQ7/ZcHboWUA==","signatures":[{"sig":"MEQCIF7LzYrb86is2KPg73l4GRdY/7YKW9z+rtVTtFslwF43AiAjGxECr1upH2J9W/5G2hqzVkNF+yi3txJVnBikSAjtQA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":243861},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"aa22c17e650d48292fd862881a96a65d3c824746","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.38.0","@aituber-onair/voice":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.1_1781098114070_0.054801886363493146","host":"s3://npm-registry-packages-npm-production"}},"0.26.2":{"name":"@aituber-onair/core","version":"0.26.2","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.2","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"f405966e49ab68ed276ff7d7edc7338f47f430db","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.2.tgz","fileCount":59,"integrity":"sha512-Kr9WXf2sQiPl61tvz+OHgVPi3m83ZlK7LYAbWQ2CRWNdf4Z1VFRQq9VswPTzQIpJhtQ9w9yYPjgDEkHQ422lAA==","signatures":[{"sig":"MEUCIQD3UPZAdF27zZK3+mQr5arBGhg1wAwac39U/5JT91w4mQIge5m4zvzth/Siaol+RUgS2n9GUQMmMxnzuY6fbqsmito=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":244085},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"71a0fe1f144fa868fe961e4ee012cd167d44dbb5","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.39.0","@aituber-onair/voice":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.2_1781507608788_0.29778274514710557","host":"s3://npm-registry-packages-npm-production"}},"0.26.3":{"name":"@aituber-onair/core","version":"0.26.3","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.3","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"b890bb2e4223f2a5fbaaae02a808a79cf1323034","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.3.tgz","fileCount":59,"integrity":"sha512-T6eN18wrSkIVM8EqmCtJ3xUvjFJFVJTkNAQOMtAngwPG2UVQg2ZwNL78jnuE8/OSSeyyR/1kbRJvkCY9Z77uFQ==","signatures":[{"sig":"MEYCIQC0tj8l2V62UkTrCXAyo9rBnWiY7DylZt0Rxt4v7dysGAIhAIgSxaI2YcmQApg0ofk/p39sIRxt2jca1E9faoa8ptGV","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":245011},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"cbb2146fd0a0c6b38946054e8aa353f424df2d63","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.40.0","@aituber-onair/voice":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.3_1781739026555_0.11165834214176318","host":"s3://npm-registry-packages-npm-production"}},"0.26.4":{"name":"@aituber-onair/core","version":"0.26.4","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.4","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"694dccd727316700b0752328ab7acdd8e45439e5","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.4.tgz","fileCount":59,"integrity":"sha512-2O46k15XS4+7WYc7HUFm52MaOF1VJI3JfkpmxjtOPLMGZLv9EDosqU7uR/Ui8iPGkvqO8olml2QU1zjzZEOlYg==","signatures":[{"sig":"MEUCIG1eeXSzNw/kuD6tSHjR+MJYjUJO0lI/CFvmfLC5ymneAiEAnMeT2TthuNncXKwzPgNw3dyrpe7EGzRjYcWvKgqL0g4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246608},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"5ae2865e911037b229afb6fea6f91f965498dfd7","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.42.0","@aituber-onair/voice":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.4_1782207572194_0.12624556019352684","host":"s3://npm-registry-packages-npm-production"}},"0.26.5":{"name":"@aituber-onair/core","version":"0.26.5","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.5","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"8e709ed7b76be1f44cda5186593e871b152c172e","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.5.tgz","fileCount":59,"integrity":"sha512-quo0zWzvDlV5MaRWWVnDmGULJR4NWOA/MUh9PheOo87APBSRKtHY4RCEp7Y0e6W7hvBI6ILAB9XUoye2TcxARQ==","signatures":[{"sig":"MEYCIQCnz1Vd71bMR8o/lMbFPHEwDB71BLfIIq643ky4H2pwWwIhANK1SPSOZ/LE/G+LlL6yZQpWPtfrIuFE5TP9OX/p0LTM","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":246878},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"2279a207bb3b265522653a2e425cfb90a9c45100","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.43.0","@aituber-onair/voice":"^0.17.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.5_1782594560572_0.3512242584577663","host":"s3://npm-registry-packages-npm-production"}},"0.26.6":{"name":"@aituber-onair/core","version":"0.26.6","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.6","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"98cec3460820cac801d741a780a8e1800262d83f","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.6.tgz","fileCount":59,"integrity":"sha512-cyPrcLKSuzX5wK6J59cchdADBbmrsE61NTAgI7ewGnreBL9bp+7ziq4VF7w1WxoF7TIYg3ezxBaqQGadHg4ggw==","signatures":[{"sig":"MEQCIBvPDSr1CVgLO5Z0gP1j99C/bBicQiZ8lS+fY4ryGt35AiAftBatrr5t9xKz3RRBciLDV8P2PydVvkt+47ZPaN/rOA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":251359},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"9df3f4fdc3a692b0b6cc7fe6d1e79013d06ed0b0","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.44.0","@aituber-onair/voice":"^0.18.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.6_1783066301032_0.1472180975108952","host":"s3://npm-registry-packages-npm-production"}},"0.26.7":{"name":"@aituber-onair/core","version":"0.26.7","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.7","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"890999f775bfb11f16fdda846effc83d0578f80b","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.7.tgz","fileCount":59,"integrity":"sha512-ATR40eWWVlngVPJut5DSk9JYIBPrgwhxECYoyJUCsulFyMY1ghF3NfRvmuEqrOdPq7ysLMkbLv4kSSnx4aiEDA==","signatures":[{"sig":"MEUCIHJJkzC+EQ6RYxyafG8BmuPU1GtJxOBz8wXnbYhbnOzsAiEAlMSQ7SmB6cyMjgFXEIClbTPvLWNfgx2lGiW+Rq9wBDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":252457},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"21c7d2e08c8e2d90c33c1e5b6286820da79fe33a","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.46.0","@aituber-onair/voice":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.7_1783738158341_0.37658878527755735","host":"s3://npm-registry-packages-npm-production"}},"0.26.8":{"name":"@aituber-onair/core","version":"0.26.8","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.8","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"b610c00190966be30b628a7ac82d43a122ed7518","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.8.tgz","fileCount":59,"integrity":"sha512-ghGIqZ6veiOKmCQRfG//Z1N+4IKAo9v/TqQ72yFd1feC/NHWwpJC8EFhKzOXPrlcp2LfiZzIAiL3bD26h+QZbw==","signatures":[{"sig":"MEUCIQCFS6bOJoAZxMpyDxiFArGuoTBgIG29i/C5rnJKs4yjcgIgM53/7EBjj/Fy3kRC8eGVmFyduWXwB9Bs6Z76Gxkotxk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":253613},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"962e20d77ef58bbaf2812a446bc832829d8b10bf","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.48.0","@aituber-onair/voice":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.8_1784798726634_0.9472629177452205","host":"s3://npm-registry-packages-npm-production"}},"0.26.9":{"name":"@aituber-onair/core","version":"0.26.9","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.9","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"1ce8aa70c8ebd392a5136aada119e70d1a7cd405","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.9.tgz","fileCount":59,"integrity":"sha512-SMYQyuAA0bOW5HS0FjuMx1W+5qS6pmZ0XqI2MeJZQvu6zMhC+uUM6ytc/EFF+QRxOuCS17ZipmzGIP7zUJKDBQ==","signatures":[{"sig":"MEYCIQCUdrq/7K3oOe9XMYUoY+ZswRYcUVqOX+EeiQP7EZRHZAIhAIZ3JABy9AzEQFKqNwOeUyQSwqHIBcOs2HL8BTeMRVsK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":255585},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"6938625511bbb2554202d81dcae16991d34a1e14","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.49.0","@aituber-onair/voice":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.9_1785019021461_0.6290719953154655","host":"s3://npm-registry-packages-npm-production"}},"0.26.10":{"name":"@aituber-onair/core","version":"0.26.10","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.10","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"66b5393f13a8c584ab8993eb211775bcedb11829","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.10.tgz","fileCount":59,"integrity":"sha512-81dUIZndB54sEksluahX3W1NKHV/sWaE1KkvUtKZKOdSNEU7MV6R04ZWgCtW1FSGnfZI+eqxMr40225vHztiJQ==","signatures":[{"sig":"MEYCIQDbLgSLHj55mhrT3yEFRHJWLhFFNr8i2zDQOg1vIhQMuQIhAKcPk82WjIrI768s+1/YzKnuhKKdObeXIiSmO69mBy0l","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":256921},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","gitHead":"957d8857c2eda88494941b8de594294367cb1f02","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.50.0","@aituber-onair/voice":"^0.19.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.10_1785653704120_0.01296492767828461","host":"s3://npm-registry-packages-npm-production"}},"0.26.11":{"name":"@aituber-onair/core","version":"0.26.11","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.11","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"bfe13880ade929733374bd5faa32d77a62c9e898","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.11.tgz","fileCount":62,"integrity":"sha512-mCKyZbyrz0/nbPHQWw1II8YfwKMOmNfuAfCbUKLlym+9Z8xM5yFGWllf2B7NZB3TjEJnnNn/2xHuX1HIT9wjuA==","signatures":[{"sig":"MEYCIQDbQkeqs/qeW2BPZ3jwiNTpgfT0jB0WR9HOdq/mDcneMAIhAJdOZlW/QczjBIA7hg/KPHm/wCDYoDVOWuon9DcnV9ry","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDdSe6VC6bQbzEFjeHCA3+CRBDw+9Kg48SJkI+AW7n2kAIgbV/quzYXja0VNci/fVRHzoLVyWGJf20hpTNAKr3ON/c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":262131},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./agent":{"types":"./dist/agent.d.ts","default":"./dist/agent.js"},"./dist/*":"./dist/*","./package.json":"./package.json"},"gitHead":"d7f57e8511434c427f6e11292f27a7c3c242737a","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.52.0","@aituber-onair/voice":"^0.20.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.11_1787319958454_0.75057791176277","host":"s3://npm-registry-packages-npm-production"}},"0.26.12":{"name":"@aituber-onair/core","version":"0.26.12","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.12","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"29152fbdc687ef1418dec5054aaca0aae7b35b16","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.12.tgz","fileCount":62,"integrity":"sha512-ygartWjEvCd133jOt3fYXP1PbtfqNL37xf2n8ZlKn05J+6Io1Y/BrM27iiuSScZyxliDyf5FU4dDnOIJ6DrcFw==","signatures":[{"sig":"MEUCIBKVYLlyEY2HflAFd7VjUhItOGVdrt1UWsELAt3RD0SxAiEApoLilS5zBItZM1XUr1eVSHFI16VDb9kUvSoj6sGP4RQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIGMCDqTBl5W7hLVsvUrR/89n/0djgY3ps1FIIC+w4ubDAiAr03PTv1zCMBq/aoxbBhKqP6XcQcRcf7mSUz5t71aZfw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":263708},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./agent":{"types":"./dist/agent.d.ts","default":"./dist/agent.js"},"./dist/*":"./dist/*","./package.json":"./package.json"},"gitHead":"50a38fc983a9f720ae6a7f28562cdaaee2fca75c","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.53.0","@aituber-onair/voice":"^0.20.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.12_1788270468746_0.08336386318198685","host":"s3://npm-registry-packages-npm-production"}},"0.26.13":{"name":"@aituber-onair/core","version":"0.26.13","keywords":["aituber","vtuber","ai","voice","streaming"],"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","_id":"@aituber-onair/core@0.26.13","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"dist":{"shasum":"563a89c09da619b8e719f75d1a0994b1563bc0b5","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.13.tgz","fileCount":62,"integrity":"sha512-9TU42DIttgxrpaIpHYut6zHAVyAyEJda7p8qr5mtgveUq54q1B42iNTsK1TLOktO9J2mXhj3tSCtv3gBGgOrtg==","signatures":[{"sig":"MEYCIQCQyr3nrzd3AZGShyr8UJ8I57dAng1Iaff5hAa8Yg3BagIhAIFGGgWNZqcPYG7fuA/Agcoz7hhEk+k9E7kCCOPSiKRb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFO0oWehtmhnsXOpU5bTMgCaVGPicI5qy8jQ0Zsajy7jAiAZeELYB8Gqexjg8E3ThLnznDe0rZ7hVeOppHoSlLDPTA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":263898},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./agent":{"types":"./dist/agent.d.ts","default":"./dist/agent.js"},"./dist/*":"./dist/*","./package.json":"./package.json"},"gitHead":"e5f03ac7ce14d90948370d48e72dc79b01f740ed","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.54.0","@aituber-onair/voice":"^0.20.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"tmp":"tmp/core_0.26.13_1788422399586_0.5483548526042299","host":"s3://npm-registry-packages-npm-production"}},"0.26.14":{"_id":"@aituber-onair/core@0.26.14","dist":{"shasum":"8563b37d10b793847bed94349084af666421cfe5","tarball":"https://registry.npmjs.org/@aituber-onair/core/-/core-0.26.14.tgz","fileCount":62,"integrity":"sha512-+z+zFzFUSDuMtQ/65kh6TEgB0utPnNUHh+t/2Nq1qjAAkiPL3bNQvKv0NReihPsNxMJKXxe81hAaULBWLJyQYg==","signatures":[{"sig":"MEUCIQC38bedXI5+mIZehGD80azFnWAycN9DtXn/zcll9d+vaAIgGRqQop7+r6v5nMm/jYJXtmVDqi/58jPG6ihMNZUPTgU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIBiMh8dew4gezBGMEA+ZW2UcEW/Cs+ouT5TuiaK/K7AdAiEAqP6O1jzS+VfLXI2J9FAz2IVoqzA6wX/RZ53bq52V/j4="}],"unpackedSize":266622},"main":"dist/index.js","name":"@aituber-onair/core","types":"dist/index.d.ts","author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"module":"dist/index.js","exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./agent":{"types":"./dist/agent.d.ts","default":"./dist/agent.js"},"./dist/*":"./dist/*","./package.json":"./package.json"},"gitHead":"3c575cd263eab49e0db143cb41c801301b90d62b","license":"MIT","scripts":{"fmt":"biome format . --write","lint":"biome lint .","test":"npm run typecheck && vitest run","build":"tsc --project tsconfig.json","fmt:check":"biome format .","typecheck":"tsc --project tsconfig.dev.json","test:watch":"vitest","test:coverage":"vitest run --coverage","prepublishOnly":"npm run build"},"version":"0.26.14","_npmUser":{"name":"shinshin86","email":"shinshin86npm@gmail.com"},"keywords":["aituber","vtuber","ai","voice","streaming"],"_npmVersion":"10.8.2","description":"Core library for AITuber OnAir providing voice synthesis and chat processing","directories":{},"maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"_nodeVersion":"20.20.2","dependencies":{"@aituber-onair/chat":"^0.55.0","@aituber-onair/voice":"^0.21.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^1.3.1","typescript":"^5.0.0","@types/node":"^18.15.0","@biomejs/biome":"1.9.4","@vitest/coverage-v8":"^1.3.1"},"peerDependencies":{"@pixiv/three-vrm":"^1.0.9"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/core_0.26.14_1789199677194_0.44466712405370656"}}},"time":{"created":"2025-03-16T05:52:15.059Z","modified":"2026-09-12T07:54:37.506Z","0.1.0":"2025-03-16T05:52:15.385Z","0.1.1":"2025-03-16T06:06:57.052Z","0.1.2":"2025-03-16T06:35:12.212Z","0.2.0":"2025-03-20T00:11:55.850Z","0.3.0":"2025-03-29T14:25:22.010Z","0.4.0":"2025-04-02T23:26:50.072Z","0.5.0":"2025-04-14T23:12:23.727Z","0.5.1":"2025-04-14T23:29:28.467Z","0.6.0":"2025-04-19T08:13:51.698Z","0.7.0":"2025-04-24T06:25:48.934Z","0.8.0":"2025-05-11T04:07:44.019Z","0.8.1":"2025-05-15T00:32:22.883Z","0.9.0":"2025-05-22T23:17:47.251Z","0.9.1":"2025-05-23T05:15:19.743Z","0.10.0":"2025-05-24T07:51:02.871Z","0.11.0":"2025-06-05T09:27:02.470Z","0.12.0":"2025-06-12T06:21:58.779Z","0.13.0":"2025-06-17T22:46:41.875Z","0.14.0":"2025-06-24T07:42:17.262Z","0.15.0":"2025-07-02T13:46:01.025Z","0.16.0":"2025-07-23T01:47:19.844Z","0.16.1":"2025-07-23T08:31:27.535Z","0.17.0":"2025-08-06T22:51:31.300Z","0.17.1":"2025-08-12T07:43:58.842Z","0.17.2":"2025-08-30T01:32:00.577Z","0.17.3":"2025-11-02T13:26:40.775Z","0.18.0":"2025-11-07T03:40:11.613Z","0.18.1":"2025-11-10T22:27:54.676Z","0.18.2":"2025-11-13T12:10:56.070Z","0.18.3":"2025-11-15T14:24:21.311Z","0.19.0":"2025-12-15T10:12:21.770Z","0.19.1":"2026-01-18T06:04:16.095Z","0.20.0":"2026-01-22T23:32:37.335Z","0.21.0":"2026-01-30T00:49:28.178Z","0.22.0":"2026-01-31T09:22:52.043Z","0.22.1":"2026-02-08T03:50:32.135Z","0.22.2":"2026-02-12T07:45:48.050Z","0.23.0":"2026-02-19T09:18:36.846Z","0.23.1":"2026-02-20T07:55:24.874Z","0.23.2":"2026-02-22T23:41:24.800Z","0.23.3":"2026-02-24T07:16:25.946Z","0.23.4":"2026-03-04T14:17:57.218Z","0.23.5":"2026-03-06T11:20:05.311Z","0.23.6":"2026-03-18T09:32:16.647Z","0.23.7":"2026-03-22T12:56:23.408Z","0.23.8":"2026-03-26T09:23:23.631Z","0.23.9":"2026-03-29T23:58:53.187Z","0.24.0":"2026-04-05T09:03:20.108Z","0.25.0":"2026-04-09T11:38:20.688Z","0.25.1":"2026-04-11T05:27:30.716Z","0.25.2":"2026-04-12T07:16:01.421Z","0.25.3":"2026-04-16T07:46:49.990Z","0.25.4":"2026-04-17T22:45:00.390Z","0.25.5":"2026-04-22T04:21:30.533Z","0.25.6":"2026-04-25T08:17:17.693Z","0.25.7":"2026-04-28T09:04:16.898Z","0.25.8":"2026-04-29T22:01:55.717Z","0.25.9":"2026-05-08T15:00:00.859Z","0.25.10":"2026-05-16T13:07:25.894Z","0.25.11":"2026-05-20T11:30:31.102Z","0.25.12":"2026-05-30T08:01:20.069Z","0.26.0":"2026-05-31T23:19:39.444Z","0.26.1":"2026-06-10T13:28:34.263Z","0.26.2":"2026-06-15T07:13:28.938Z","0.26.3":"2026-06-17T23:30:26.695Z","0.26.4":"2026-06-23T09:39:32.327Z","0.26.5":"2026-06-27T21:09:20.698Z","0.26.6":"2026-07-03T08:11:41.189Z","0.26.7":"2026-07-11T02:49:18.463Z","0.26.8":"2026-07-23T09:25:26.775Z","0.26.9":"2026-07-25T22:37:01.614Z","0.26.10":"2026-08-02T06:55:04.285Z","0.26.11":"2026-08-21T13:45:58.531Z","0.26.12":"2026-09-01T13:47:48.836Z","0.26.13":"2026-09-03T07:59:59.689Z","0.26.14":"2026-09-12T07:54:37.299Z"},"author":{"url":"https://github.com/shinshin86","name":"shinshin86"},"license":"MIT","keywords":["aituber","vtuber","ai","voice","streaming"],"description":"Core library for AITuber OnAir providing voice synthesis and chat processing","maintainers":[{"name":"shinshin86","email":"shinshin86npm@gmail.com"}],"readme":"# AITuber OnAir Core\n\n![AITuber OnAir Core - logo](https://raw.githubusercontent.com/shinshin86/aituber-onair/refs/heads/main/packages/core/images/aituber-onair-core.png)\n\n[AITuber OnAir Core](https://www.npmjs.com/package/@aituber-onair/core) is a TypeScript library developed to provide functionality for the [AITuber OnAir](https://aituberonair.com) web service, designed for AI-based virtual streaming (AITuber).  \n\n[日本語版はこちら](https://github.com/shinshin86/aituber-onair/blob/main/packages/core/README_ja.md)\n\nWhile it is primarily intended to provide functionality for [AITuber OnAir](https://aituberonair.com), this project is published as open-source software and is available as an [npm package](https://www.npmjs.com/package/@aituber-onair/core) under the MIT License.\n\nIt specializes in generating response text and audio from text or image inputs, and is designed to easily integrate with other parts of an application (storage, YouTube integration, avatar control, etc.).\n\n## Chat and Voice model updates\n\nCore exposes the models and capability helpers from Chat 0.55.0 and the\nInworld model type from Voice 0.21.0. Existing provider defaults are unchanged.\n\n- Native models: GPT-6 Astra (`gpt-6-astra`), Claude Fable 5.1\n  (`claude-fable-5-1`), and DeepSeek V4.1 Flash (`deepseek-flash`).\n- OpenRouter: GPT-6 Astra / Astra Pro, Claude Fable 5.1, DeepSeek V4.1 Flash,\n  Gemini 3.8 Flash, Ling 3.0 Flash VL (free), Mercury 2.5, Nex N2.5 Mini / Pro\n  (free), Qwen3.8 Max 0902, and Muse Spark 1.3.\n- Models with required reasoning use their supported effort values. Native\n  Astra uses the Responses API and starts at `low`; use\n  `isOpenAIReasoningModel` and `getDefaultReasoningEffortForOpenAIModel`\n  for the expanded OpenAI family. Existing GPT-5 helpers remain available.\n- Native DeepSeek tool calling requires non-thinking mode\n  (`reasoning_effort: 'none'`). OpenRouter reasoning and vision support follow\n  the selected model's Chat capability metadata.\n- Inworld supports `inworld-tts-2-flash` in addition to the default\n  `inworld-tts-2`. Models without delivery-mode support, currently Flash, omit\n  that option and disable its control in all React examples. Voice-list\n  selection, persisted settings, and other audio options remain available.\n\nThe React basic example lists the new models explicitly. Avatar examples\nload the supported model list from Core and apply the Casual preset to\nsupported OpenAI reasoning models. Node examples pass the model and provider\noptions through to Core.\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Installation](#installation)\n- [Main Features](#main-features)\n- [Basic Usage](#basic-usage)\n- [Tool System](#tool-system)\n- [Function Calling Differences](#function-calling-differences)\n- [Using MCP](#using-mcp)\n- [Using OpenAI Remote MCP](#using-openai-remote-mcp)\n- [Using Claude MCP Connector](#using-claude-mcp-connector)\n- [Response Length Control](#response-length-control)\n- [Architecture](#architecture)\n- [Main Components](#main-components)\n- [Event System](#event-system)\n- [Supported Speech Engines](#supported-speech-engines)\n- [AI Provider System](#ai-provider-system)\n- [Agent SDK providers (Codex / Claude Agent SDK / Copilot)](#agent-sdk-providers-codex--claude-agent-sdk--copilot)\n- [Memory & Persistence](#memory--persistence)\n- [Examples](#examples)\n- [Integration with Existing Applications](#integration-with-existing-applications)\n- [Testing & Development](#testing--development)\n- [Migration Guide for Memory Events](#migration-guide-for-memory-events)\n\n## Overview\n\n**AITuberOnAirCore** is the central module that provides core features for AI tubers. It forms the core of the AITuber OnAir application. It encapsulates complex AI response generation, conversation context management, speech synthesis, and more, making these features available through a simple API.\n\n## Installation\n\nYou can install AITuber OnAir Core using npm:\n\n```bash\nnpm install @aituber-onair/core\n```\n\nOr using yarn:\n\n```bash\nyarn add @aituber-onair/core\n```\n\nOr using pnpm:\n\n```bash\npnpm install @aituber-onair/core\n```\n\n## Main Features\n\n- **AI Response Generation from Text Input**  \n  Generates natural responses to user text input using OpenAI GPT models.\n- **AI Response Generation from Images (Vision)**  \n  Generates AI responses based on recognized content from images (e.g., live broadcast screens).\n- **Conversation Context Management & Memory**  \n  Maintains long-running conversation context via short-, mid-, and long-term memory systems.\n- **Text-to-Speech Conversion**  \n  Compatible with multiple speech engines (VOICEVOX, VoicePeak, AivisSpeech, Aivis Cloud, OpenAI TTS, Gemini TTS, xAI, Unreal Speech, ElevenLabs, Inworld, Gradium, Piper Plus, Web Speech API).\n- **Emotion Extraction & Processing**  \n  Extracts emotion from AI responses and utilizes it for speech synthesis or avatar expressions.\n- **Event-Driven Architecture**  \n  Emits events at each stage of processing to simplify external integrations.\n- **Customizable Prompts**  \n  Allows customization of prompts for vision processing and conversation summarization.\n- **Pluggable Persistence**  \n  Memory features can be persisted via LocalStorage, IndexedDB, or other customizable methods.\n- **Function Calling with Tools Support**  \n  Enables AI to use tools for performing actions beyond text generation, such as calculations, API calls, or data retrieval.\n\n## Basic Usage\n\nBelow is a simplified example of how to use **AITuber OnAir Core**:\n\n```typescript\nimport {\n  AITuberOnAirCore,\n  AITuberOnAirCoreEvent,\n  AITuberOnAirCoreOptions\n} from '@aituber-onair/core';\n\n// 1. Define options\nconst options: AITuberOnAirCoreOptions = {\n  chatProvider: 'openai', // Optional. If omitted, the default OpenAI will be used.\n  apiKey: 'YOUR_API_KEY',\n  chatOptions: {\n    systemPrompt: 'You are an AI streamer. Act as a cheerful and friendly live broadcaster.',\n    visionSystemPrompt: 'Please comment like a streamer on what is shown on screen.',\n    visionPrompt: 'Look at the broadcast screen and provide commentary suited to the situation.',\n    memoryNote: 'This is a summary of past conversations. Please refer to it appropriately to continue the conversation.',\n    // Response length control\n    maxTokens: 150,                    // Direct token limit for text chat\n    responseLength: 'medium',          // Or use preset: 'veryShort', 'short', 'medium', 'long'\n    visionMaxTokens: 200,              // Direct token limit for vision processing\n    visionResponseLength: 'long',      // Or use preset for vision responses\n  },\n  // OpenAI Default model is gpt-4o-mini\n  // You can specify different models for text chat and vision processing\n  // model: 'o3-mini',        // Lightweight model for text chat (no vision support)\n  // visionModel: 'gpt-4o',   // Model capable of image processing\n  memoryOptions: {\n    enableSummarization: true,\n    shortTermDuration: 60 * 1000, // 1 minute\n    midTermDuration: 4 * 60 * 1000, // 4 minutes\n    longTermDuration: 9 * 60 * 1000, // 9 minutes\n    maxMessagesBeforeSummarization: 20,\n    maxSummaryLength: 256,\n    // You can specify a custom summarization prompt\n    summaryPromptTemplate: 'Please summarize the following conversation in under {maxLength} characters. Include important points.'\n  },\n  voiceOptions: {\n    engineType: 'voicevox', // Speech engine type\n    speaker: '1',           // Speaker ID\n    apiKey: 'ENGINE_SPECIFIC_API_KEY', // If required (e.g., OpenAI, MiniMax)\n    groupId: 'YOUR_GROUP_ID',          // If using MiniMax\n    endpoint: 'global',                // If using MiniMax: 'global' or 'china'\n    onComplete: () => console.log('Voice playback completed'),\n    // Custom API endpoint URLs (optional)\n    voicevoxApiUrl: 'http://custom-voicevox-server:50021',\n    voicepeakApiUrl: 'http://custom-voicepeak-server:20202',\n    aivisSpeechApiUrl: 'http://custom-aivis-server:10101',\n  },\n  debug: true, // Enable debug output\n};\n\n// 2. Create an instance\nconst aituber = new AITuberOnAirCore(options);\n\n// 3. Set up event listeners\naituber.on(AITuberOnAirCoreEvent.PROCESSING_START, () => {\n  console.log('Processing started');\n});\n\naituber.on(AITuberOnAirCoreEvent.ASSISTANT_PARTIAL, (text) => {\n  // Receive streaming responses and display in UI\n  console.log(`Partial response: ${text}`);\n});\n\naituber.on(AITuberOnAirCoreEvent.ASSISTANT_RESPONSE, (data) => {\n  const { message, screenplay, rawText } = data;\n  console.log(`Complete response: ${message.content}`);\n  console.log(`Original text with emotion tags: ${rawText}`);\n  if (screenplay.emotion) {\n    console.log(`Emotion: ${screenplay.emotion}`);\n  }\n});\n\naituber.on(AITuberOnAirCoreEvent.SPEECH_START, (data) => {\n  // The SPEECH_START event includes the screenplay object and rawText\n  if (data && data.screenplay) {\n    console.log(`Speech playback started: emotion = ${data.screenplay.emotion || 'neutral'}`);\n    console.log(`Original text with emotion tags: ${data.rawText}`);\n  } else {\n    console.log('Speech playback started');\n  }\n});\n\naituber.on(AITuberOnAirCoreEvent.SPEECH_END, () => {\n  console.log('Speech playback finished');\n});\n\naituber.on(AITuberOnAirCoreEvent.TOOL_USE, (toolBlock) => \n  console.log(`Tool use -> ${toolBlock.name}`, toolBlock.input));\n\naituber.on(AITuberOnAirCoreEvent.TOOL_RESULT, (resultBlock) => \n  console.log(`Tool result ->`, resultBlock.content));\n\naituber.on(AITuberOnAirCoreEvent.ERROR, (error) => {\n  console.error('Error occurred:', error);\n});\n\n// Memory and chat history related events\naituber.on(AITuberOnAirCoreEvent.CHAT_HISTORY_SET, (messages) => \n  console.log('Chat history set:', messages.length));\n\naituber.on(AITuberOnAirCoreEvent.CHAT_HISTORY_CLEARED, () => \n  console.log('Chat history cleared'));\n\naituber.on(AITuberOnAirCoreEvent.MEMORY_CREATED, (memory) => \n  console.log(`New memory created: ${memory.type}`));\n\naituber.on(AITuberOnAirCoreEvent.MEMORY_REMOVED, (memoryIds) => \n  console.log('Memory removed:', memoryIds));\n\naituber.on(AITuberOnAirCoreEvent.MEMORY_LOADED, (memories) => \n  console.log('Memory loaded:', memories.length));\n\naituber.on(AITuberOnAirCoreEvent.MEMORY_SAVED, (memories) => \n  console.log('Memory saved:', memories.length));\n\n// 4. Process text input\nawait aituber.processChat('Hello, how is the weather today?');\n\n// 5. Clear event listeners if needed\naituber.offAll();\n```\n\n## Tool System\n\nAITuber OnAir Core includes a powerful tool system that allows AI to perform actions beyond text generation, such as retrieving data or making calculations. This is particularly useful for creating interactive AITuber experiences.\n\n### Tool Definition Structure\n\nTools are defined using the `ToolDefinition` interface, which conforms to the function calling specification used by LLM providers:\n\n```typescript\ntype ToolDefinition = {\n  name: string;                 // The name of the tool\n  description?: string;         // Optional description of what the tool does\n  parameters: {\n    type: 'object';             // Must be 'object' (strictly typed)\n    properties?: Record<string, {\n      type?: string;            // Parameter type (e.g. 'string', 'integer')\n      description?: string;     // Parameter description\n      enum?: any[];             // For enumerated values\n      items?: any;              // For array types\n      required?: string[];      // Required nested properties\n      [key: string]: any;       // Other JSON Schema properties\n    }>;\n    required?: string[];        // Names of required parameters\n    [key: string]: any;         // Other JSON Schema properties\n  };\n  config?: { timeoutMs?: number }; // Optional configuration\n};\n```\n\nNote that the `parameters.type` property is strictly typed as `'object'` to conform to function calling standards used by LLM providers.\n\n### Registering and Using Tools\n\nTools are registered when initializing AITuberOnAirCore:\n\n```typescript\n// Define a tool\nconst randomIntTool: ToolDefinition = {\n  name: 'randomInt',\n  description: 'Return a random integer from 0 to (max - 1)',\n  parameters: {\n    type: 'object',  // This must be 'object'\n    properties: {\n      max: {\n        type: 'integer',\n        description: 'Upper bound (exclusive). Defaults to 100.',\n        minimum: 1,\n      },\n    },\n  },\n};\n\n// Create a handler for the tool\nasync function randomIntHandler({ max = 100 }: { max?: number }) {\n  return Math.floor(Math.random() * max).toString();\n}\n\n// Register the tool with AITuberOnAirCore\nconst aituber = new AITuberOnAirCore({\n  // ... other options ...\n  tools: [{ definition: randomIntTool, handler: randomIntHandler }],\n});\n\n// Set up event listeners for tool use\naituber.on(AITuberOnAirCoreEvent.TOOL_USE, (toolBlock) => \n  console.log(`Tool use -> ${toolBlock.name}`, toolBlock.input));\n\naituber.on(AITuberOnAirCoreEvent.TOOL_RESULT, (resultBlock) => \n  console.log(`Tool result ->`, resultBlock.content));\n```\n\n### Tool Iteration Control\n\nYou can limit the number of tool call iterations using the `maxHops` option:\n\n```typescript\nconst aituber = new AITuberOnAirCore({\n  // ... other options ...\n  chatOptions: {\n    systemPrompt: 'Your system prompt',\n    // ... other chat options ...\n    maxHops: 10,  // Maximum number of tool call iterations (default: 6)\n  },\n  tools: [/* your tools */],\n});\n```\n\n### Function Calling Differences\n\nAITuber OnAir Core supports major AI providers including OpenAI, Claude, Gemini, and Z.ai. Each provider has a different implementation of function calling (tool invocation). These differences are abstracted by AITuber OnAir Core, allowing developers to use a unified interface, but understanding the background is important.\n\n> Note: This explanation covers the API versions as of May 2025. APIs are frequently updated, so please refer to the official documentation for the latest information.\n\n#### OpenAI Function Calling Implementation\n\nOpenAI's function calling has the following characteristics:\n\n- **Tool Definition Format**: Uses an array of `functions` (deprecated) or `tools` (recommended from 2023-12-01) based on JSON Schema\n- **Response Format**: Returns a response object containing a `tool_calls` array when using tools\n- **Tool Result Submission**: Tool results are sent as messages with `role: 'tool'`\n- **Multiple Tool Support**: Can call multiple tools simultaneously (Parallel function calling)\n\n```typescript\n// OpenAI tool definition example (minimal form)\nconst tools = [\n  {\n    type: \"function\", \n    function: {\n      name: \"randomInt\",\n      description: \"Return a random integer from 0 to (max - 1)\",\n      parameters: {\n        type: \"object\",\n        properties: {\n          max: {\n            type: \"integer\",\n            description: \"Upper bound (exclusive). Defaults to 100.\"\n          }\n        },\n        required: [] // Explicitly specifying even when empty improves schema validity\n      }\n    }\n  }\n];\n\n// OpenAI tool call response example\n{\n  role: \"assistant\",\n  content: null,\n  tool_calls: [\n    {\n      id: \"call_abc123\",\n      type: \"function\",\n      function: {\n        name: \"randomInt\",\n        arguments: \"{\\\"max\\\":10}\" // Note that this is returned as a stringified JSON\n      }\n    }\n  ]\n}\n\n// Multiple tool calls example (Parallel function calling)\n{\n  role: \"assistant\",\n  content: null,\n  tool_calls: [\n    {\n      id: \"call_abc123\",\n      type: \"function\",\n      function: {\n        name: \"randomInt\",\n        arguments: \"{\\\"max\\\":10}\"\n      }\n    },\n    {\n      id: \"call_def456\",\n      type: \"function\",\n      function: {\n        name: \"getCurrentTime\",\n        arguments: \"{\\\"timezone\\\":\\\"JST\\\"}\"\n      }\n    }\n  ]\n}\n\n// OpenAI tool result submission example\n{\n  role: \"tool\",\n  tool_call_id: \"call_abc123\",\n  content: \"7\"\n}\n```\n\nWhen handling OpenAI's function calling, AITuber OnAir Core converts tool definitions to OpenAI's format and processes tool calls and results. The `transformToolToFunction` method in the class performs this conversion.\n\n#### Claude's Tool Calling Implementation\n\nClaude's tool calling has the following characteristics:\n\n- **Tool Definition Format**: Specifies `name`, `description`, and `input_schema` for each tool in the `tools` array\n- **Response Format**: Returned as a special block with `type: 'tool_use'` and stops with `stop_reason: 'tool_use'`\n- **Tool Result Submission**: Included in user role messages as `type: 'tool_result'`\n- **Special Streaming Handling**: Requires special logic to handle tool calls in streaming responses\n\n```typescript\n// Claude tool definition example\nconst tools = [\n  {\n    name: \"randomInt\",\n    description: \"Return a random integer from 0 to (max - 1)\",\n    input_schema: {\n      type: \"object\",\n      properties: {\n        max: {\n          type: \"integer\",\n          description: \"Upper bound (exclusive). Defaults to 100.\"\n        }\n      }\n    }\n  }\n];\n\n// Claude tool call response example\n{\n  id: \"msg_abc123\",\n  model: \"claude-haiku-4-5-20251001\",\n  role: \"assistant\",\n  content: [\n    { type: \"text\", text: \"I'll generate a random number for you.\" },\n    { \n      type: \"tool_use\", \n      id: \"tu_abc123\",\n      name: \"randomInt\",\n      input: { max: 10 }\n    }\n  ],\n  stop_reason: \"tool_use\"\n}\n\n// Example with only tool use, no text content\n{\n  id: \"msg_xyz789\",\n  model: \"claude-haiku-4-5-20251001\",\n  role: \"assistant\",\n  content: [\n    { \n      type: \"tool_use\", \n      id: \"tu_xyz789\",\n      name: \"randomInt\",\n      input: { max: 100 }\n    }\n  ],\n  stop_reason: \"tool_use\"\n}\n\n// Claude tool result submission example\n{\n  role: \"user\",\n  content: [\n    {\n      type: \"tool_result\",\n      tool_use_id: \"tu_abc123\",\n      content: \"7\"\n    }\n  ]\n}\n```\n\nWhen handling Claude's tool calls, AITuber OnAir Core processes Claude's unique format and abstracts the complex processing, especially during streaming responses. Special handling is included in the `runToolLoop` method.\n\n#### Gemini's Tool Calling Implementation\n\nGemini's tool calling has the following characteristics:\n\n- **Tool Definition Format**: Describes definitions in `functionDeclarations` within the `tools` array\n- **Response Format**: Returned as content objects containing `functionCall` parts\n- **Tool Result Submission**: Sent as `functionResponse` objects included in content parts\n- **Compositional Calling**: Supports Compositional Function Calling\n\n```typescript\n// Gemini tool definition example\nconst tools = [\n  {\n    functionDeclarations: [\n      {\n        name: \"randomInt\",\n        description: \"Return a random integer from 0 to (max - 1)\",\n        parameters: {\n          type: \"object\",\n          properties: {\n            max: {\n              type: \"integer\",\n              description: \"Upper bound (exclusive). Defaults to 100.\"\n            }\n          }\n        }\n      }\n    ]\n  }\n];\n\n// Gemini tool call response example (note the deep structure)\n{\n  candidates: [\n    {\n      content: {\n        parts: [\n          {\n            functionCall: {\n              name: \"randomInt\",\n              args: {\n                max: 10\n              }\n            }\n          }\n        ]\n      }\n    }\n  ]\n}\n\n// Compositional function calling example\n{\n  candidates: [\n    {\n      content: {\n        parts: [\n          {\n            functionCall: {\n              name: \"randomInt\",\n              args: {\n                max: 10\n              }\n            }\n          },\n          {\n            functionCall: {\n              name: \"formatResult\",\n              args: {\n                prefix: \"Random number:\",\n                value: \"<function_response:randomInt>\"\n              }\n            }\n          }\n        ]\n      }\n    }\n  ]\n}\n\n// Gemini tool result submission example\n// Include functionResponse directly in content parts (SDK automatically sets the role)\n{\n  parts: [\n    {\n      functionResponse: {\n        name: \"randomInt\",\n        response: {\n          value: \"7\"\n        }\n      }\n    }\n  ]\n}\n\n// When directly calling REST API, you might include role like this\n{\n  role: \"function\",\n  parts: [\n    {\n      functionResponse: {\n        name: \"randomInt\",\n        response: {\n          value: \"7\"\n        }\n      }\n    }\n  ]\n}\n```\n\nWhen handling Gemini's tool calls, AITuber OnAir Core processes Gemini's complex response structure and tool result format. Special logic is needed to convert tool responses to the appropriate JSON format.\n\n#### Streaming Implementation Differences\n\nEach provider also has differences in how tool calls are processed during streaming responses:\n\n1. **OpenAI**:\n   - During streaming, delta updates are sent as `delta.tool_calls`\n   - Requires accumulation to reconstruct complete tool call data\n\n2. **Claude**:\n   - SSE streaming uses special event types `content_block_delta` and `content_block_stop`\n   - Sends `stop_reason: \"tool_use\"` when a tool call is completed\n   - Requires a special parser to detect tool calls\n\n3. **Gemini**:\n   - During streaming, `functionCall` may be split across chunks\n   - Requires buffering to reconstruct complete JSON structures\n\nAITuber OnAir Core abstracts these streaming processing differences, allowing you to process tool calls and results with the same interface regardless of which provider you use.\n\n### Key Differences and Abstraction Between Providers\n\nAITuber OnAir Core abstracts the differences between these three providers and provides a unified interface:\n\n1. **Input Format Differences**:\n   - Each provider uses its own tool definition format\n   - AITuber OnAir Core performs appropriate conversions internally and provides a common `ToolDefinition` interface\n\n2. **Response Processing Differences**:\n   - OpenAI uses `tool_calls` objects\n   - Claude uses `tool_use` blocks\n   - Gemini uses `functionCall` objects\n   - AITuber OnAir Core processes each format and converts to unified `TOOL_USE` events\n\n3. **Tool Result Submission Format Differences**:\n   - Each provider accepts tool results in different formats\n   - AITuber OnAir Core converts and sends in the appropriate format\n\n4. **Streaming Processing Differences**:\n   - Claude in particular requires special handling for tool calls during streaming\n   - AITuber OnAir Core abstracts this and provides a consistent streaming experience across all providers\n\n5. **Tool Call Iteration**:\n   - The `runToolLoop` method is implemented according to each provider's characteristics, providing consistent tool iteration\n\nThrough these abstractions, developers can use tool functionality through AITuber OnAir Core's unified interface without worrying about the details of provider implementations. Even when switching providers, there's no need to change tool definition and processing code.\n\n## Using MCP\nAITuber OnAir Core allows you to integrate [MCP](https://modelcontextprotocol.io/introduction) using tool calls.\n\nHere's an example of integration.  \nThe following is a simple sample that integrates an `MCP` that returns a random number.\n\n```typescript\n// mcpClient.ts\nimport { Client as MCPClient } from \"@modelcontextprotocol/sdk/client/index.js\";\nimport { StreamableHTTPClientTransport } from \"@modelcontextprotocol/sdk/client/streamableHttp.js\";\n  \nlet clientPromise: Promise<MCPClient> | null = null;\n  \nasync function getMcpClient(): Promise<MCPClient> {\n  if (clientPromise) return clientPromise;\n\n  const client = new MCPClient({\n    name: \"random-int-server\",\n    version: \"0.0.1\",\n  });\n  const endpoint = import.meta.env.VITE_MCP_ENDPOINT as string;\n  if (!endpoint) throw new Error(\"VITE_MCP_ENDPOINT is not defined\");\n\n  const transport = new StreamableHTTPClientTransport(new URL(endpoint));\n  clientPromise = client.connect(transport).then(() => client);\n  return clientPromise;\n}\n\nexport function createMcpToolHandler<T extends { [key: string]: unknown } = any>(toolName: string) {\n    return async (args: T): Promise<string> => {\n      const client = await getMcpClient();\n      const out = await client.callTool({ name: toolName, arguments: args });\n      return (out.content as { text: string }[] | undefined)?.[0]?.text ?? \"\";\n    };\n  }\n```\n\n```typescript\nimport { createMcpToolHandler } from './mcpClient';\n\n// tool definition\nconst randomIntTool: ToolDefinition<{ max: number }> = {\n  name: 'randomInt',\n  description:\n    \"Return a random integer from 0 (inclusive) up to, but not including, `max`. If `max` is omitted the default upper‑bound is 100.\",\n  parameters: {\n    type: 'object',\n    properties: {\n      max: { type: 'integer', description: 'Exclusive upper bound for the random integer', minimum: 1 },\n    },\n    required: ['max'],\n  },\n};\n\n// mcp tool handler\nconst randomIntHandler = createMcpToolHandler<{ max: number }>('randomInt');\n\n// create options\nconst aituberOptions: AITuberOnAirCoreOptions = {\n  chatProvider,\n  apiKey: apiKey.trim(),\n  model,\n  chatOptions: {\n    systemPrompt: systemPrompt.trim() || DEFAULT_SYSTEM_PROMPT,\n    visionPrompt: visionPrompt.trim() || DEFAULT_VISION_PROMPT,\n  },\n  tools: [{ definition: randomIntTool, handler: randomIntHandler }],\n  debug: true,\n};\n\n// create new instance\nconst newAITuber = new AITuberOnAirCore(aituberOptions);\n```\n\n## Using OpenAI Remote MCP\n\nOpenAI's Responses API allows connecting to remote MCP servers. When you specify \nMCP server configurations via the `mcpServers` option, **AITuberOnAirCore** \nautomatically switches to the Responses API endpoint for OpenAI.\n\n```typescript\nimport {\n  AITuberOnAirCore,\n  AITuberOnAirCoreOptions,\n  MCPServerConfig,\n} from '@aituber-onair/core';\n\nconst mcpServers: MCPServerConfig[] = [\n  {\n    type: 'url',\n    url: 'https://mcp-server.example.com/',\n    name: 'example-mcp',\n    require_approval: 'never', // Optional: 'always' | 'never'\n    tool_configuration: { allowed_tools: ['example_tool'] },\n    authorization_token: 'YOUR_TOKEN',\n  },\n];\n\nconst options: AITuberOnAirCoreOptions = {\n  chatProvider: 'openai',\n  apiKey: 'your-openai-api-key',\n  model: 'gpt-4.1',\n  mcpServers, // Automatically switches to Responses API when MCP servers are configured\n};\n\nconst aituber = new AITuberOnAirCore(options);\n```\n\n**Note**: The `endpoint` configuration is OpenAI-specific and is automatically managed \nbased on MCP server configuration. Other providers (Claude, Gemini) use their own \nfixed endpoints.\n\n## Using Claude MCP Connector\n\nAITuber OnAir Core supports Claude's Model Context Protocol (MCP) connector feature, allowing you to connect to remote MCP servers directly from the Messages API without a separate MCP client.\n\n### Basic Usage\n\nWhen using the Claude provider, you can specify MCP servers in the `mcpServers` option:\n\n```typescript\nimport { AITuberOnAirCore, AITuberOnAirCoreOptions } from '@aituber-onair/core';\nimport { MCPServerConfig } from '@aituber-onair/core';\n\n// Define MCP server configuration\nconst mcpServers: MCPServerConfig[] = [\n  {\n    type: 'url',\n    url: 'https://mcp-server.example.com/sse',\n    name: 'example-mcp',\n    tool_configuration: {\n      enabled: true,\n      allowed_tools: ['example_tool_1', 'example_tool_2']\n    },\n    authorization_token: 'YOUR_TOKEN' // Optional, for OAuth-enabled servers\n  }\n];\n\n// Create AITuberOnAirCore instance with MCP servers\nconst options: AITuberOnAirCoreOptions = {\n  chatProvider: 'claude', // MCP is only supported with Claude\n  apiKey: 'your-claude-api-key',\n  model: 'claude-haiku-4-5-20251001',\n  chatOptions: {\n    systemPrompt: 'You are an AI streamer with access to remote tools via MCP.',\n  },\n  // Traditional tools (optional, can be used alongside MCP)\n  tools: [\n    {\n      definition: {\n        name: 'local_tool',\n        description: 'A local tool',\n        parameters: {\n          type: 'object',\n          properties: {\n            input: { type: 'string', description: 'Input text' }\n          }\n        }\n      },\n      handler: async (input) => {\n        return `Local result: ${input.input}`;\n      }\n    }\n  ],\n  // MCP servers configuration\n  mcpServers: mcpServers,\n  debug: true,\n};\n\nconst aituber = new AITuberOnAirCore(options);\n```\n\n### Multiple MCP Servers\n\nYou can connect to multiple MCP servers by including multiple configurations:\n\n```typescript\nconst mcpServers: MCPServerConfig[] = [\n  {\n    type: 'url',\n    url: 'https://mcp-server-1.example.com/sse',\n    name: 'server-1',\n    authorization_token: 'TOKEN_1'\n  },\n  {\n    type: 'url',\n    url: 'https://mcp-server-2.example.com/sse',\n    name: 'server-2',\n    tool_configuration: {\n      enabled: true,\n      allowed_tools: ['specific_tool_1', 'specific_tool_2']\n    }\n  }\n];\n```\n\n### OAuth Authentication\n\nFor MCP servers that require OAuth authentication, you can obtain an access token using the MCP inspector:\n\n```bash\nnpx @modelcontextprotocol/inspector\n```\n\nFollow the OAuth flow in the inspector and copy the `access_token` value to use as the `authorization_token` in your configuration.\n\n### Event Handling\n\nMCP tool usage is handled through the same event system as traditional tools:\n\n```typescript\n// Listen for tool usage (includes both traditional tools and MCP tools)\naituber.on(AITuberOnAirCoreEvent.TOOL_USE, (toolBlocks) => {\n  console.log('Tools used:', toolBlocks);\n});\n\naituber.on(AITuberOnAirCoreEvent.TOOL_RESULT, (resultBlocks) => {\n  console.log('Tool results:', resultBlocks);\n});\n```\n\n### Limitations\n\n- MCP connector is only available with the Claude provider\n- Only HTTP-based MCP servers are supported (STDIO servers are not supported)\n- Currently only tool calls are supported from the MCP specification\n- Not available on Amazon Bedrock and Google Vertex\n\n### Coexistence with Traditional Tools\n\nMCP servers and traditional tool definitions can be used simultaneously. The AI can access both local tools and remote MCP tools seamlessly.\n\n## Response Length Control\n\nAITuber OnAir Core provides comprehensive response length control functionality, allowing you to fine-tune AI response lengths for both text chat and vision processing.\n\n### Overview\n\nResponse length control helps you:\n- **Optimize costs** by limiting token usage\n- **Control response verbosity** for different scenarios\n- **Maintain consistent response patterns** across your application\n- **Separate control** for text chat and vision processing\n\n### Configuration Options\n\nYou can control response length using two approaches:\n\n#### 1. Direct Token Specification\n\nSpecify exact token limits directly:\n\n```typescript\nconst options: AITuberOnAirCoreOptions = {\n  chatOptions: {\n    maxTokens: 150,         // Direct token limit for text chat\n    visionMaxTokens: 200,   // Direct token limit for vision processing\n  },\n  // ... other options\n};\n```\n\n#### 2. Preset Response Lengths\n\nUse predefined presets for convenience:\n\n```typescript\nconst options: AITuberOnAirCoreOptions = {\n  chatOptions: {\n    responseLength: 'medium',        // Preset for text chat\n    visionResponseLength: 'long',    // Preset for vision processing\n  },\n  // ... other options\n};\n```\n\nAvailable presets:\n- `'veryShort'`: 40 tokens - Brief, essential responses only\n- `'short'`: 100 tokens - Concise but complete responses\n- `'medium'`: 200 tokens - Balanced length for most scenarios\n- `'long'`: 300 tokens - Detailed responses with context\n\n### Priority System\n\nWhen multiple length controls are specified, the following priority order applies:\n\n1. **Direct values** (`maxTokens`, `visionMaxTokens`) - Highest priority\n2. **Preset values** (`responseLength`, `visionResponseLength`) - Medium priority\n3. **Default values** (1000 tokens) - Fallback when nothing is specified\n\n### Vision-Specific Settings\n\nVision processing often requires different response lengths than text chat. You can configure them separately:\n\n```typescript\nconst options: AITuberOnAirCoreOptions = {\n  chatOptions: {\n    // Text chat settings\n    responseLength: 'short',      // Concise text responses\n    \n    // Vision processing settings\n    visionResponseLength: 'long', // Detailed image descriptions\n  },\n};\n```\n\nIf vision-specific settings are not provided, they will fall back to the regular chat settings.\n\n### Dynamic Updates\n\nResponse length settings can be updated at runtime:\n\n```typescript\n// Update chat processor options\naituber.updateChatProcessorOptions({\n  maxTokens: 100,\n  visionMaxTokens: 250,\n});\n```\n\n### Usage Examples\n\n#### Different Lengths for Different Scenarios\n\n```typescript\n// Short responses for quick interactions\nconst quickChat = new AITuberOnAirCore({\n  chatOptions: {\n    responseLength: 'veryShort',\n  },\n});\n\n// Detailed responses for educational content\nconst educationalChat = new AITuberOnAirCore({\n  chatOptions: {\n    responseLength: 'long',\n    visionResponseLength: 'long',\n  },\n});\n```\n\n#### Mixing Direct Values and Presets\n\n```typescript\nconst options: AITuberOnAirCoreOptions = {\n  chatOptions: {\n    maxTokens: 120,                  // Direct value for text chat\n    visionResponseLength: 'medium',  // Preset for vision\n  },\n};\n```\n\n### Provider Compatibility\n\nResponse length control is supported across all AI providers:\n- **OpenAI**: Uses `max_tokens` parameter\n- **Claude**: Uses `max_tokens` parameter  \n- **Gemini**: Uses `maxOutputTokens` parameter\n\nThe implementation handles provider-specific differences automatically.\n\n## Architecture\n\n**AITuberOnAirCore** is designed with the following layered structure:\n\n```\nAITuberOnAirCore (Integration Layer)\n    ├── ChatProcessor (Conversation handling)\n    │     └── ChatService (AI Chat)\n    ├── MemoryManager (Memory handling)\n    │     └── Summarizer (Summarization)\n    └── VoiceService (Speech processing)\n          └── VoiceEngineAdapter (Speech Engine Interface)\n                └── Various Speech Engines (VOICEVOX, OpenAI, etc.)\n```\n\n### Directory Structure\n\nThe source code is organized around the following directory structure:\n\n```\nsrc/\n  ├── constants/             # Constants and configuration\n  │     ├── index.ts         # Exported constants\n  │     └── prompts.ts       # Default prompts and templates\n  ├── core/                  # Core components\n  │     ├── AITuberOnAirCore.ts\n  │     ├── ChatProcessor.ts\n  │     └── MemoryManager.ts\n  ├── services/              # Service implementations\n  │     ├── chat/            # Chat services\n  │     │    ├── ChatService.ts            # Base interface\n  │     │    ├── ChatServiceFactory.ts     # Factory for providers\n  │     │    └── providers/                # AI provider implementations\n  │     │         ├── ChatServiceProvider.ts  # Provider interface\n  │     │         ├── claude/              # Claude-specific\n  │     │         │    ├── ClaudeChatService.ts\n  │     │         │    ├── ClaudeChatServiceProvider.ts\n  │     │         │    └── ClaudeSummarizer.ts\n  │     │         ├── gemini/              # Gemini-specific\n  │     │         │    ├── GeminiChatService.ts\n  │     │         │    ├── GeminiChatServiceProvider.ts\n  │     │         │    └── GeminiSummarizer.ts\n  │     │         └── openai/              # OpenAI-specific\n  │     │              ├── OpenAIChatService.ts\n  │     │              ├── OpenAIChatServiceProvider.ts\n  │     │              └── OpenAISummarizer.ts\n  │     ├── voice/           # Voice services\n  │     │    ├── VoiceService.ts\n  │     │    ├── VoiceEngineAdapter.ts\n  │     │    └── engines/    # Voice engine implementations\n  │     └── youtube/         # YouTube API integration\n  │          └── YouTubeDataApiService.ts  # YouTube Data API client\n  ├── types/                 # TypeScript type definitions\n  └── utils/                 # Utilities and helpers\n       ├── screenplay.ts     # Text and emotion processing\n       └── storage.ts        # Storage utilities\n```\n\n## Main Components\n\n### AITuberOnAirCore\n\nThis is the overall integration class, responsible for initializing and coordinating other components. It extends `EventEmitter` and emits events at various processing stages. In most cases, you will interact primarily with this class to use its features.\n\n**Main methods** include:\n\n- `processChat(text)` – Process text input\n- `processVisionChat(imageDataUrl, visionPrompt?)` – Process image input (optionally pass a custom prompt)\n- `stopSpeech()` – Stop speech playback\n- `getChatHistory()` – Retrieve chat history\n- `setChatHistory(messages)` – Set chat history from external source (e.g., for replay or migration)\n- `clearChatHistory()` – Clear chat history\n- `updateVoiceService(options)` – Update speech settings\n- `isMemoryEnabled()` – Check if memory functionality is enabled\n- `generateOneShotContentFromHistory(prompt, messageHistory)` – Generate new content from a system prompt and provided message history (one-shot, no impact on internal chat history)\n- `offAll()` – Remove all event listeners\n\n### ChatProcessor\n\nThe component that sends text input to an AI model (e.g., OpenAI GPT) and receives responses. It manages the conversation flow and supports streaming responses. It also handles emotion extraction from responses.\n\n- `updateOptions(newOptions)` – Allows you to update settings at runtime\n\n### MemoryManager\n\n**MemoryManager is designed to prevent issues such as API token limits, increased costs, and slow responses that can occur when the chat log grows too large. When a certain time or message threshold is exceeded, older chat history is summarized and stored as short-, mid-, and long-term memory. This allows recent conversation to be sent as-is, while past context is provided as a summary, maintaining context for the AI while keeping API requests efficient.**\n\nHandles conversational context. In long conversations, older messages are summarized and maintained as short-term (1 min), mid-term (4 min), and long-term (9 min) memory. This helps maintain consistency in AI responses.\n\n- **Custom Settings**: \n  - `summaryPromptTemplate` can be customized for summarization (it uses a `{maxLength}` placeholder).\n\n### VoiceService\n\nConverts text to speech. It integrates with multiple external speech synthesis engines through the `VoiceEngineAdapter`.\n\n#### speakTextWithOptions Method\n\nThe `AITuberOnAirCore` class provides a flexible `speakTextWithOptions` method for speech playback:\n\n```typescript\n// Example of speaking text with temporary settings\nawait aituberOnairCore.speakTextWithOptions('[happy] Hello, everyone watching!', {\n  // Enable or disable avatar animation\n  enableAnimation: true,\n  \n  // Temporarily override current speech settings\n  temporaryVoiceOptions: {\n    engineType: 'voicevox',\n    speaker: '8',\n    apiKey: 'YOUR_API_KEY'  // If required\n  },\n  \n  // Specify the ID of the HTML audio element for playback\n  audioElementId: 'custom-audio-player'\n});\n```\n\n**Key Features**:\n\n1. **Temporary Voice Settings**: Override current speech settings without permanently changing them.  \n2. **Animation Control**: Control avatar animation with the `enableAnimation` option.  \n3. **Flexible Audio Playback**: Play audio in a specified HTML audio element.  \n4. **Automatic Emotion Extraction**: Extract emotion tags (e.g., `[happy]`) from text and provide them in the `SPEECH_START` event.\n\n## Event System\n\n**AITuberOnAirCore** emits the following events:\n\n- `PROCESSING_START`: When processing begins  \n- `PROCESSING_END`: When processing finishes  \n- `ASSISTANT_PARTIAL`: Upon receiving partial responses from the assistant (streaming)  \n- `ASSISTANT_RESPONSE`: Upon receiving a complete response (includes a screenplay object and rawText with emotion tags)  \n- `SPEECH_START`: When speech playback starts (includes a screenplay object with emotion and rawText with emotion tags)  \n- `SPEECH_END`: When speech playback ends  \n- `TOOL_USE`: When the AI calls a tool (includes the name of the tool and its input parameters)  \n- `TOOL_RESULT`: When a tool execution completes and returns a result  \n- `ERROR`: When an error occurs  \n- `CHAT_HISTORY_SET`: When chat history is set\n- `CHAT_HISTORY_CLEARED`: When chat history is cleared\n- `MEMORY_CREATED`: When a new memory is created\n- `MEMORY_REMOVED`: When memory is removed\n- `MEMORY_LOADED`: When memory is loaded from storage\n- `MEMORY_SAVED`: When memory is saved to storage\n- `STORAGE_CLEARED`: When storage is cleared\n\n### Safely Handling Event Data\n\nIn particular, when implementing a listener for the `SPEECH_START` event, it is recommended to check if data is present:\n\n```typescript\n// Safe handling of SPEECH events\naituber.on(AITuberOnAirCoreEvent.SPEECH_START, (data) => {\n  if (!data) {\n    console.log('No data available');\n    return;\n  }\n  \n  const screenplay = data.screenplay;\n  if (!screenplay) {\n    console.log('No screenplay object');\n    return;\n  }\n  \n  const emotion = screenplay.emotion || 'neutral';\n  console.log(`Speech started: Emotion = ${emotion}`);\n  \n  // Get original text with emotion tags\n  console.log(`Original text: ${data.rawText}`);\n  \n  // Update UI or avatar animation\n  updateUIWithEmotion(emotion);\n});\n```\n\n### Emotion Handling\n\nIn a React application, you might use `useRef` to store the latest emotion data for immediate access:\n\n```typescript\n// Example in a React component\nconst [currentEmotion, setCurrentEmotion] = useState('neutral');\nconst emotionRef = useRef({ emotion: 'neutral', text: '' });\n\nuseEffect(() => {\n  if (aituberOnairCore) {\n    aituberOnairCore.on(AITuberOnAirCoreEvent.SPEECH_START, (data) => {\n      if (data?.screenplay?.emotion) {\n        setCurrentEmotion(data.screenplay.emotion);\n        emotionRef.current = data.screenplay;\n      }\n    });\n  }\n}, [aituberOnairCore]);\n\n// Use the ref for animation callbacks\nconst handleAnimation = () => {\n  const emotion = emotionRef.current.emotion || 'neutral';\n  // Perform animation based on emotion\n};\n```\n\n### ChatProcessor Events\n\nThe internal `ChatProcessor` emits additional events:\n\n- `chatLogUpdated`: Fired when the chat log is updated (e.g., when new messages are added or history is cleared).\n\nYou can access this event by referencing the `ChatProcessor` instance directly:\n\n```typescript\n// Example: using the chatLogUpdated event in ChatProcessor\nconst aituber = new AITuberOnAirCore(options);\nconst chatProcessor = aituber['chatProcessor']; // Accessing internal component\n\nchatProcessor.on('chatLogUpdated', (chatLog) => {\n  console.log('Chat log updated:', chatLog);\n  \n  // Example: Update UI\n  updateChatDisplay(chatLog);\n  \n  // Example: Sync with an external system\n  syncChatToExternalSystem(chatLog);\n});\n```\n\nPossible use cases for `chatLogUpdated` include:\n\n1. **Real-Time Chat UI Updates**  \n   Reflect new messages or cleared logs in the UI immediately.\n2. **External System Integration**  \n   Save chat logs to a database or send them to an analytics service.\n3. **Debugging & Monitoring**  \n   Monitor changes in the chat log during development.\n\n## Supported Speech Engines\n\n**AITuberOnAirCore** supports the following speech engines:\n\n- **VOICEVOX**: High-quality Japanese speech synthesis engine.  \n- **VoicePeak**: Speech synthesis engine with rich emotional expression, supporting single-tag or weighted emotion overrides.  \n- **AivisSpeech**: Speech synthesis using AI technology.  \n- **Aivis Cloud**: High-quality Japanese text-to-speech service with SSML support, emotional intensity control, and multiple output formats (WAV, FLAC, MP3, AAC, Opus).\n- **OpenAI TTS**: Text-to-speech API from OpenAI.\n- **Gemini TTS**: Gemini API-based text-to-speech with selectable preview TTS models including `gemini-3.1-flash-tts-preview`, plus style/audio-tag prompt support.\n- **xAI TTS**: xAI text-to-speech with selectable codec, sample rate, and bit rate options.\n- **Unreal Speech**: Unreal Speech v8 `/stream` endpoint with bitrate, speed, pitch, codec, and temperature options.\n- **ElevenLabs**: ElevenLabs Text to Speech API with model, output format, language code, voice settings, and text normalization options.\n- **Fish Audio**: Fish Audio one-shot TTS with S2 Pro by default, configurable output/latency options, and reference-voice list discovery.\n- **Cartesia**: Cartesia synchronous TTS with Sonic 3.5, language/output controls, and voice-list discovery.\n- **Inworld**: Inworld TTS REST API with selectable model, audio encoding, sample rate, bitrate, language, delivery mode, and temperature options.\n- **Gradium**: Gradium REST TTS API with selectable preset voices, output format, temperature, similarity, padding, and rewrite-rule options.\n- **OpenAI-Compatible TTS**: Self-hosted or third-party `/v1/audio/speech` compatible endpoints.\n- **MiniMax**: Multi-language TTS using the current T2A v2 models and documented system voice presets. An API key is required; GroupId is a legacy optional query parameter.\n- **Piper Plus**: Browser WASM TTS using ONNX Runtime Web and OpenJTalk assets for on-device synthesis.\n- **Web Speech API**: Browser-native speech synthesis with runtime voice-list\n  discovery and configurable rate, pitch, volume, and language. It plays audio\n  directly through the browser and does not expose audio bytes, so the Core\n  React examples do not support audio-buffer-based lip sync with this engine.\n- **None**: No voice mode (no audio output).\n\nYou can dynamically switch the speech engine via `updateVoiceService`:\n\n```typescript\n// Example of switching speech engines\naituber.updateVoiceService({\n  engineType: 'openai',\n  speaker: 'alloy',\n  apiKey: 'YOUR_OPENAI_API_KEY'\n});\n```\n\n### Speech Chunking (Optional)\n\nSpeech synthesis can optionally split assistant responses into smaller chunks so\nthat playback starts sooner for long messages. Chunking is **disabled by\ndefault** to preserve the previous behaviour (one TTS request per response).\n\nYou can enable and configure it when creating `AITuberOnAirCore`:\n\n```ts\nconst aituber = new AITuberOnAirCore({\n  // ... existing options ...\n  speechChunking: {\n    enabled: true,\n    // Minimum \"word\" count before a new chunk is started. Japanese text falls\n    // back to character counts when spaces are not present.\n    minWords: 40,\n    // Pick a preset for punctuation detection (ja | en | ko | zh | all)\n    locale: 'ja',\n    // Or override with your own separator characters\n    // separators: ['.', '!', '?'],\n  },\n});\n```\n\n- When enabled, the core splits text at punctuation (`。！？!?` and commas) and\n  merges adjacent segments until the `minWords` threshold is reached. This keeps\n  the number of TTS requests manageable while still reducing perceived\n  latency.\n- Setting `minWords` to `0` (or omitting it) keeps the raw punctuation-based\n  segments and simply streams them in order.\n- You can toggle the behaviour at runtime, for example when the viewer switches\n  between local and cloud TTS engines:\n\n```ts\naituber.updateSpeechChunking({ enabled: false });\naituber.updateSpeechChunking({\n  enabled: true,\n  minWords: 25,\n  locale: 'en',\n  separators: ['.', '!', '?'],\n});\n```\n\n### Custom API Endpoints\n\nFor locally hosted or overridable voice engines (VOICEVOX, VoicePeak, AivisSpeech, OpenAI-Compatible TTS, Unreal Speech, ElevenLabs, Inworld, Gradium), you can specify custom API endpoint URLs:\n\n```typescript\n// Example of setting custom API endpoints\naituber.updateVoiceService({\n  engineType: 'voicevox',\n  speaker: '1',\n  // Custom endpoint for a self-hosted or alternative VOICEVOX server\n  voicevoxApiUrl: 'http://custom-voicevox-server:50021'\n});\n\n// Example for VoicePeak\naituber.updateVoiceService({\n  engineType: 'voicepeak',\n  speaker: '2',\n  voicepeakApiUrl: 'http://custom-voicepeak-server:20202',\n  voicepeakEmotion: { happy: 40, fun: 60 },\n  voicepeakSpeed: 140,\n  voicepeakPitch: 20,\n});\n\n// Example for AivisSpeech\naituber.updateVoiceService({\n  engineType: 'aivisSpeech',\n  speaker: '3',\n  aivisSpeechApiUrl: 'http://custom-aivis-server:10101'\n});\n\n// Example for OpenAI-compatible TTS\naituber.updateVoiceService({\n  engineType: 'openaiCompatible',\n  openAiCompatibleApiUrl: 'http://localhost:8880/v1/audio/speech',\n  openAiCompatibleModel: 'your-model-id',\n  openAiCompatibleSpeed: 1.1\n});\n\n// Example for Aivis Cloud (high-quality Japanese TTS with SSML support)\naituber.updateVoiceService({\n  engineType: 'aivisCloud',\n  speaker: 'YOUR_SPEAKER_UUID', // Speaker UUID from Aivis Cloud\n  apiKey: 'YOUR_AIVIS_CLOUD_API_KEY',\n  // Optional parameters for advanced control\n  emotionalIntensity: 1.0,     // 0.0-2.0 range for emotional expression\n  speakingRate: 1.0,           // 0.5-2.0 range for speaking speed\n  outputFormat: 'wav'          // wav, flac, mp3, aac, opus\n});\n\n// Example for MiniMax (simplified configuration)\naituber.updateVoiceService({\n  engineType: 'minimax',\n  speaker: 'Japanese_IntellectualSenior', // or another system voice preset\n  apiKey: 'YOUR_MINIMAX_API_KEY',\n  groupId: 'YOUR_GROUP_ID',  // Legacy optional query parameter\n  endpoint: 'global'         // Optional: 'global' (default) or 'china'\n});\n\n// Example for Unreal Speech\naituber.updateVoiceService({\n  engineType: 'unrealSpeech',\n  speaker: 'af_bella',\n  apiKey: 'YOUR_UNREAL_SPEECH_API_KEY',\n  unrealSpeechBitrate: '192k',\n  unrealSpeechCodec: 'libmp3lame',\n  unrealSpeechSpeed: 0.3,\n});\n\n// Example for ElevenLabs\naituber.updateVoiceService({\n  engineType: 'elevenLabs',\n  speaker: 'YOUR_ELEVENLABS_VOICE_ID',\n  apiKey: 'YOUR_ELEVENLABS_API_KEY',\n  elevenLabsModel: 'eleven_flash_v2_5',\n  elevenLabsOutputFormat: 'mp3_44100_128',\n  elevenLabsLanguageCode: 'ja',\n});\n\n// MiniMax GroupId is a legacy optional query parameter.\n// MiniMax also supports region-specific endpoints:\n// - 'global': For international users (default)\n// - 'china': For users in mainland China\n```\n\nThis is useful when running voice engines on different ports or remote servers.\n\n## AI Provider System\n\nAITuber OnAir Core adopts an extensible provider system, enabling integration with various AI APIs.\nCurrently, OpenAI API, OpenAI-compatible APIs, Gemini API, Gemini Nano\n(Chrome Built-in AI), Claude API, xAI API, Z.ai API, Kimi API, and OpenRouter\nAPI, DeepSeek API, Mistral API, Sakana AI, and PLaMo are available. If you\nwould like to use any other API, please submit a PR or send us a message.\n\n### Available Providers\n\nCurrently, the following AI provider is built-in:\n\n- **OpenAI**: Supports models like GPT-5 family (Nano/Mini/Standard/5.1/5.4/5.5/5.6 Sol/Terra/Luna/5.4 Mini/5.4 Nano/5.4 Pro), GPT-4.1 (including Mini/Nano), GPT-4o, GPT-4o-mini, O3-mini, o1, o1-mini. GPT-5.6 models also support `max` reasoning effort.\n- **Gemini**: Supports models like Gemini 3.8 Flash, Gemini 3.7 Flash, Gemini 3.6 Flash, Gemini 3.5 Flash / Flash-Lite, Gemini 3.1 Flash-Lite, Gemini 3.1 Pro Preview, Gemini 3 Flash Preview, Gemini 2.5 Pro, Gemini 2.5 Flash, Gemini 2.5 Flash Lite, Gemma 4 31B IT, and Gemma 4 26B A4B IT. Gemini 3 Flash-family models support configurable `reasoning_effort`; Gemini 3.8 Flash and Gemini 3.7 Flash start at `low`, while earlier Flash models start at `minimal` and Pro models at `low`. Gemini 3.8 Flash also supports Vision and tool calling through the native Gemini provider. Gemini 2.5 continues to use `thinkingBudget` instead.\n- **Gemini Nano**: Supports the built-in Chrome `gemini-nano` model without an API key (Chrome 138+ with Prompt API flags enabled)\n- **Claude**: Supports current Claude API model IDs including Claude Fable 5, Claude Opus 5, Claude Sonnet 5, Claude Opus 4.8, Claude Opus 4.7, Claude Opus 4.6, Claude Opus 4.5, Claude Sonnet 4.6, Claude Sonnet 4.5, and Claude Haiku 4.5. Retired IDs remain exported for source compatibility but are not advertised in selectors. Supported models accept `reasoning_effort`, which maps to Anthropic's `output_config.effort`; the API default is `high`.\n- **xAI**: Supports Grok 4.6, Grok 4.5, Grok 4.3, and Grok 4.20 model families. Grok 4.6 supports `low`, `medium`, `high`, and `xhigh` reasoning effort and defaults to `low`; Grok 4.5 also defaults to `low`, while Grok 4.3 defaults to `none` for lower latency. Retired Grok 4.1 Fast IDs remain compatibility exports only.\n- **DeepSeek**: Supports DeepSeek V4 Flash, DeepSeek V4 Pro, and the vision-capable DeepSeek V4 Flash Vision Exp through the first-class `deepseek` provider. These models expose model-aware `reasoning_effort`; Core keeps Chat's low-latency `none` default, while higher supported efforts remain selectable. Thinking and tool calling cannot currently be combined in one request.\n- **Mistral**: Supports the vision-capable Ministral 3 family (`ministral-3b-2512`, `ministral-8b-2512`, `ministral-14b-2512`) and current Mistral generalist models such as `mistral-small-latest`, `mistral-medium-3-5`, and `mistral-large-latest`, including adjustable reasoning for supported models.\n- **Sakana AI**: Supports Fugu (`fugu`), the exact Fugu Ultra v1.1 ID (`fugu-ultra-v1.1`), and the Japanese-focused, vision-capable Sakana Namazu (`sakana-namazu`) through the first-class `sakana` provider. Namazu disables optional thinking by default for responsive chat and can enable it explicitly through chat template options. Older aliases remain compatibility exports. Browser examples show this provider as disabled because direct browser requests can fail with CORS; use Node.js or a backend proxy.\n- **PLaMo**: Supports PLaMo 3.0 Prime (`plamo-3.0-prime`) through the first-class `plamo` provider. PLaMo 2.2 Prime remains a deprecated compatibility export ahead of its scheduled retirement.\n- **Z.ai**: Supports GLM-5.3, the vision-capable GLM-5.3 Flash, GLM-5.2, GLM-5.1, GLM-5/GLM-5-Turbo (text-only), GLM-5V-Turbo (vision), GLM-4.7, GLM-4.7 Flash/FlashX, GLM-4.6, GLM-4.6V, and GLM-4.6V Flash/FlashX. GLM-5.3 models always use thinking, expose only `low`, `high`, and `max`, and default to the minimum `low` level for responsive chat. GLM-5.2 continues to default to `none`.\n- **Kimi**: Supports Kimi K3 (`kimi-k3`), Kimi K2.7 Code (`kimi-k2.7-code`), Kimi K2.7 Code HighSpeed (`kimi-k2.7-code-highspeed`), Kimi K2.6 (`kimi-k2.6`), and Kimi K2.5 (`kimi-k2.5`) with vision support. Models that expose `reasoning_effort` use their documented supported values and defaults: Kimi K3 accepts `low`, `high`, and `max`, defaults to `max`, and cannot disable reasoning. Kimi K2.7 Code models require thinking mode.\n- **OpenRouter**: Supports a curated OpenRouter model list, including Auto Router and Auto Router Beta, Fusion, latest-family aliases, OpenAI GPT-5.6, Claude Fable 5 / Sonnet 5 / Opus 5 / Opus 4.8, Gemini 3.7/3.6/3.5, Z.ai GLM-5.3 / GLM-5.3 Flash / GLM-5.2, xAI Grok 4.6/4.5, Kimi K3 / Kimi K2.6, Qwen3.8 Flash, KAT-Coder V2.5, and DeepSeek V4 Flash / V4 Flash Vision Exp / V4 Pro 0813. Model-aware vision and reasoning controls use Chat's current per-model values and low-latency defaults; catalog-absent IDs remain compatibility exports but are not advertised.\n- **OpenAI-Compatible**: Supports arbitrary OpenAI-compatible Chat Completions endpoints; vision capability is treated as unknown until the target endpoint/model responds\n\nFor OpenRouter free-tier discovery, you can also use\n`refreshOpenRouterFreeModels` via `@aituber-onair/core`\n(re-exported from `@aituber-onair/chat`).\n\n### Specifying a Provider\n\nYou can specify the provider when instantiating `AITuberOnAirCore`:\n\n```typescript\nconst aituberCore = new AITuberOnAirCore({\n  chatProvider: 'openai',  // Provider name\n  apiKey: 'your-api-key',\n  model: 'gpt-4o-mini',    // Optional (if omitted, the default model 'gpt-4o-mini' will be used)\n  // Other options...\n});\n```\n\n### Model-Specific Feature Limitations\n\nDifferent AI models support different features. For example:\n\n- **GPT-4o**, **GPT-4o-mini**: Support both text chat and image processing (Vision)\n- **O3-mini**: Supports text chat only (does not support image processing)\n- **GPT-5.4 Pro**: Uses Responses API only (Chat Completions API is not available)\n- **GPT-5.5 Pro**: Not included in supported models because OpenAI documents it as non-streaming, while the standard chat flow expects streaming support\n\nWhen selecting a model, be aware of these limitations. Attempting to use unsupported features will result in an explicit error.\n\nFor `openai-compatible`, vision support is treated as `unknown` because the\nlibrary cannot pre-validate arbitrary local/self-hosted endpoints. Image\nrequests are allowed, but unsupported endpoint/model combinations will fail at\nruntime with the upstream API error.\n\n**Note**: If you don't specify a model, the default model used is 'gpt-4o-mini'. This model supports both text chat and image processing.\n\n### Using Different Models Together\n\nIf you want to use different models for text chat and image processing, you can use the `visionModel` option:\n\n```typescript\nconst aituberCore = new AITuberOnAirCore({\n  apiKey: 'your-api-key',\n  chatProvider: 'openai',\n  model: 'o3-mini',       // For text chat \n  visionModel: 'gpt-4o',  // For image processing\n  // Other options...\n});\n```\n\nThis allows for optimizations such as using a lightweight model for text chat and a more powerful model only when image processing is needed.\n\nNote: When specifying a `visionModel`, ensure it supports vision capabilities.\nBuilt-in providers are validated during initialization. For\n`openai-compatible`, support is treated as unknown, so the request is allowed\nand the endpoint may reject it at runtime if vision is unsupported.\n\nIf you need to surface this in your own UI, `@aituber-onair/core` re-exports\nthe chat capability helpers:\n\n```typescript\nimport { ChatServiceFactory, type VisionSupportLevel } from '@aituber-onair/core';\n\nconst visionSupport: VisionSupportLevel =\n  ChatServiceFactory.getVisionSupportLevelForModel(\n    'openai-compatible',\n    'local-model',\n  );\n// 'supported' | 'unsupported' | 'unknown'\n```\n\n### Retrieving Providers & Models\n\nYou can programmatically retrieve available providers and their supported models:\n\n```typescript\n// Get all available providers\nconst providers = AITuberOnAirCore.getAvailableProviders();\n\n// Get supported models for a specific provider\nconst models = AITuberOnAirCore.getSupportedModels('openai');\n```\n\n### Creating a Custom Provider\n\nTo add a new AI provider, implement the `ChatServiceProvider` interface in a custom class and register it with the `ChatServiceFactory`:\n\n```typescript\nimport { ChatServiceFactory } from 'aituber-onair-core';\nimport { MyCustomProvider } from './MyCustomProvider';\n\n// Register the custom provider\nChatServiceFactory.registerProvider(new MyCustomProvider());\n\n// Use the registered provider\nconst aituberCore = new AITuberOnAirCore({\n  chatProvider: 'myCustomProvider',\n  apiKey: 'your-api-key',\n  // Other options...\n});\n```\n\n## Agent SDK providers (Codex / Claude Agent SDK / Copilot)\n\nAgent SDK providers use local subscription authentication instead of API keys.\nThey are available from the Node.js-only `@aituber-onair/core/agent` entry and\nare kept out of the main entry so browser applications do not load or register\nthem.\n\nThe `./agent` subpath is resolved through package `exports`. TypeScript\nconsumers must use `moduleResolution: \"node16\"`, `\"nodenext\"`, or `\"bundler\"`;\nlegacy `\"node\"` resolution cannot resolve it. This is the same requirement as\n`@aituber-onair/chat/agent`.\n\nInstall only the SDK package that matches the provider your application uses:\n\n```bash\nnpm install @aituber-onair/core @openai/codex-sdk\n# or\nnpm install @aituber-onair/core @anthropic-ai/claude-agent-sdk\n# or\nnpm install @aituber-onair/core @github/copilot-sdk\n```\n\nThe current provider-to-package mappings are `codex-sdk` to\n`@openai/codex-sdk`, `claude-agent-sdk` to\n`@anthropic-ai/claude-agent-sdk`, and `copilot-sdk` to\n`@github/copilot-sdk`. These SDKs are loaded dynamically and are not\ndependencies of `@aituber-onair/core`.\n\nUse `createAgentChatService` when you only need a standalone chat service:\n\n```typescript\nimport { createAgentChatService } from '@aituber-onair/core/agent';\n\nconst service = createAgentChatService('codex-sdk', {\n  workingDirectory: process.cwd(),\n  skipGitRepoCheck: true,\n});\n\nconst result = await service.chatOnce(\n  [{ role: 'user', content: 'Give me one short news headline.' }],\n  false,\n);\n```\n\nThe same entry registers the providers for `AITuberOnAirCore`, so the full\nCore flow does not need an API key:\n\n```typescript\nimport { AITuberOnAirCore } from '@aituber-onair/core/agent';\n\nconst core = new AITuberOnAirCore({\n  chatProvider: 'codex-sdk',\n  chatOptions: {\n    systemPrompt: 'You are a concise news presenter.',\n  },\n  providerOptions: {\n    workingDirectory: process.cwd(),\n    skipGitRepoCheck: true,\n  },\n  voiceOptions: {\n    engineType: 'aivisSpeech',\n    speaker: '888753760',\n  },\n});\n\nawait core.processChat('What should we cover today?');\n```\n\nCurrent limitations apply to the Agent SDK provider group as a whole: it is\nNode.js-only and text-only, and Core tools, vision chat, and MCP servers are not\nsupported. Streaming capability follows the underlying chat provider metadata;\ncurrently Codex SDK returns a completed response, while Claude Agent SDK and\nCopilot SDK can forward partial text when their SDKs emit it. Core memory\nsummarization is not supported with Agent SDK providers; enabling\n`memoryOptions.enableSummarization` throws a clear initialization error.\nMissing SDK packages or unavailable local authentication are reported at\nruntime with the underlying SDK error details.\n\n## Memory & Persistence\n\n**AITuberOnAirCore** includes a memory feature that maintains the context of long-running conversations. The AI summarizes older messages, preserving short-, mid-, and long-term context for more coherent responses.\n\n### Memory Types\n\nThere are three types of memory:\n\n1. **Short-Term Memory**  \n   - Generated **1 minute** after the conversation starts  \n   - Holds recent conversation details\n\n2. **Mid-Term Memory**  \n   - Generated **4 minutes** after the conversation starts  \n   - Holds slightly broader summaries of the conversation\n\n3. **Long-Term Memory**  \n   - Generated **9 minutes** after the conversation starts  \n   - Holds key themes and important information from the overall conversation\n\nThese memory records are automatically included in the AI prompts, helping the AI respond consistently over time.\n\n### Memory Persistence\n\nAITuberOnAirCore has a pluggable design for memory persistence, so that the conversation context can be retained even if the application is restarted.\n\n#### MemoryStorage Interface\n\nPersistence is provided through the abstract `MemoryStorage` interface:\n\n```typescript\ninterface MemoryStorage {\n  load(): Promise<MemoryRecord[]>;\n  save(records: MemoryRecord[]): Promise<void>;\n  clear(): Promise<void>;\n}\n```\n\n#### Default Implementations\n\n1. **LocalStorageMemoryStorage**  \n   - Uses the browser's LocalStorage  \n   - Simple solution (subject to storage limits)\n\n2. **IndexedDBMemoryStorage** (Planned)  \n   - Uses the browser's IndexedDB  \n   - Supports larger capacity and more complex data structures\n\n#### Custom Storage Implementations\n\nTo create your own storage implementation, simply implement the `MemoryStorage` interface:\n\n```typescript\nclass CustomMemoryStorage implements MemoryStorage {\n  async load(): Promise<MemoryRecord[]> {\n    // Load records from a custom storage\n    return customStorage.getItems();\n  }\n  \n  async save(records: MemoryRecord[]): Promise<void> {\n    // Save records to a custom storage\n    await customStorage.setItems(records);\n  }\n  \n  async clear(): Promise<void> {\n    // Clear records in a custom storage\n    await customStorage.clear();\n  }\n}\n```\n\n### Configuring the Memory Feature\n\nEnable the memory feature and set up persistence when initializing **AITuberOnAirCore**:\n\n```typescript\nimport { AITuberOnAirCore } from './lib/aituber-onair-core';\nimport { createMemoryStorage } from './lib/aituber-onair-core/utils/storage';\n\n// Create a memory storage (LocalStorage example)\nconst memoryStorage = createMemoryStorage('myapp.aiMemoryRecords');\n\n// Initialize AITuberOnAirCore\nconst aiTuber = new AITuberOnAirCore({\n  // Other options...\n  \n  // Memory options\n  memoryOptions: {\n    enableSummarization: true,\n    shortTermDuration: 60 * 1000,     // 1 minute (ms)\n    midTermDuration: 4 * 60 * 1000,   // 4 minutes\n    longTermDuration: 9 * 60 * 1000,  // 9 minutes\n    maxMessagesBeforeSummarization: 20,\n    maxSummaryLength: 256,\n    memoryRetentionPeriod: 60 * 60 * 1000, // 1 hour\n  },\n  \n  // Memory storage\n  memoryStorage: memoryStorage,\n});\n```\n\n### Memory-Related Events\n\nThe memory feature triggers the following events:\n\n- `memoriesLoaded`: When memory is loaded from storage (corresponds to AITuberOnAirCoreEvent.MEMORY_LOADED)\n- `memoryCreated`: When a new memory record is created (corresponds to AITuberOnAirCoreEvent.MEMORY_CREATED)\n- `memoriesRemoved`: When a memory record is deleted (corresponds to AITuberOnAirCoreEvent.MEMORY_REMOVED)\n- `memoriesSaved`: When memory records are saved to storage (corresponds to AITuberOnAirCoreEvent.MEMORY_SAVED)\n- `storageCleared`: When the storage is cleared (corresponds to AITuberOnAirCoreEvent.STORAGE_CLEARED)\n\nThese events are emitted by the `MemoryManager` instance internally, but in the latest version, the same events are also emitted by AITuberOnAirCore, so it's recommended to use the AITuberOnAirCore events.\n\n#### Using AITuberOnAirCore Events\n\nAITuberOnAirCore emits memory-related events that you can use directly:\n\n```typescript\n// Example of setting up memory and chat history related event listeners\naituber.on(AITuberOnAirCoreEvent.CHAT_HISTORY_SET, (messages) => {\n  console.log('Chat history set:', messages.length);\n  // Update UI, etc.\n});\n\naituber.on(AITuberOnAirCoreEvent.CHAT_HISTORY_CLEARED, () => {\n  console.log('Chat history cleared');\n  // Clear UI, etc.\n});\n\naituber.on(AITuberOnAirCoreEvent.MEMORY_CREATED, (memory) => {\n  console.log(`New memory created: ${memory.type}`);\n  // Display memory creation notification, etc.\n});\n\naituber.on(AITuberOnAirCoreEvent.MEMORY_REMOVED, (memoryIds) => {\n  console.log('Memory removed:', memoryIds);\n});\n\naituber.on(AITu","readmeFilename":"README.md"}