A security/robustness pass. (The planned Bun migration moved to v2.5.0.)
Security & correctness
switch_modelpath-containment fix — normalizedrelative()-based containment closes a sibling-prefix escape (e.g.…\models-evil).- Privacy/consent gate keyed per operation (tool + arguments).
download_modelrejects truncated downloads (Content-Length check) before promoting a.partfile.- Numeric tool params that aren't real numbers are dropped instead of handed to whisper-cli as
NaN.
Robustness
- Foreground timeout guard — long files are routed to background instead of silently hitting Claude Desktop's ~4-minute tool timeout. Configurable via
WHISPER_FOREGROUND_MAX_SEC. Time estimates corrected (the dominant model-reload cost is now modeled). - Atomic job/batch state writes; collision-proof UUID-suffixed IDs; graceful SIGINT/SIGTERM cleanup.
GPU device selection
WHISPER_GPU_DEVICEenv var +gpu_devicenow plumbed throughgenerate_subtitlesand language detection.check_configreports the active device.check_systemno longer misreports a driver issue whenwmicreturns nothing.
Quality
- A
node:testunit suite over the pure logic (zero new dependencies) plus a GitHub Actions CI workflow on every push/PR.
Docs
- All 9 translated doc sets (es, id, ja, ko, pl, pt-BR, ro, uk, vi) brought to v2.4.0 parity.