Skip to content

PrimeDictate 6.1.0: one app for dictation and transcription - #12

Merged
CakeRepository merged 22 commits into
mainfrom
claude/prime-dictate-transcription-access-d2f2bc
Oct 1, 2026
Merged

CakeRepository merged 22 commits into
mainfrom
claude/prime-dictate-transcription-access-d2f2bc

Conversation

@CakeRepository

Copy link
Copy Markdown
Member

One app for 6.1.0: the installers now ship src/PrimeDictate.Desktop as PrimeDictate.exe (dictation, tray, overlay, and the transcription/meeting workspace in one process). The root WPF app stays in the repo and builds but is no longer packaged.

What changed

  • Packaging: Desktop app renamed to PrimeDictate.exe; publish and WiX switched to it (same UpgradeCode, so 6.1.0 upgrades 6.0.0 in place). Only the target runtime's Whisper.net natives are shipped; QNN natives on win-arm64 only; payload checks in Build-Installers.ps1; a test step in the release job.
  • One app: tray front door (Start dictation, Record meeting, Open PrimeDictate, history, stats, activity, Settings, Check for updates, Exit), dictation status in the main window header, one Settings window.
  • WPF parity (no feature loss): Whisper.net (CUDA/Vulkan/OpenVINO NPU) shared by dictation and the workspace, Qualcomm QNN/AI Hub NPU models, custom model path, focused-control insertion and direct injection into the original target, Mouse Sonar, exclusive mic, voice shell commands (dictation only), Ollama UI, settings validation, 3-step first run, replacements grid, overlay controls (copy, pin, settings, minimize, resize, timer, ripple), tray click and error states, launch-at-login scopes and CLI switches, updater (auto/manual, opt-out), history filters and details, activity log, wake-word model choice, dark theme.
  • Settings import: reads the 6.0.0 settings.json, history.json and stats.json read-only; tolerant of unknown enum values.

Deliberate differences from 6.0.0

  • The overlay hides while idle by default (owner's request); a setting restores the always-visible compact mic.
  • New voice shell commands start off; imported ones keep their state.
  • No transcript text in any log or the activity view.
  • Notices replace tray balloons (Avalonia has none).

Testing

  • dotnet test tests/PrimeDictate.Core.Tests: 605 passed. Desktop and the WPF app build with 0 warnings.
  • Owner installed the x64 MSI on Windows 11 and used dictation; Whisper.net large-v3-turbo ran on CUDA.
  • Not run on hardware: the Qualcomm and Intel NPU paths (no NPU here). Transcription and meetings are marked as a preview in the release notes.
  • Known, also in 6.0.0: the keystroke typing path can garble shifted punctuation while another app hooks the keyboard.

🤖 Generated with Claude Code

CakeRepository and others added 22 commits September 30, 2026 15:14
…ption)

Port the WPF runner: the command comes only from settings, is matched only in the
final transcript of a dictation, and Stop/Continue decide whether the rest is typed.
Imported WPF commands keep their Enabled state; tests use a fake runner.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds the Whisper.net packages, a ggml catalog/locator/downloader in Platforms/Speech sharing the WPF install folder, a ref-counted shared model cache, WhisperNetProvider, compute-device handling (WPF TranscriptionComputeInterface plus a new Auto/CPU/GPU setting), settings migration for TranscriptionBackend=WhisperNet, workspace picker default, tests and the status doc.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tray gets Record meeting (shared path with the Record button), Open PrimeDictate and
Settings; the window header shows dictation state, model and hotkey with history,
stats and settings buttons; transcription options move into TranscriptionPreferences
and a Transcription and meetings section in Settings; transcription model defaults to
the dictation model.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- Desktop assembly is now PrimeDictate; publish, WiX payload checks and ARP text follow it; WPF app stays buildable but is not packaged.
- Launch at login is one mechanism: the MSI Startup shortcut runs --background and the Settings checkbox switches it per user (StartupApproved), falling back to a Run value only when the shortcut is absent. 6.0.0 per-user entries are migrated; --from-login is accepted as --background.
- Port the GitHub updater (asset names and SHA-256 rules unchanged) with a tray "Check for updates..." item that installs only after asking and leaves through App.ExitAsync.
- Version 6.1.0, release notes, docs, tests for updater rules and launch-at-login decisions.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tion into the original target, Mouse Sonar pulse

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…no recognized text)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e notes

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tention, update setting, launch scope, history filters, wake models, stats baseline, theme

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ollama block (with the remote-endpoint guard), custom model path and
repo-local/app-folder model discovery, Settings validation shown inline and
blocking Save, startup normalisation of shortcuts and phrases, WPF
FirstRunCompleted honoured on import, the three-step first-run wizard with
"Finish setup later?", a Replacements grid, Cancel and History in Settings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…-when-idle overlay by default

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… to dark

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Qualcomm AI Hub Whisper Small and Moonshine on the QNN NPU (ARM64), as providers behind
ITranscriptionProvider, gated to a native Windows ARM64 process that has the QNN natives.
Same ids, folders, URLs and file rules as the WPF catalogs so installs are shared.

