feat: add headless file transcription CLI - #200
Conversation
jatinkrmalik
left a comment
There was a problem hiding this comment.
@Mr-Sunglasses There are a few comments by the bot, can you address them?
…l fallback - Restrict CLI dispatch to recognized flags so GUI-only launch args like --restarted (Settings -> Debug -> Restart) route to the GUI instead of being rejected by the CLI parser - Narrow ensureSingleInstance()'s pgrep fallback to skip processes running a headless CLI job, so opening/relaunching the GUI no longer kills an in-flight --transcribe-file request - Fall back to the Tiny model when no selection is persisted, matching AppState's @AppStorage default, instead of failing on fresh installs - Document that translate and custom vocabulary are always off headlessly - Add tests for the --restarted dispatch case and the missing-preference fallback
|
Addressed all review comments from cursor[bot] in 4319eaf:
Validation: |
|
@Mr-Sunglasses I went through 4319eaf against the bot threads.
One leftover for a follow-up, since this already merged: single-instance is only half-fixed. Related: Finder / Spotlight / Mind opening a follow-up for that? Match argv tokens, and only |
Summary
VocaMacApp, so CLI invocations never createAppState, run single-instance termination, or initialize GUI/microphone/hotkey servicesModelManager, enforce supported/downloaded checks, and transcribe every engine throughTranscriptionRouterValidation
swift buildswift test— 293 passed, 1 existing hardware-dependent skipmake build— passed with ad-hoc signing; existing ONNX framework-symlink warning remainsgit diff --checkengine: parakeet, GUI PID unchangedengine: whisperkit, saved Parakeet selection unchanged--list-models --json: one valid JSON line, selected model correct, zero stderr bytesNotes
One-shot CLI mode intentionally loads the selected model in a separate process for each request. Persistent serving, daemon, HTTP, and IPC modes remain out of scope for this PR.