Skip to content

Releases: ethannortharc/fonos

Fonos v0.8.6

Choose a tag to compare

@github-actions github-actions released this 25 Jul 20:06

What's Changed

  • chore(legal): single-line copyright across every platform's About by @ethannortharc in #74

Full Changelog: v0.8.5...v0.8.6

Fonos v0.8.5

Choose a tag to compare

@github-actions github-actions released this 18 Jul 06:44

What's Changed

  • v0.8.5: workflow-path dictation stats, pill shadow artifact, emoji-free icons by @ethannortharc in #73

Full Changelog: v0.8.4...v0.8.5

Fonos v0.8.4

Choose a tag to compare

@github-actions github-actions released this 17 Jul 07:57

What's Changed

  • fix: v0.8.3 external-review findings — meeting STT silent failure, updater staple, sentinel gate, release race by @ethannortharc in #72

Full Changelog: v0.8.3...v0.8.4

Fonos v0.8.3

Choose a tag to compare

@github-actions github-actions released this 16 Jul 08:19

Second review-round hardening: complete Apple STT platform gating, a unified agent request path, honest empty-input feedback (#67), an Anthropic capability notice (#69), and a release pipeline that verifies itself before going public.

Fixes

  • Apple STT can no longer masquerade as configured off-macOS: both the apple-speech sentinel and real provider: "apple" profiles (the shape first-run actually seeds) are platform-gated in every resolution arm; meetings reject Apple-provider profiles on all platforms (they transcribe over HTTP) with a clear error instead of raw failures.
  • Agent requests match the plain LLM path byte-for-byte: one shared request-body builder owns URL, token-param, and temperature rules; Google routes through its /v1beta/openai/ compat endpoint and never gets OpenAI-only parameters. Fixes Google agents failing outright and o-series/nano OpenAI models rejecting agent calls.
  • Empty selection no longer flashes "no speech" (#67): a dedicated pill state says "No text selected" / 「未选中文本」, with a debounced OS notification carrying the fuller hint; the Test Run bench shows a distinct status.
  • Agent panel discloses the Anthropic limitation (#69 mitigation): a dismissible bilingual notice appears when any resolution path an exchange might take lands on Anthropic (tools are currently dropped there — chat-only), live-refreshing on config changes.
  • Setup Doctor hotkey conflicts: key aliases the parser treats as one physical key (return/enter, esc/escape, delete/backspace, arrows, punctuation) now canonicalize together.
  • Clipboard restore falls back down the flavor ladder if the richest write fails, instead of leaving the clipboard clobbered.

Release engineering

  • Releases are created as drafts by a single prepare-release job (no more matrix race) and published only after an asset-completeness gate proves the DMG, updater tarball, both arches' deb/rpm/AppImage, and a 3-platform latest.json are all present — release-macos.sh now owns the entire notarize → verify → publish path. (That gate correctly blocked this very release twice while an arm64 runner infra failure was retried.)

Full Changelog: v0.8.2...v0.8.3

Fonos v0.8.2

Choose a tag to compare

@github-actions github-actions released this 16 Jul 04:56

Linux hotkey-integration fixes from real-machine testing, an in-app-update relaunch fix, and refreshed cloud model defaults.

Linux fixes (live-verified on X11)

  • Selection recipes no longer flash a bogus "no speech": hotkey dispatch for non-mic (selection-sourced) flows moved to key-up on Linux. The X11 hotkey grab (XGrabKey) routes every keyboard event — including the synthetic Ctrl+C the selection grab sends — back to fonos while the combo is held, so a key-down dispatch always read an empty clipboard. macOS keeps key-down (CGEventTap intercepts without grabbing). The clipboard read also polls up to ~600 ms instead of one fixed 100 ms sleep, so slow clipboard owners (busy browser tabs) still land.
  • Fresh installs no longer grab eight global hotkeys you never chose: legacy default combos (cmd+shift+a/g/t, option+n/m/l/s) are no longer seeded as trigger chips on machines without an existing config — under X11's cmd→Ctrl collapse they stole Ctrl+Shift+A (Chrome's tab search), Ctrl+Shift+T (reopen closed tab) and Alt+N/M/L/S system-wide, and a hold on Ctrl+Shift+A launched the voice agent out of nowhere. Upgrades and customized keys are untouched.

Updater

  • In-app updates now relaunch properly: the hard process-exit fallback (needed to outlive detached teardown threads) stands down when tauri signals a restart, so "Install & Relaunch" actually reopens the new version.

Cloud presets

Default LLMs refreshed to current-generation models (verified against live catalogs 2026-07-16; every row remains an editable prefill):

  • Cerebras → gemma-4-31b · OpenRouter free → google/gemma-4-31b-it:free · OpenRouter (keyed) → google/gemini-3.5-flash · OpenAI → gpt-5.6-luna · Google → gemini-3.5-flash · Anthropic → claude-sonnet-5 · Fireworks → kimi-k2p6

What's Changed

  • fix(linux): selection flows dispatch on key-up; fresh installs stop seeding default hotkey chips by @ethannortharc in #66
  • chore(scenarios): refresh cloud preset default LLMs to current-generation models by @ethannortharc in #68

Full Changelog: v0.8.1...v0.8.2

Fonos v0.8.1

Choose a tag to compare

@ethannortharc ethannortharc released this 15 Jul 16:10

Fixes from two post-0.8.0 review rounds, plus PR-level CI and community health files. (#65)

Onboarding fixes

  • "Not now" on the Accessibility step now finishes the wizard instead of dead-ending in the guided task, which can never complete without Accessibility.
  • One runtime-backed STT gate: the first-run gate, Apple-STT seeding, playground, and tray now all read the same fonos-core resolver that mirrors the dictation pipeline exactly — the stt.default widget's profile wins over the global default, and dangling profile references are detected instead of silently breaking dictation.
  • Playground got loading/ready/error states: hold-to-talk arms only after the seeded config is actually persisted, and microphone/engine failures show a visible error instead of vanishing.
  • Linux honesty: hold-to-talk is disabled while no dictation engine is configured, and the playground no longer claims "processed on this Mac" on Linux.
  • Honest privacy copy: the playground discloses Apple's server-side fallback when on-device recognition is unavailable; the seeded engine is renamed "Apple Speech (on-device first)".

Engineering

  • PR-level CI is live: frontend tests + strict build (Ubuntu), clippy + tests + smoke build (macOS), and a Linux compile gate (cargo check against the webkit/gtk stack) — Linux regressions no longer wait for release day.
  • cargo test --workspace is green with no feature flags: stale panic! placeholder tests are gone, and the hotkey tests now exercise the real parser.

Docs & community

  • README: top download call-to-action and a "First dictation in 60 seconds" quickstart.
  • New CONTRIBUTING.md, SECURITY.md, issue forms, and a PR template.

v0.8.0

Choose a tag to compare

@ethannortharc ethannortharc released this 14 Jul 16:56

Highlights

🧭 Onboarding, redesigned (#64)

  • Magic-first first-run (≤2 min): mic + in-app playground with built-in on-device speech (zero download), accessibility step that shows the payoff before asking — and keeps working if you decline (popup fallback), then a guided real-world dictation task. Skippable at every screen; skipping jumps straight to engine setup.
  • Guided engine setup: two-layer detection (reuses running/installed engines, never re-installs), platform-optimal defaults (Apple Silicon → oMLX, Linux → Ollama), hardware-aware model recommendations, and a pre-execution review card — every default editable (models, base URL, key), disk-checked, with automatic downgrade suggestions and one progress bar from install to ready.
  • 7 cloud presets: OpenAI, OpenRouter, Anthropic, Google, Fireworks, Cerebras, and Custom (LAN/self-hosted OpenAI-compatible endpoints, key optional). Partial applies no longer touch roles you didn't configure — local dictation + cloud commands mix freely.
  • Menu bar as the long-term carrier: live health panel (mic / dictation / AI / speech rows, click-through to fix), once-ever unlock notifications ("capability + a sentence you can say"), download progress in the tray.
  • First-run timeline in Stats over a local-only funnel (data never leaves the device).

📓 Notebook unification (#63)

  • The workflow Notebook widget and notebooks are now one thing: pick an existing notebook to co-write or type a new name — it's created on save.
  • Notes is a document-flow reading view: borderless paragraphs, oldest-first, hover/keyboard-revealed actions, day headers.
  • Notebooks can be deleted (entries return to History); deleting a meeting now cleans up its transcript segments.

🔧 Under the hood

  • Fixed a tray-refresh deadlock, an event-tap that stayed dead after granting Accessibility, and detection false positives on shared ports.
  • Real TypeScript gate for the frontend (the previous check ran on zero files) + latent test fixes.

Auto-update: users on ≥0.6.0 get this in-app (macOS + Linux AppImage).

Fonos v0.7.2

Choose a tag to compare

@github-actions github-actions released this 14 Jul 05:49

This release is all about Linux.

  • Quitting actually quits — tray "Quit Fonos" used to leave the process alive with a frozen pill stuck on screen; windows now vanish immediately and the process is guaranteed to exit.
  • No more overlapping pills — on X11 the pill's old frame could stay composited under the new one on every state change; Linux now forces the same redraw pass macOS always had.
  • Every recipe hotkey now works on Linux — not just the two dictation keys: the pill key, dictation hold/toggle, and any hotkey you bind in Workbench (translate selection, explain selection, …) all run through the same workflow engine as macOS. Rebinds apply without a restart, and kill -USR2 now genuinely toggles dictation (the documented Wayland fallback was previously a no-op).
  • Hotkey dictation no longer runs legacy code — it used to drive a pre-engine pipeline that could wedge the pill at "Processing"; that path is retired entirely.
  • Apple Speech stops pretending on Linux — picking it produced silent empty transcriptions; it now shows a clear error and is no longer offered where it can't work.
  • Auto-update comes to Linux — the new AppImage updates in place from Settings → General, exactly like macOS. deb/rpm installs get a "download from GitHub" pointer instead. AppImage is now the recommended Linux install.

macOS (Apple Silicon) updates in-app; Linux: AppImage above (auto-updating), deb/rpm below.

Fonos v0.7.1

Choose a tag to compare

@ethannortharc ethannortharc released this 13 Jul 05:27

Fixes from the first days in the wild.

  • Apple Speech works in installed apps — the built-in macOS speech recognizer could never locate its helper in a packaged build (dev runs masked it). If you picked Apple Speech and got nothing, this was why.
  • The floating pill follows your displays — disconnect an external monitor (or change resolution) and the pill now re-anchors bottom-center on the surviving screen instead of stranding itself at coordinates for a display that no longer exists.
  • "Open Safari." opens Safari — spoken app names keep their sentence punctuation out of the app lookup.
  • "Open Google in Safari." routes properly — the agent is now guided (and corrected when it slips) to split the browser into app and the site into url, across any LLM profile.
  • A broken STT server tells you it's broken — Setup Doctor distinguishes "process running but port not listening" (the stale-launcher trap), dictation gives up on unreachable endpoints in 5 seconds with a clear pill error instead of spinning, and long transcriptions are no longer cut off by the old 15s ceiling.

Delivered via in-app update on macOS (Apple Silicon); deb/rpm below for Linux.

Fonos v0.7.0

Choose a tag to compare

@ethannortharc ethannortharc released this 12 Jul 07:00

The Workbench release

The app is reorganized around one mental model: tune widgets → assemble recipes → pull triggers.

  • Home — the new landing page. Every recipe and every key that fires it, in one editable table, plus the floating pill's slot roller.
  • Workbench — three tabs: Recipes | Widgets | Test Run. Widgets are shared, named instances ("used by N recipes"); recipes are the only assembly; triggers are chips on the recipe (hotkeys and pill slots).
  • Test Run — a real bench: watch a recipe light up step by step with per-step input/output/timing, outputs intercepted by default with a "deliver for real" switch.
  • Session recipes — call, agent and meeting are now composite widgets assembled by reference (pick your tuned STT/LLM by name, a voice profile for TTS). A new instant source means press-to-connect: the call is live before you speak.
  • The legacy Dictation/Talk pages and the old modes system are gone; your existing hotkeys migrate to trigger chips automatically.

Meeting: who's speaking (first cut)

Meetings can now label remote speakers — 说话人 1/2/… (Speaker N) — live while the meeting runs, fully on-device (CoreML on the Neural Engine). Enable it on the meeting widget; download the model once from Models → Local models (HuggingFace mirror endpoint supported). Your mic stays "Me"; if anything about separation fails, the meeting simply continues with plain "Audio" labels. Requires macOS 14+. Accuracy is a first cut — tuning to follow.

Also fixed on the meeting front: system-audio capture actually works in packaged builds now (the dual-channel helper was never found at runtime; meetings silently heard only the microphone).

Call panel, finished

A compact satellite panel at the top-right, draggable, with a proper hang-up button — solid red circle, receiver-down handset — that ends the call and closes everything in one click. Barge-in interrupts the answer mid-speech.

Fixes

  • Dock click / tray / pill now raise the main window on the Space you're on (macOS 14+ cooperative activation).
  • Packaged apps now bundle the call echo-cancellation helper (installs on other machines silently lost AEC).
  • Test Run: step highlight no longer clipped on top; live glow no longer bleeds through the graph.
  • Agent panel: preset prompt chips respond again; replies render Markdown.

Delivered via in-app update on macOS (Apple Silicon); deb/rpm below for Linux.