- Platforms/Speech/Qualcomm: runtime support, AI Hub catalog and installer, Whisper and Moonshine
  v1/v2 transcribers, providers with one shared loaded model, the --qnn-* validation commands.
- MachineSupport and HardwareNormalization: WPF PlatformSupport and
  NormalizeSettingsForCurrentMachine; Qualcomm, GPU and NPU options only where usable.
- Whisper.net NPU: explicit NPU device, Auto resolves to GPU, NPU or CPU like WPF, OpenVINO runs
  on the NPU only, and the OpenVINO bundle download for large-v3.
- Packaging: the app project copies the QNN natives over sherpa-onnx's onnxruntime.dll on
  win-arm64 (WPF's arrangement); the publish script fails if they are missing or on x64.
- Restores the QNN wording of the x64 installer launch message.

Capability probing never loads whisper.dll: loading and freeing two whisper.cpp builds in one
process aborts it (ggml assert).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Remove the QNN line from the 6.1.0 "Not in 6.1.0 yet" notes and describe what carries over,
update the stage 7 status and parity plan, README, AGENTS.md and installer README, and add
qualcomm-npu.md (gating, the one-onnxruntime-per-process arrangement, and why capability
probing must never load whisper.dll).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Keeps both sides: activity log, text delivery, overlay/tray/history/settings and first-run/Ollama
parity with the Qualcomm and OpenVINO NPU paths. Discover takes extra roots and a machine
description; the custom ModelPath (TryResolveCustom, DiscoverFor) now also resolves a Qualcomm AI
Hub package or a Moonshine folder on the Qualcomm backend, as WPF did, and is cleared when the PC
cannot run it. Program.cs keeps the launch-at-login switches and the --qnn-* commands.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e-check, model folder reload, hotkeys without a mic, tray and overlay fixes

- Tray 'Wake listening failed' is derived live and refreshed on a new FailedChanged event
- Changing microphone or model restarts the wake listener; no model disables it with one notice
- Provider recreated on model id or folder change
- Hotkeys bound even without a microphone
- Stop cue only when processing starts; tray icons cached per state and disposed
- Tooltip wording matches WPF; overlay gets Minimize and a resize grip

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n, history wording, packaging checks

Settings import: lenient enums for the WPF file (one bad value no longer discards it), parse failure no longer marks first run done, remote Ollama endpoints stay allowed, imported microphone endpoint ids resolve to the device. Settings window: launch-at-login failure keeps the window open, newly downloaded model is selected, pin and typing speed changed elsewhere are not reverted. First run: update check waits for setup, updates checkbox, preselected recommended model. Dictation: AI-processing overlay status, silent end for a Continue command with nothing left, WPF history wording and Command Prompt target, English forced as in WPF. All-users disable also removes the MSI shortcut. Transcription prefs seeded from dictation; unused fields removed. Build-Installers checks Whisper.net and QNN files; release job runs tests; nuspec drops WPF.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ve the version bump to the release commit

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@CakeRepository
CakeRepository merged commit ba4704f into main Oct 1, 2026
1 check passed
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