Skip to content

feat(#646): add --speed to podcast and TTS commands - #26

Merged
0xFANGO merged 2 commits into
mainfrom
ralph/listenhub-cli--646
Aug 4, 2026
Merged

0xFANGO merged 2 commits into
mainfrom
ralph/listenhub-cli--646

Conversation

@0xFANGO

@0xFANGO 0xFANGO commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Closes part of marswaveai/listenhub-ralph#646

做了什么

播客与 TTS 的创建命令(站内和 OpenAPI 两套)都加了 --speed <multiplier>:生成语速倍率 0.5–2.0,最多两位小数,不传等价于 1.0×。

面 命令
站内 podcast create、tts create
OpenAPI openapi podcast create、openapi podcast generate-audio、openapi flow-speech create、openapi flow-speech tts、openapi tts、openapi audio-speech、openapi speech

新增 source/_shared/speed.ts 作为 commander 的 option parser:越界、超两位小数、非数字都抛 InvalidArgumentError,不静默修正成用户没请求过的语速。中英文 README 各加了一条 1.25× 的示例。

验证证据

CLI 依赖已发布的 @marswave/listenhub-sdk@^0.0.20,其类型里还没有 speed,所以直接跑 pnpm check 会报 9 个 TS2353: 'speed' does not exist in type ...。为了拿到真实证据,临时用 pnpm.overrides 把 SDK 指向本地构建(link:/workspace/listenhub-sdk,即配套 SDK PR 的产物)跑完全套,验证后已把 package.json 与 pnpm-lock.yaml 还原到 tracked 状态,本 PR 不含任何 link 改动。

# 指向本地 SDK 构建时
$ pnpm check
pass: All 81 files are correctly formatted (1186ms, 4 threads)
pass: Found no warnings, lint errors, or type errors in 71 files (657ms, 4 threads)

$ pnpm test
Test Files  10 passed (10)
Tests       89 passed (89)

$ pnpm build
ℹ dist/cli.mjs  177.94 kB │ gzip: 34.42 kB
✔ Build complete in 44ms

新增 tests/speed.test.ts(5 个用例):快捷值与边界原样通过、非快捷值 0.85 / 1.35 通过、越界不 clamp 而是报错、超两位小数不四舍五入而是报错、非数字报错。

--help 实测:

$ node dist/cli.mjs podcast create --help
  --speed <multiplier>  Generation speed multiplier 0.5-2 (max two decimals, default 1)
(tts create / openapi tts / openapi flow-speech tts / openapi podcast generate-audio 同样可见)

参数校验实测:

--speed 1.35 -> 通过(后续因未配置 API Key 而退出,属预期)
--speed 0.5  -> 通过
--speed 2    -> 通过
--speed 0.49 -> error: option '--speed <multiplier>' argument '0.49' is invalid. --speed must be between 0.5 and 2
--speed 2.01 -> error: option '--speed <multiplier>' argument '2.01' is invalid. --speed must be between 0.5 and 2
--speed 1.234 -> error: option '--speed <multiplier>' argument '1.234' is invalid. --speed accepts at most two decimals
--speed fast -> error: option '--speed <multiplier>' argument 'fast' is invalid. --speed must be a number

阻塞项

本 PR 的 CI 会因为类型错误报红,直到配套的 SDK PR 合并并发版、CLI 的依赖版本随之抬起来。 这是 SDK → CLI 的固有先后顺序,不是本 PR 的缺陷;上面的证据是在本地 SDK 构建下取的。合并顺序:SDK PR → 发版 → 抬 CLI 的 @marswave/listenhub-sdk 版本 → 合并本 PR。

实现期假设

  1. --speed 不设默认值:commander 不给默认,未传时 options.speed === undefined,请求体里就没有 speed 键,行为与改动前完全一致。
  2. 精度检查用 Math.round(speed * 100) !== speed * 100:与 api-server 的 Joi.precision(2) 同口径。
  3. Number('') 是 0,会被误判成范围错误,所以 parser 先把空白输入当作非数字处理,错误信息才准确。
  4. openapi podcast generate-audio 只在传了 --speed 时才带 body(否则维持原来的空 body 调用)。

风险判定

快车道(0 个独立 reviewer):route-gates.py 参考信号 risk=normal、reasons=[]、nonDowngradable=false,与人工判断一致。改动是纯增量 flag,不传就走原路径。


Generated by Claude Code

@0xFANGO
0xFANGO merged commit 382fc31 into main Aug 4, 2026
1 check passed
@0xFANGO
0xFANGO deleted the ralph/listenhub-cli--646 branch August 22, 2026 11:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant