Skip to content

Releases: NikitaHerndlhofer/superwhisper-rag

v0.9.5

24 May 17:17

Choose a tag to compare

Menu-bar recording counter now ticks while the menu is open

v0.9.4 added .eventTracking registration to the recording-tick Timer so the callback would fire while the NSMenu was in tracking mode, but the visible "Recording M:SS" header still froze. The reason: rebuildMenu() constructs a fresh NSMenu and reassigns statusItem.menu, but NSMenu snapshots its layout when it opens — the reassignment only takes effect on the next open. So the tick was running, but it was mutating an off-screen menu.

v0.9.5 fixes this by mutating the title on the currently-tracking menu item in-place + calling NSMenu.update() to force a redraw. Same pattern applied to the "Undo auto-stop (Ns)" banner whose countdown had the identical freeze.

Also: bundle-materialisation race hardening

Added a retry pass to materialiseHelper's renameSync: when both launchd watchers (meeting-watch + meeting-menubar) extract the helper bundle concurrently on first-kickstart after brew upgrade, the loser sometimes hit ENOTEMPTY in a window the existing pre-rename rmSync couldn't close. A single retry resolves it.

Full Changelog: v0.9.4...v0.9.5

v0.9.4

24 May 16:53

Choose a tag to compare

Full Changelog: v0.9.3...v0.9.4

Full Changelog: v0.9.3...v0.9.4

v0.9.3

24 May 14:51

Choose a tag to compare

Full Changelog: v0.9.2...v0.9.3

v0.9.2

24 May 13:32

Choose a tag to compare

Full Changelog: v0.9.1...v0.9.2

v0.9.1

24 May 08:47

Choose a tag to compare

Full Changelog: v0.9.0...v0.9.1

v0.9.0

24 May 08:16

Choose a tag to compare

Full Changelog: v0.8.0...v0.9.0

v0.8.0

24 May 03:52

Choose a tag to compare

Full Changelog: v0.7.0...v0.8.0

v0.7.0

23 May 20:53

Choose a tag to compare

Meeting capture pipeline (phases 1–5)

Grow swrag from a read-only Super Whisper archive into a full meeting
capture + queue pipeline: detect calls event-driven (NSWorkspace +
CoreAudio notifications, no polling), offer to record, queue audio,
drive SW one item at a time, patch SW's datetime to the real capture
time, then targeted-ingest the result into the archive.

Phase 1 — SW patching backbone

  • migration 005_meeting_queue.sql + meeting_queue_state config key
  • src/meeting/{queue,sw-control,patcher,processor}.ts
  • targeted re-ingest via readSourceRecordingByFolder + runIndexFolder
    (fixes the patched-row-missed-by-since-filter bug)
  • FSEvents-driven SW completion gate (mtime-quiescence based; no polling)
  • swrag enqueue + swrag meeting queue list/start/pause/state/discard

Phase 2 — Swift helper + event-driven detection

  • swift-helper/ SPM package, universal Mach-O at
    vendor/swrag-helper-darwin-universal
  • swrag-helper events subscribes to NSWorkspace + CoreAudio
    notifications, emits line-delimited JSON
  • src/meeting/detect.ts consumes events with 1.5 s edge debounce
  • swrag meeting status + swrag meeting permissions-check

Phase 3 — Audio recorder

  • swift-helper/Sources/SwragHelper/Record.swift (AVAudioEngine with
    VoiceProcessingIO for free AEC/AGC/NR; ScreenCaptureKit for system
    audio, opt-in)
  • src/meeting/record.ts owns the recorder subprocess lifecycle
  • swrag meeting record start/stop

Phase 4 — Daemon + popup + menu bar

  • src/meeting/daemon.ts owns processor, detector, recorder; exposes
    unix socket (mode 0600) with request/response ops + subscribe push
    events
  • start-only popup (90 s timeout) on NONE → HIGH; non-modal
    notification + 5 s undo on HIGH → NONE while recording
  • Swift menubar subcommand connects via NWConnection, renders from
    push events (no polling)
  • swrag meeting enable-watcher / disable-watcher install both launchd
    agents atomically with rollback

Phase 5 — Drop the hourly cron + cleanup

  • delete enable-sync / disable-sync; collapse plist template to
    keepalive-only
  • bootstrap rewritten: ollama → embed model → warm permissions →
    install watcher → ingest → install skill → doctor
  • doctor: replace launchd-sync check with meeting-watcher (launchd) +
    macOS permissions (mic / screen / automation)
  • README + architecture docs rewritten

Documented regression

Meeting recordings made via the watcher ingest immediately on SW
completion. Live SW dictations made outside the watcher pay a one-time
~5–30 s embed pass on first swrag sql (covered by ensureFresh).

Verification

276 tests pass / 727 expect() calls across 27 files. bun run typecheck clean. bun run build produces working
dist/swrag-darwin-{arm64,x64} plus the universal Swift helper.

Full Changelog: v0.6.3...v0.7.0

v0.6.3

20 May 21:59

Choose a tag to compare

Full Changelog: v0.6.2...v0.6.3

v0.6.2

20 May 21:38

Choose a tag to compare

Full Changelog: v0.6.1...v0.6.2