Tags: mtib/al
Tags
feat: add Parakeet 0.6B back as opt-in, sort picker by strength Re-add Parakeet TDT 0.6B v3 (transducer, ~465 MB, not realtime on M1 Air) to the model picker for users with headroom. Picker now lists models strongest → weakest: 0.6B, 110M, FastConformer multilingual, Moonshine Tiny. The default for new installs stays parakeet110m — the strongest model that's still realtime on Air.
feat: lighter ASR lineup, multilingual support, polished quit Replace Parakeet TDT 0.6B v3 (3 GB peak, not realtime on M1 Air) with three CTC-headed offline models behind the existing picker: - Parakeet TDT-CTC 110M (EN, ~99 MB) — default, best English quality - FastConformer CTC multilingual (EN/DE/ES/FR, ~98 MB) — adds German - Moonshine Tiny (EN, ~45 MB) — kept as lightest fallback Both new models settle at ~630 MB RSS with mic + system active; ~4 s load time under CoreML. Settings migrates the stored "parakeet" value. Pipeline: when system audio is voiced, the mic stream is now fully gated — no resample, no VAD, no decode. Mic VAD is flushed on gate entry so any open segment closes cleanly. The single shared recognizer (NSLock) is unchanged. Also tightened VAD buffer compaction (after every drain). Quit UX: applicationShouldTerminate now returns .terminateLater and drains on a detached task, replying once flush completes. MenuBarController gets beginQuitTransition() to dim the status item and freeze the label. Measured quit on a running pipeline: 0.74 s (was up to 5 s of frozen UI). Cleanup: delete the orphaned RNNoise wrapper, DenoisingAudioSource, and vendored CRNNoise target — Pipeline never wired them in. CLAUDE.md: refreshed architecture diagram and model table, documented NSString lifetime across C calls (bite #3) and why the 0.6B was dropped (bite #2).
feat(browser): refresh active document on re-click + 5s ticker - Re-clicking the already-selected row in the document list now refreshes it in place without flashing the empty pane (skip the loadingDetail reset path when ids match). - Add a `.task` ticker that calls `refreshSelectedDocument` every 5 s while the Browse window is visible. The task auto-cancels when the window closes/hides, so we don't poll in the background. - Silent failures on the periodic path so a transient outage doesn't swap the pane for an error banner. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
fix(shipper): always compact outbox when an ack advances Previously `compactOutbox` bailed early unless the file was already ≥64 KB, so a steady stream of small utterances looked like the outbox never cleared. Compact unconditionally after every successful ack; short-circuit cheaply when nothing was dropped. Remove the file entirely if all entries are acked so it doesn't linger as a 0-byte placeholder. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
feat(browser): refetch on every window open `.onAppear` only fires once per window lifetime, so closing and re-opening Browse from the menu bar left it showing stale results. Post an `.browserShouldRefresh` notification from `BrowserWindowController.show()` and have the view reload on every receipt — selection in the detail pane is preserved because `reload()` doesn't touch `selectedDocument`. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
ci: run app-release on macos-15 for Swift 6 toolchain macos-14 defaults to Xcode 15 / Swift 5.10 and rejects the package's swift-tools-version 6.0. macos-15 ships Xcode 16 (Swift 6) by default; also pick the newest installed Xcode explicitly as defence against future image regressions. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>