"""앱 원문 101개를 pinned edge-tts로 새로 생성하는 명령 진입점. import에는 부작용이 없다. 원문은 앱의 renderSentence를 그대로 호출하며 네트워크 생성·검증·원자 교체는 neural_audio가 담당한다. 빌드는 생성기를 호출하지 않는다. """ import json import subprocess import sys from neural_audio import ROOT, generate def main(): source = subprocess.check_output([ "node", "--experimental-strip-types", "--input-type=module", "-e", "import {INTRO,PATTERNS,WORDS,renderSentence} from './src/content.ts'; " "console.log(JSON.stringify([{file:'intro.wav',text:INTRO}," "...PATTERNS.flatMap(p=>WORDS.map(w=>({file:p.id+'-'+w.id+'.wav'," "text:renderSentence(p,w)})))]));", ], cwd=ROOT, text=True, timeout=10) manifest = generate(json.loads(source), ROOT / "public/audio") print(f"{len(manifest['files'])}개 신규 WAV 원자 교체 완료, " f"합계 {sum(e['bytes'] for e in manifest['files']):,} 바이트") if __name__ == "__main__": try: main() except KeyboardInterrupt: print("음성 생성 중단; 완성 전 공개 자산 변경 없음", file=sys.stderr) sys.exit(130) except Exception as error: # 인증 응답이 섞일 수 있는 외부 예외는 adapter에서 안전한 메시지로 바뀐다. print(f"음성 생성 실패: {error}", file=sys.stderr) sys.exit(1)