@astro-minimax/cli 0.7.0 → 0.7.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/podcast.d.ts +2 -0
- package/dist/commands/podcast.d.ts.map +1 -0
- package/dist/commands/podcast.js +89 -0
- package/dist/commands/podcast.js.map +1 -0
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +7 -2
- package/dist/commands/profile.js.map +1 -1
- package/dist/tools/build-fact-registry.d.ts +14 -0
- package/dist/tools/build-fact-registry.d.ts.map +1 -0
- package/dist/tools/build-fact-registry.js +545 -0
- package/dist/tools/build-fact-registry.js.map +1 -0
- package/dist/tools/eval-ai-chat.js +34 -4
- package/dist/tools/eval-ai-chat.js.map +1 -1
- package/dist/tools/lib/audio-processor.d.ts +46 -0
- package/dist/tools/lib/audio-processor.d.ts.map +1 -0
- package/dist/tools/lib/audio-processor.js +188 -0
- package/dist/tools/lib/audio-processor.js.map +1 -0
- package/dist/tools/lib/script-generator.d.ts +61 -0
- package/dist/tools/lib/script-generator.d.ts.map +1 -0
- package/dist/tools/lib/script-generator.js +182 -0
- package/dist/tools/lib/script-generator.js.map +1 -0
- package/dist/tools/lib/tts-provider.d.ts +65 -0
- package/dist/tools/lib/tts-provider.d.ts.map +1 -0
- package/dist/tools/lib/tts-provider.js +116 -0
- package/dist/tools/lib/tts-provider.js.map +1 -0
- package/dist/tools/lib/types.d.ts +129 -0
- package/dist/tools/lib/types.d.ts.map +1 -0
- package/dist/tools/lib/types.js +64 -0
- package/dist/tools/lib/types.js.map +1 -0
- package/dist/tools/podcast-feed.d.ts +6 -0
- package/dist/tools/podcast-feed.d.ts.map +1 -0
- package/dist/tools/podcast-feed.js +121 -0
- package/dist/tools/podcast-feed.js.map +1 -0
- package/dist/tools/podcast-generate.d.ts +15 -0
- package/dist/tools/podcast-generate.d.ts.map +1 -0
- package/dist/tools/podcast-generate.js +318 -0
- package/dist/tools/podcast-generate.js.map +1 -0
- package/dist/tools/podcast-list.d.ts +6 -0
- package/dist/tools/podcast-list.d.ts.map +1 -0
- package/dist/tools/podcast-list.js +66 -0
- package/dist/tools/podcast-list.js.map +1 -0
- package/package.json +3 -2
- package/template/.gitignore +7 -0
- package/template/datas/fact-registry.json +17 -0
- package/template/eslint.config.js +3 -0
- package/template/functions/api/chat.ts +6 -1
- package/template/package.json +8 -6
- package/template/src/config.ts +6 -2
- package/template/src/data/blog/zh/alerts-examples.md +86 -0
- package/template/src/data/blog/zh/code-examples.md +168 -0
- package/template/src/data/blog/zh/markmap-examples.md +103 -0
- package/template/src/data/blog/zh/math-examples.md +81 -0
- package/template/src/data/blog/zh/mermaid-examples.md +82 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"eval-ai-chat.js","sourceRoot":"","sources":["../../src/tools/eval-ai-chat.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"eval-ai-chat.js","sourceRoot":"","sources":["../../src/tools/eval-ai-chat.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,CAAC;AAC9C,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;AAC9D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;AAE1D,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAChD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AA+DlC,SAAS,SAAS;IAChB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,MAAM,KAAK,GAAa;QACtB,GAAG,EAAE,eAAe;QACpB,QAAQ,EAAE,IAAI;QACd,EAAE,EAAE,IAAI;QACR,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,KAAK;KACZ,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,GAAG,CAAC,UAAU,CAAC,QAAQ,CAAC;YAAE,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACvD,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC;YAAE,KAAK,CAAC,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aACtE,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC;YAAE,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAC1D,IAAI,GAAG,KAAK,WAAW;YAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;aAC9C,IAAI,GAAG,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;IAC/C,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8DAA8D;AAE9D,KAAK,UAAU,eAAe,CAC5B,MAAc,EACd,QAAgB,EAChB,IAAY;IAEZ,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAC3B,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;YAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,QAAQ,EAAE;oBACR;wBACE,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,EAAE;wBACxB,IAAI,EAAE,MAAM;wBACZ,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;qBAC1C;iBACF;gBACD,OAAO,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;gBAC5B,IAAI;aACL,CAAC;YACF,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;QAEnC,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QAE9C,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,CAAC;IAC7C,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAC;IACxB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW;IACrC,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACvC,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE,CAAC;gBACd,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACxB,CAAC;AAED,6DAA6D;AAE7D,SAAS,kBAAkB,CACzB,QAAgB,EAChB,cAAwB;IAExB,IAAI,CAAC,cAAc,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAE1G,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC/E,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;IAEtE,OAAO;QACL,IAAI,EAAE,gBAAgB;QACtB,MAAM;QACN,MAAM,EAAE,OAAO,CAAC,MAAM;YACpB,CAAC,CAAC,YAAY,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YAC/D,CAAC,CAAC,uBAAuB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KAC9C,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,QAAgB,EAChB,eAAyB;IAEzB,IAAI,CAAC,eAAe,CAAC,MAAM;QAAE,OAAO,EAAE,IAAI,EAAE,kBAAkB,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,EAAE,CAAC;IAE9G,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,KAAK,CAAC,CAAC;IAEvC,OAAO;QACL,IAAI,EAAE,kBAAkB;QACxB,MAAM;QACN,MAAM,EAAE,UAAU,CAAC,MAAM;YACvB,CAAC,CAAC,eAAe,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;YACxC,CAAC,CAAC,eAAe;KACpB,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB,EAAE,aAAuB;IAC9D,IAAI,CAAC,aAAa;QAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAE7F,MAAM,WAAW,GAAG,0BAA0B,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;IAEhC,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,MAAM,UAAU,CAAC,CAAC,CAAC,yBAAyB;KAC7E,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC;IAC3C,OAAO;QACL,IAAI,EAAE,WAAW;QACjB,MAAM;QACN,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,oBAAoB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,6BAA6B;KACvF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,QAAgB,EAAE,UAAkB;IAC3D,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAErC,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,eAAe,GAAG;gBACtB,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM;gBACnC,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,SAAS;aAC1D,CAAC;YACF,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;YAClE,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,UAAU;gBAClB,MAAM,EAAE,UAAU,CAAC,CAAC,CAAC,sCAAsC,CAAC,CAAC,CAAC,kCAAkC;aACjG,CAAC;QACJ,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACvC,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,2CAA2C;aAC5F,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnF,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,MAAM,EAAE,OAAO;gBACf,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,sBAAsB;aACxE,CAAC;QACJ,CAAC;QACD;YACE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,UAAU,EAAE,EAAE,CAAC;IAChF,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CACrB,QAAgB,EAChB,gBAA2B,EAC3B,kBAA2B;IAE3B,IAAI,CAAC,gBAAgB,EAAE,MAAM,IAAI,kBAAkB,KAAK,SAAS,EAAE,CAAC;QAClE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,wBAAwB,EAAE,CAAC;IAChF,CAAC;IAED,MAAM,WAAW,GAAG,0BAA0B,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnE,MAAM,UAAU,GAAG,gBAAgB,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CACjD,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CACxC,IAAI,EAAE,CAAC;IAER,MAAM,WAAW,GAAG,kBAAkB,IAAI,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC;IACxE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI,WAAW,CAAC;IAEhD,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,MAAM;QACN,MAAM,EAAE,MAAM;YACZ,CAAC,CAAC,OAAO,UAAU,CAAC,MAAM,IAAI,gBAAgB,EAAE,MAAM,IAAI,CAAC,mBAAmB;YAC9E,CAAC,CAAC,oBAAoB,gBAAgB,EAAE,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;KAChG,CAAC;AACJ,CAAC;AAED,MAAM,aAAa,GAA2B;IAC5C,SAAS,EAAE,CAAC;IACZ,cAAc,EAAE,CAAC;IACjB,gBAAgB,EAAE,CAAC;IACnB,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,CAAC;IACd,UAAU,EAAE,CAAC;CACd,CAAC;AAEF,SAAS,gBAAgB,CAAC,QAAkB,EAAE,QAAgB;IAC5D,OAAO;QACL,aAAa,CAAC,QAAQ,CAAC;QACvB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,cAAc,CAAC;QACrD,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC;QACxD,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,aAAa,CAAC;QAC/C,eAAe,CAAC,QAAQ,EAAE,QAAQ,CAAC,UAAU,CAAC;QAC9C,cAAc,CAAC,QAAQ,EAAE,QAAQ,CAAC,gBAAgB,EAAE,QAAQ,CAAC,kBAAkB,CAAC;KACjF,CAAC;AACJ,CAAC;AAED,8DAA8D;AAE9D,KAAK,UAAU,IAAI;IACjB,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAE1B,IAAI,OAAgB,CAAC;IACrB,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnD,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,eAAe,aAAa,EAAE,CAAC,CAAC;QAC9C,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAE1B,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACnB,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,KAAK,CAAC,EAAE,EAAE,CAAC;QACb,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC7B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAC1B,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,CAAC,MAAM,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,OAAO,GAAiB,EAAE,CAAC;IACjC,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QAC1B,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAE9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,IAAI,QAAQ,CAAC,EAAE,KAAK,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC;QAE1F,IAAI,CAAC;YACH,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,MAAM,eAAe,CACjD,KAAK,CAAC,GAAG,EACT,QAAQ,CAAC,QAAQ,EACjB,QAAQ,CAAC,IAAI,CACd,CAAC;YACF,YAAY,IAAI,OAAO,CAAC;YAExB,MAAM,MAAM,GAAG,gBAAgB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACpD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC3C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9C,OAAO,KAAK,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,CAAC,EAAE,CAAC,CAAC,CAAC;YACN,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAC9C,OAAO,KAAK,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAClD,CAAC,EAAE,CAAC,CAAC,CAAC;YACN,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAEhD,IAAI,SAAS;gBAAE,WAAW,EAAE,CAAC;YAE7B,MAAM,MAAM,GAAe;gBACzB,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,MAAM,EAAE,SAAS;gBACjB,KAAK;gBACL,QAAQ;gBACR,QAAQ,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBAChC,OAAO;gBACP,MAAM;aACP,CAAC;YACF,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAErB,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,IAAI,KAAK,IAAI,QAAQ,KAAK,OAAO,KAAK,CAAC,CAAC;YAE3D,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;gBAChC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;oBAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC/C,OAAO,CAAC,GAAG,CAAC,SAAS,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;gBACnE,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,mBAAmB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAChG,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,YAAY,QAAQ,EAAE,CAAC,CAAC;YAEpC,OAAO,CAAC,IAAI,CAAC;gBACX,MAAM,EAAE,QAAQ,CAAC,EAAE;gBACnB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;gBAC3B,MAAM,EAAE,KAAK;gBACb,KAAK,EAAE,CAAC;gBACR,QAAQ,EAAE,EAAE;gBACZ,QAAQ,EAAE,EAAE;gBACZ,OAAO,EAAE,CAAC;gBACV,MAAM,EAAE,EAAE;gBACV,KAAK,EAAE,QAAQ;aAChB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,2DAA2D;IAE3D,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,GAAG,CAAC,UAAU,WAAW,IAAI,CAAC,CAAC;IACvC,OAAO,CAAC,GAAG,CAAC,UAAU,OAAO,CAAC,MAAM,GAAG,WAAW,IAAI,CAAC,CAAC;IACxD,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,YAAY,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAChG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6C,CAAC;IACxE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;QAClE,GAAG,CAAC,KAAK,EAAE,CAAC;QACZ,IAAI,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,MAAM,EAAE,CAAC;QAC3B,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACxB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,CAAC,QAAQ,GAAG,KAAK,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,2DAA2D;IAE3D,MAAM,MAAM,GAAe;QACzB,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,MAAM,EAAE,KAAK,CAAC,GAAG;QACjB,UAAU,EAAE,OAAO,CAAC,MAAM;QAC1B,MAAM,EAAE,WAAW;QACnB,MAAM,EAAE,OAAO,CAAC,MAAM,GAAG,WAAW;QACpC,QAAQ,EAAE,GAAG,CAAC,CAAC,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QACjE,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;QACrF,OAAO;KACR,CAAC;IAEF,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,MAAM,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,aAAa,WAAW,EAAE,CAAC,CAAC;IAExC,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/C,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,WAAW,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio processing module for podcast generation.
|
|
3
|
+
* Uses FFmpeg to concatenate audio segments and get audio metadata.
|
|
4
|
+
*
|
|
5
|
+
* @module podcast/audio-processor
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Concatenate multiple audio segments into a single audio file.
|
|
9
|
+
*
|
|
10
|
+
* @param segments - Array of audio data (Uint8Array, each should be MP3 format)
|
|
11
|
+
* @param outputFormat - Output format (default: "mp3")
|
|
12
|
+
* @returns Concatenated audio data
|
|
13
|
+
* @throws Error if segments array is empty or ffmpeg processing fails
|
|
14
|
+
*
|
|
15
|
+
* @example
|
|
16
|
+
* ```typescript
|
|
17
|
+
* const segments = [
|
|
18
|
+
* await textToSpeech("Hello", { voice: "alloy" }),
|
|
19
|
+
* await textToSpeech("World", { voice: "alloy" }),
|
|
20
|
+
* ];
|
|
21
|
+
* const combined = await concatenateAudio(segments);
|
|
22
|
+
* // combined is a single MP3 file
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
export declare function concatenateAudio(segments: Uint8Array[], outputFormat?: "mp3"): Promise<Uint8Array>;
|
|
26
|
+
/**
|
|
27
|
+
* Get the duration of an audio file in seconds.
|
|
28
|
+
*
|
|
29
|
+
* @param audio - Audio data (MP3 format)
|
|
30
|
+
* @returns Duration in seconds
|
|
31
|
+
* @throws Error if ffprobe fails to read the audio
|
|
32
|
+
*/
|
|
33
|
+
export declare function getAudioDuration(audio: Uint8Array): Promise<number>;
|
|
34
|
+
/**
|
|
35
|
+
* Get audio metadata including duration and format information.
|
|
36
|
+
*
|
|
37
|
+
* @param audio - Audio data (MP3 format)
|
|
38
|
+
* @returns Audio metadata object
|
|
39
|
+
*/
|
|
40
|
+
export declare function getAudioMetadata(audio: Uint8Array): Promise<{
|
|
41
|
+
duration: number;
|
|
42
|
+
format: string;
|
|
43
|
+
bitrate: number;
|
|
44
|
+
sampleRate: number;
|
|
45
|
+
}>;
|
|
46
|
+
//# sourceMappingURL=audio-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-processor.d.ts","sourceRoot":"","sources":["../../../src/tools/lib/audio-processor.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyDH;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,UAAU,EAAE,EACtB,YAAY,GAAE,KAAa,GAC1B,OAAO,CAAC,UAAU,CAAC,CAqDrB;AAED;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAsBzE;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC;IACjE,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CA6BD"}
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Audio processing module for podcast generation.
|
|
3
|
+
* Uses FFmpeg to concatenate audio segments and get audio metadata.
|
|
4
|
+
*
|
|
5
|
+
* @module podcast/audio-processor
|
|
6
|
+
*/
|
|
7
|
+
import ffmpeg from "fluent-ffmpeg";
|
|
8
|
+
import { tmpdir } from "node:os";
|
|
9
|
+
import { join } from "node:path";
|
|
10
|
+
import { writeFile, readFile, unlink, mkdir, rmdir } from "node:fs/promises";
|
|
11
|
+
import { randomUUID } from "node:crypto";
|
|
12
|
+
import ffmpegStatic from "ffmpeg-static";
|
|
13
|
+
let cachedFfmpegPath = null;
|
|
14
|
+
async function getFFmpegPath() {
|
|
15
|
+
if (!cachedFfmpegPath) {
|
|
16
|
+
const path = await Promise.resolve(ffmpegStatic);
|
|
17
|
+
cachedFfmpegPath = path || "ffmpeg";
|
|
18
|
+
}
|
|
19
|
+
return cachedFfmpegPath;
|
|
20
|
+
}
|
|
21
|
+
async function createTempDir() {
|
|
22
|
+
const workDir = join(tmpdir(), `podcast-${randomUUID()}`);
|
|
23
|
+
await mkdir(workDir, { recursive: true });
|
|
24
|
+
return workDir;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Clean up a temporary directory and its contents.
|
|
28
|
+
* @param dirPath - Path to the directory to clean up
|
|
29
|
+
*/
|
|
30
|
+
async function cleanupTempDir(dirPath) {
|
|
31
|
+
try {
|
|
32
|
+
const files = await readFile(dirPath, "utf-8").catch(() => null);
|
|
33
|
+
if (files === null)
|
|
34
|
+
return;
|
|
35
|
+
// Remove all files in the directory
|
|
36
|
+
const entries = await import("node:fs/promises").then((fs) => fs.readdir(dirPath));
|
|
37
|
+
for (const entry of entries) {
|
|
38
|
+
try {
|
|
39
|
+
await unlink(join(dirPath, entry));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Ignore errors when removing files
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
// Remove the directory
|
|
46
|
+
try {
|
|
47
|
+
await rmdir(dirPath);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Ignore errors when removing directory
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
// Ignore all errors during cleanup
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Concatenate multiple audio segments into a single audio file.
|
|
59
|
+
*
|
|
60
|
+
* @param segments - Array of audio data (Uint8Array, each should be MP3 format)
|
|
61
|
+
* @param outputFormat - Output format (default: "mp3")
|
|
62
|
+
* @returns Concatenated audio data
|
|
63
|
+
* @throws Error if segments array is empty or ffmpeg processing fails
|
|
64
|
+
*
|
|
65
|
+
* @example
|
|
66
|
+
* ```typescript
|
|
67
|
+
* const segments = [
|
|
68
|
+
* await textToSpeech("Hello", { voice: "alloy" }),
|
|
69
|
+
* await textToSpeech("World", { voice: "alloy" }),
|
|
70
|
+
* ];
|
|
71
|
+
* const combined = await concatenateAudio(segments);
|
|
72
|
+
* // combined is a single MP3 file
|
|
73
|
+
* ```
|
|
74
|
+
*/
|
|
75
|
+
export async function concatenateAudio(segments, outputFormat = "mp3") {
|
|
76
|
+
// Validate input
|
|
77
|
+
if (segments.length === 0) {
|
|
78
|
+
throw new Error("No audio segments to concatenate");
|
|
79
|
+
}
|
|
80
|
+
// If only one segment, return it directly
|
|
81
|
+
if (segments.length === 1) {
|
|
82
|
+
return segments[0];
|
|
83
|
+
}
|
|
84
|
+
const workDir = await createTempDir();
|
|
85
|
+
const inputFiles = [];
|
|
86
|
+
const outputFile = join(workDir, `output.${outputFormat}`);
|
|
87
|
+
try {
|
|
88
|
+
// Write each segment to a temporary file
|
|
89
|
+
for (let i = 0; i < segments.length; i++) {
|
|
90
|
+
const inputFile = join(workDir, `segment-${i}.mp3`);
|
|
91
|
+
await writeFile(inputFile, segments[i]);
|
|
92
|
+
inputFiles.push(inputFile);
|
|
93
|
+
}
|
|
94
|
+
const ffmpegBin = await getFFmpegPath();
|
|
95
|
+
// Use ffmpeg to concatenate audio files
|
|
96
|
+
await new Promise((resolve, reject) => {
|
|
97
|
+
const command = ffmpeg();
|
|
98
|
+
command.setFfmpegPath(ffmpegBin);
|
|
99
|
+
// Add all input files
|
|
100
|
+
for (const file of inputFiles) {
|
|
101
|
+
command.input(file);
|
|
102
|
+
}
|
|
103
|
+
// Set up error and completion handlers
|
|
104
|
+
command
|
|
105
|
+
.on("error", (err) => {
|
|
106
|
+
reject(new Error(`FFmpeg error: ${err.message}`));
|
|
107
|
+
})
|
|
108
|
+
.on("end", () => {
|
|
109
|
+
resolve();
|
|
110
|
+
})
|
|
111
|
+
// Use mergeToFile for concatenating inputs
|
|
112
|
+
.mergeToFile(outputFile, workDir);
|
|
113
|
+
});
|
|
114
|
+
// Read the output file
|
|
115
|
+
return await readFile(outputFile);
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
// Clean up temporary files
|
|
119
|
+
await cleanupTempDir(workDir);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Get the duration of an audio file in seconds.
|
|
124
|
+
*
|
|
125
|
+
* @param audio - Audio data (MP3 format)
|
|
126
|
+
* @returns Duration in seconds
|
|
127
|
+
* @throws Error if ffprobe fails to read the audio
|
|
128
|
+
*/
|
|
129
|
+
export async function getAudioDuration(audio) {
|
|
130
|
+
const workDir = await createTempDir();
|
|
131
|
+
const inputFile = join(workDir, "input.mp3");
|
|
132
|
+
try {
|
|
133
|
+
await writeFile(inputFile, audio);
|
|
134
|
+
const ffmpegBin = await getFFmpegPath();
|
|
135
|
+
return await new Promise((resolve, reject) => {
|
|
136
|
+
ffmpeg(inputFile)
|
|
137
|
+
.setFfmpegPath(ffmpegBin)
|
|
138
|
+
.ffprobe((err, data) => {
|
|
139
|
+
if (err) {
|
|
140
|
+
reject(new Error(`FFprobe error: ${err.message}`));
|
|
141
|
+
}
|
|
142
|
+
else {
|
|
143
|
+
resolve(data.format?.duration || 0);
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
finally {
|
|
149
|
+
await cleanupTempDir(workDir);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get audio metadata including duration and format information.
|
|
154
|
+
*
|
|
155
|
+
* @param audio - Audio data (MP3 format)
|
|
156
|
+
* @returns Audio metadata object
|
|
157
|
+
*/
|
|
158
|
+
export async function getAudioMetadata(audio) {
|
|
159
|
+
const workDir = await createTempDir();
|
|
160
|
+
const inputFile = join(workDir, "input.mp3");
|
|
161
|
+
try {
|
|
162
|
+
await writeFile(inputFile, audio);
|
|
163
|
+
const ffmpegBin = await getFFmpegPath();
|
|
164
|
+
return await new Promise((resolve, reject) => {
|
|
165
|
+
ffmpeg(inputFile)
|
|
166
|
+
.setFfmpegPath(ffmpegBin)
|
|
167
|
+
.ffprobe((err, data) => {
|
|
168
|
+
if (err) {
|
|
169
|
+
reject(new Error(`FFprobe error: ${err.message}`));
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
resolve({
|
|
173
|
+
duration: data.format?.duration || 0,
|
|
174
|
+
format: data.format?.format_name || "unknown",
|
|
175
|
+
bitrate: data.format?.bit_rate
|
|
176
|
+
? parseInt(String(data.format.bit_rate), 10)
|
|
177
|
+
: 0,
|
|
178
|
+
sampleRate: data.streams?.[0]?.sample_rate || 0,
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
await cleanupTempDir(workDir);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=audio-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audio-processor.js","sourceRoot":"","sources":["../../../src/tools/lib/audio-processor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script generator module for podcast generation.
|
|
3
|
+
* Converts blog posts to podcast dialogue scripts using LLM.
|
|
4
|
+
*
|
|
5
|
+
* @module podcast/script-generator
|
|
6
|
+
*/
|
|
7
|
+
import type { PodcastScript, PodcastSpeaker, DialogueSegment } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* Options for script generation.
|
|
10
|
+
*/
|
|
11
|
+
export interface ScriptGeneratorOptions {
|
|
12
|
+
/** Maximum characters per dialogue segment (default: 200) */
|
|
13
|
+
maxSegmentLength?: number;
|
|
14
|
+
/** Custom speaker configuration */
|
|
15
|
+
speakers?: PodcastSpeaker[];
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Generate a podcast script from a blog article.
|
|
19
|
+
*
|
|
20
|
+
* @param article - Article data including id, title, body, etc.
|
|
21
|
+
* @param options - Generation options
|
|
22
|
+
* @returns Generated podcast script
|
|
23
|
+
* @throws Error if LLM generation or parsing fails
|
|
24
|
+
*
|
|
25
|
+
* @example
|
|
26
|
+
* ```typescript
|
|
27
|
+
* const script = await generateScript({
|
|
28
|
+
* id: "zh/getting-started",
|
|
29
|
+
* title: "快速开始",
|
|
30
|
+
* lang: "zh",
|
|
31
|
+
* body: "文章内容...",
|
|
32
|
+
* category: "教程",
|
|
33
|
+
* tags: ["astro", "blog"],
|
|
34
|
+
* });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function generateScript(article: {
|
|
38
|
+
id: string;
|
|
39
|
+
title: string;
|
|
40
|
+
lang: "zh" | "en";
|
|
41
|
+
body: string;
|
|
42
|
+
category: string;
|
|
43
|
+
tags: string[];
|
|
44
|
+
}, options?: ScriptGeneratorOptions): Promise<PodcastScript>;
|
|
45
|
+
/**
|
|
46
|
+
* Calculate the total character count of a script.
|
|
47
|
+
* @param segments - Dialogue segments
|
|
48
|
+
* @returns Total character count
|
|
49
|
+
*/
|
|
50
|
+
export declare function calculateScriptLength(segments: DialogueSegment[]): number;
|
|
51
|
+
/**
|
|
52
|
+
* Estimate the duration of a podcast script.
|
|
53
|
+
* Assumes average speaking rate of 3 characters per second for Chinese,
|
|
54
|
+
* 15 characters per second for English.
|
|
55
|
+
*
|
|
56
|
+
* @param segments - Dialogue segments
|
|
57
|
+
* @param lang - Language of the script
|
|
58
|
+
* @returns Estimated duration in seconds
|
|
59
|
+
*/
|
|
60
|
+
export declare function estimateDuration(segments: DialogueSegment[], lang: "zh" | "en"): number;
|
|
61
|
+
//# sourceMappingURL=script-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-generator.d.ts","sourceRoot":"","sources":["../../../src/tools/lib/script-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,eAAe,EAChB,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,6DAA6D;IAC7D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mCAAmC;IACnC,QAAQ,CAAC,EAAE,cAAc,EAAE,CAAC;CAC7B;AAmID;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE;IACP,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,EACD,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,aAAa,CAAC,CAoCxB;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,CAEzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,eAAe,EAAE,EAC3B,IAAI,EAAE,IAAI,GAAG,IAAI,GAChB,MAAM,CAIR"}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Script generator module for podcast generation.
|
|
3
|
+
* Converts blog posts to podcast dialogue scripts using LLM.
|
|
4
|
+
*
|
|
5
|
+
* @module podcast/script-generator
|
|
6
|
+
*/
|
|
7
|
+
import { chatCompletion } from "./ai-provider.js";
|
|
8
|
+
import { DEFAULT_SPEAKERS } from "./types.js";
|
|
9
|
+
/** Default maximum segment length for TTS optimization */
|
|
10
|
+
const DEFAULT_MAX_SEGMENT_LENGTH = 200;
|
|
11
|
+
/**
|
|
12
|
+
* Build the system prompt for the LLM.
|
|
13
|
+
* @param lang - Language of the content
|
|
14
|
+
* @param maxSegmentLength - Maximum characters per segment
|
|
15
|
+
* @returns System prompt string
|
|
16
|
+
*/
|
|
17
|
+
function buildSystemPrompt(lang, maxSegmentLength) {
|
|
18
|
+
if (lang === "en") {
|
|
19
|
+
return `You are a podcast scriptwriter. Convert the given blog post into a natural dialogue between a host and a guest expert.
|
|
20
|
+
|
|
21
|
+
Requirements:
|
|
22
|
+
1. Preserve ALL key technical information and concepts
|
|
23
|
+
2. Create natural conversation flow with transitions
|
|
24
|
+
3. Host asks clarifying questions; Guest provides detailed explanations
|
|
25
|
+
4. Each segment must be under ${maxSegmentLength} characters for TTS optimization
|
|
26
|
+
5. Split long explanations into multiple segments
|
|
27
|
+
6. Include a brief intro and outro
|
|
28
|
+
7. Output ONLY valid JSON, no markdown code blocks
|
|
29
|
+
|
|
30
|
+
Output format:
|
|
31
|
+
{"segments":[{"speaker":"host","text":"..."},{"speaker":"guest","text":"..."}]}
|
|
32
|
+
|
|
33
|
+
Respond in English.`;
|
|
34
|
+
}
|
|
35
|
+
return `你是一位播客脚本撰写专家。将给定的博客文章转换为主持人和嘉宾专家之间的自然对话。
|
|
36
|
+
|
|
37
|
+
要求:
|
|
38
|
+
1. 保留所有关键技术信息和概念
|
|
39
|
+
2. 创建自然的对话流程,包含过渡
|
|
40
|
+
3. 主持人提出澄清性问题,嘉宾提供详细解释
|
|
41
|
+
4. 每个对话片段必须控制在 ${maxSegmentLength} 字符以内(TTS 优化)
|
|
42
|
+
5. 将长解释拆分为多个片段
|
|
43
|
+
6. 包含简短的开场和结束语
|
|
44
|
+
7. 只输出有效的 JSON,不要 markdown 代码块
|
|
45
|
+
|
|
46
|
+
输出格式:
|
|
47
|
+
{"segments":[{"speaker":"host","text":"..."},{"speaker":"guest","text":"..."}]}
|
|
48
|
+
|
|
49
|
+
请使用中文回复。`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Build the user prompt with article content.
|
|
53
|
+
* @param title - Article title
|
|
54
|
+
* @param content - Article body content
|
|
55
|
+
* @param category - Article category
|
|
56
|
+
* @param tags - Article tags
|
|
57
|
+
* @returns User prompt string
|
|
58
|
+
*/
|
|
59
|
+
function buildUserPrompt(title, content, category, tags) {
|
|
60
|
+
const lang = title.match(/[\u4e00-\u9fa5]/) ? "zh" : "en";
|
|
61
|
+
if (lang === "en") {
|
|
62
|
+
return `Article Title: ${title}
|
|
63
|
+
Category: ${category || "None"}
|
|
64
|
+
Tags: ${tags.join(", ") || "None"}
|
|
65
|
+
|
|
66
|
+
Article Content:
|
|
67
|
+
${content.slice(0, 8000)}`;
|
|
68
|
+
}
|
|
69
|
+
return `文章标题:${title}
|
|
70
|
+
分类:${category || "无"}
|
|
71
|
+
标签:${tags.join("、") || "无"}
|
|
72
|
+
|
|
73
|
+
文章正文:
|
|
74
|
+
${content.slice(0, 8000)}`;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Parse the LLM response into dialogue segments.
|
|
78
|
+
* @param raw - Raw LLM response string
|
|
79
|
+
* @returns Array of dialogue segments
|
|
80
|
+
* @throws Error if parsing fails or segments array is missing
|
|
81
|
+
*/
|
|
82
|
+
function parseDialogueResponse(raw) {
|
|
83
|
+
// Try to extract JSON from markdown code blocks if present
|
|
84
|
+
const jsonMatch = raw.match(/```(?:json)?\s*([\s\S]*?)```/);
|
|
85
|
+
const jsonStr = (jsonMatch ? jsonMatch[1] : raw).trim();
|
|
86
|
+
let parsed;
|
|
87
|
+
try {
|
|
88
|
+
parsed = JSON.parse(jsonStr);
|
|
89
|
+
}
|
|
90
|
+
catch (e) {
|
|
91
|
+
throw new Error(`Failed to parse LLM response as JSON: ${e instanceof Error ? e.message : String(e)}`);
|
|
92
|
+
}
|
|
93
|
+
if (!parsed.segments || !Array.isArray(parsed.segments)) {
|
|
94
|
+
throw new Error("Invalid response: missing segments array");
|
|
95
|
+
}
|
|
96
|
+
// Validate and clean segments
|
|
97
|
+
const segments = [];
|
|
98
|
+
for (const seg of parsed.segments) {
|
|
99
|
+
const speaker = seg.speaker || "host";
|
|
100
|
+
const text = (seg.text || "").trim();
|
|
101
|
+
// Skip empty segments
|
|
102
|
+
if (text.length === 0)
|
|
103
|
+
continue;
|
|
104
|
+
// Validate speaker
|
|
105
|
+
if (speaker !== "host" && speaker !== "guest") {
|
|
106
|
+
segments.push({ speaker: "host", text });
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
segments.push({ speaker, text });
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
if (segments.length === 0) {
|
|
113
|
+
throw new Error("No valid dialogue segments generated");
|
|
114
|
+
}
|
|
115
|
+
return segments;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Generate a podcast script from a blog article.
|
|
119
|
+
*
|
|
120
|
+
* @param article - Article data including id, title, body, etc.
|
|
121
|
+
* @param options - Generation options
|
|
122
|
+
* @returns Generated podcast script
|
|
123
|
+
* @throws Error if LLM generation or parsing fails
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* const script = await generateScript({
|
|
128
|
+
* id: "zh/getting-started",
|
|
129
|
+
* title: "快速开始",
|
|
130
|
+
* lang: "zh",
|
|
131
|
+
* body: "文章内容...",
|
|
132
|
+
* category: "教程",
|
|
133
|
+
* tags: ["astro", "blog"],
|
|
134
|
+
* });
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export async function generateScript(article, options = {}) {
|
|
138
|
+
const maxSegmentLength = options.maxSegmentLength || DEFAULT_MAX_SEGMENT_LENGTH;
|
|
139
|
+
const speakers = options.speakers || DEFAULT_SPEAKERS[article.lang] || DEFAULT_SPEAKERS.zh;
|
|
140
|
+
// Build prompts
|
|
141
|
+
const systemPrompt = buildSystemPrompt(article.lang, maxSegmentLength);
|
|
142
|
+
const userPrompt = buildUserPrompt(article.title, article.body, article.category, article.tags);
|
|
143
|
+
// Call LLM
|
|
144
|
+
const raw = await chatCompletion([
|
|
145
|
+
{ role: "system", content: systemPrompt },
|
|
146
|
+
{ role: "user", content: userPrompt },
|
|
147
|
+
], { maxTokens: 4096 });
|
|
148
|
+
// Parse response
|
|
149
|
+
const segments = parseDialogueResponse(raw);
|
|
150
|
+
return {
|
|
151
|
+
slug: article.id,
|
|
152
|
+
title: article.title,
|
|
153
|
+
lang: article.lang,
|
|
154
|
+
speakers,
|
|
155
|
+
segments,
|
|
156
|
+
generatedAt: new Date().toISOString(),
|
|
157
|
+
contentHash: "", // Will be set by caller
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Calculate the total character count of a script.
|
|
162
|
+
* @param segments - Dialogue segments
|
|
163
|
+
* @returns Total character count
|
|
164
|
+
*/
|
|
165
|
+
export function calculateScriptLength(segments) {
|
|
166
|
+
return segments.reduce((sum, seg) => sum + seg.text.length, 0);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Estimate the duration of a podcast script.
|
|
170
|
+
* Assumes average speaking rate of 3 characters per second for Chinese,
|
|
171
|
+
* 15 characters per second for English.
|
|
172
|
+
*
|
|
173
|
+
* @param segments - Dialogue segments
|
|
174
|
+
* @param lang - Language of the script
|
|
175
|
+
* @returns Estimated duration in seconds
|
|
176
|
+
*/
|
|
177
|
+
export function estimateDuration(segments, lang) {
|
|
178
|
+
const totalChars = calculateScriptLength(segments);
|
|
179
|
+
const charsPerSecond = lang === "zh" ? 3 : 15;
|
|
180
|
+
return Math.ceil(totalChars / charsPerSecond);
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=script-generator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-generator.js","sourceRoot":"","sources":["../../../src/tools/lib/script-generator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAMlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAY9C,0DAA0D;AAC1D,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAEvC;;;;;GAKG;AACH,SAAS,iBAAiB,CACxB,IAAiB,EACjB,gBAAwB;IAExB,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO;;;;;;gCAMqB,gBAAgB;;;;;;;;oBAQ5B,CAAC;IACnB,CAAC;IAED,OAAO;;;;;;iBAMQ,gBAAgB;;;;;;;;SAQxB,CAAC;AACV,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,eAAe,CACtB,KAAa,EACb,OAAe,EACf,QAAgB,EAChB,IAAc;IAEd,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAE1D,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,kBAAkB,KAAK;YACtB,QAAQ,IAAI,MAAM;QACtB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM;;;EAG/B,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;IACzB,CAAC;IAED,OAAO,QAAQ,KAAK;KACjB,QAAQ,IAAI,GAAG;KACf,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG;;;EAGxB,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;AAC3B,CAAC;AAED;;;;;GAKG;AACH,SAAS,qBAAqB,CAAC,GAAW;IACxC,2DAA2D;IAC3D,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;IAExD,IAAI,MAAiE,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CACb,yCAAyC,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CACtF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IAC9D,CAAC;IAED,8BAA8B;IAC9B,MAAM,QAAQ,GAAsB,EAAE,CAAC;IACvC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,IAAI,MAAM,CAAC;QACtC,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAErC,sBAAsB;QACtB,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QAEhC,mBAAmB;QACnB,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;YAC9C,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,OAOC,EACD,UAAkC,EAAE;IAEpC,MAAM,gBAAgB,GACpB,OAAO,CAAC,gBAAgB,IAAI,0BAA0B,CAAC;IACzD,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,IAAI,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,EAAE,CAAC;IAE5E,gBAAgB;IAChB,MAAM,YAAY,GAAG,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IACvE,MAAM,UAAU,GAAG,eAAe,CAChC,OAAO,CAAC,KAAK,EACb,OAAO,CAAC,IAAI,EACZ,OAAO,CAAC,QAAQ,EAChB,OAAO,CAAC,IAAI,CACb,CAAC;IAEF,WAAW;IACX,MAAM,GAAG,GAAG,MAAM,cAAc,CAC9B;QACE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE;QACzC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE;KACtC,EACD,EAAE,SAAS,EAAE,IAAI,EAAE,CACpB,CAAC;IAEF,iBAAiB;IACjB,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAE5C,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,EAAE;QAChB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,QAAQ;QACR,QAAQ;QACR,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACrC,WAAW,EAAE,EAAE,EAAE,wBAAwB;KAC1C,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAA2B;IAC/D,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AACjE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAA2B,EAC3B,IAAiB;IAEjB,MAAM,UAAU,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;IACnD,MAAM,cAAc,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,cAAc,CAAC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TTS (Text-to-Speech) provider module for podcast generation.
|
|
3
|
+
* Supports OpenAI TTS API with proxy configuration.
|
|
4
|
+
*
|
|
5
|
+
* @module podcast/tts-provider
|
|
6
|
+
*/
|
|
7
|
+
import type { OpenAIVoice } from "./types.js";
|
|
8
|
+
/**
|
|
9
|
+
* TTS configuration resolved from environment variables.
|
|
10
|
+
*/
|
|
11
|
+
export interface TTSConfig {
|
|
12
|
+
/** Provider type (currently only "openai") */
|
|
13
|
+
provider: "openai";
|
|
14
|
+
/** API key for authentication */
|
|
15
|
+
apiKey: string;
|
|
16
|
+
/** Base URL for the API */
|
|
17
|
+
baseUrl: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Options for TTS generation.
|
|
21
|
+
*/
|
|
22
|
+
export interface TTSOptions {
|
|
23
|
+
/** Voice to use for synthesis */
|
|
24
|
+
voice: OpenAIVoice;
|
|
25
|
+
/** Model: "tts-1" (faster) or "tts-1-hd" (higher quality) */
|
|
26
|
+
model?: "tts-1" | "tts-1-hd";
|
|
27
|
+
/** Speech speed: 0.25 to 4.0, default 1.0 */
|
|
28
|
+
speed?: number;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Resolve TTS configuration from environment variables.
|
|
32
|
+
* Reads from AI_API_KEY, OPENAI_API_KEY, and AI_BASE_URL.
|
|
33
|
+
* @returns TTS configuration object
|
|
34
|
+
*/
|
|
35
|
+
export declare function resolveTTSConfig(): TTSConfig;
|
|
36
|
+
/**
|
|
37
|
+
* Check if TTS API key is configured.
|
|
38
|
+
* @returns True if API key is available
|
|
39
|
+
*/
|
|
40
|
+
export declare function hasTTSApiKey(): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Convert text to speech using OpenAI TTS API.
|
|
43
|
+
*
|
|
44
|
+
* @param text - Text to convert to speech (must not be empty)
|
|
45
|
+
* @param options - TTS options including voice, model, and speed
|
|
46
|
+
* @returns Audio data as Uint8Array (MP3 format)
|
|
47
|
+
* @throws Error if text is empty, API key is missing, or API request fails
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* const audio = await textToSpeech("你好,世界", { voice: "alloy" });
|
|
52
|
+
* // audio is a Uint8Array containing MP3 data
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function textToSpeech(text: string, options: TTSOptions): Promise<Uint8Array>;
|
|
56
|
+
/**
|
|
57
|
+
* Estimate the cost of TTS generation.
|
|
58
|
+
* OpenAI pricing: $15 per 1M characters for tts-1, $30 per 1M for tts-1-hd
|
|
59
|
+
*
|
|
60
|
+
* @param text - Text to estimate cost for
|
|
61
|
+
* @param model - TTS model to use
|
|
62
|
+
* @returns Estimated cost in USD
|
|
63
|
+
*/
|
|
64
|
+
export declare function estimateTTSCost(text: string, model?: "tts-1" | "tts-1-hd"): number;
|
|
65
|
+
//# sourceMappingURL=tts-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tts-provider.d.ts","sourceRoot":"","sources":["../../../src/tools/lib/tts-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,8CAA8C;IAC9C,QAAQ,EAAE,QAAQ,CAAC;IACnB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iCAAiC;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,6DAA6D;IAC7D,KAAK,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;IAC7B,6CAA6C;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,IAAI,SAAS,CAK5C;AAED;;;GAGG;AACH,wBAAgB,YAAY,IAAI,OAAO,CAEtC;AAoBD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,UAAU,CAAC,CAwDrB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,OAAO,GAAG,UAAoB,GACpC,MAAM,CAIR"}
|