• v1.5.0 5c11ee2fde

    D3RO Voice v1.5.0
    Some checks failed
    deploy-site / deploy (push) Failing after 33s
    portable-unsigned / portable-windows (push) Failing after 4m7s
    release / release-windows (push) Failing after 3m16s
    Stable

    yunchan released this 2026-09-23 07:04:45 +00:00 | 124 commits to main since this release

    [1.5.0] - 2026-09-23

    Published from an annotated tag. Installer and update metadata are served by the
    canonical Forgejo feed; no binaries are committed to this repository.

    Added

    • Next-sentence suggestions while you type. With the feature turned on, a small
      ghost-text panel sits next to the caret in whatever app has focus and offers up to
      three ways to continue the sentence. Ctrl+Alt+Right accepts, Down/Up move
      between candidates, Left or the panel's X dismisses, and all four are ordinary
      rebindable shortcuts. The panel never takes focus and is click-through until you
      turn interaction on.
    • Typed-text learning from the field you are in, read through UI Automation and
      diffed as a snapshot, so committed Korean and Japanese IME text is counted
      correctly (key codes cannot reconstruct it). Password fields are refused before any
      read, and IME composition suppresses learning and suggestions until the character
      is committed.
    • Weekly input insights (Settings > Input and a dashboard card): keystroke,
      click and scroll totals, mouse travel converted to meters, top hours and apps, flow
      windows, edit friction (edits per 100 characters) and per-app suggestion quality.
    • A personal phrase memory built from your own typed sentences and voice history,
      ranked by frequency, recency (30-day half-life) and same-app usage, and offered as
      prompt hints. Phrases can be deleted individually or all at once.
    • A privacy receipt that reports the real number of retained rows and the 30-day
      retention rule, plus smart exclusion: only the app you are in can be suggested
      for the exclusion list, and only after repeated unreadable fields, never
      automatically.
    • A shortcut safety audit in Settings that flags invalid or conflicting bindings
      across every action.
    • A local personal graph that links your sentences by "follows" and shared-terms
      relationships, so related context can surface even when the current prefix differs.
      It is local SQLite only, with no embeddings or network.

    Changed

    • Local model requests are now bounded and individually cancellable.
      LocalLLMService gives every request its own abort controller, relays external
      cancellation, requires a done frame before a stream counts as successful, and
      clears incomplete streams. Generation and streaming are capped at 2048 tokens /
      120 seconds and chat at 512 / 60 seconds. Text suggestions use keep_alive: 2m and
      no longer warm the model at startup.
    • Voice conversations are single-flight and pass their cancellation through to
      the active local chat request, so ending a conversation aborts its own inference
      instead of only changing what the UI shows.
    • Console windows are suppressed for the app's Windows helper processes (text to
      speech, voice actions, audio-device and active-window enumeration, and every ffmpeg
      path).

    Fixed

    • Custom instructions ran the instruction instead of your text. Every built-in
      instruction (translate, summarize, rephrase, explain code, free prompt) inserted the
      instruction's own wording rather than the processed result, and only {{text}} was
      ever substituted, which none of the presets use. The instruction is now the system
      prompt, the transcript is the text, and {{text}}, {{userPrompt}} and
      {{targetLanguage}} are resolved in one shared place. This path had never worked in
      any shipped release.
    • The suggestion panel could refuse to close, revive itself, or appear on a bare
      click.
      Holding the modifier that Windows turns into Ctrl+Alt no longer fires the
      voice shortcut underneath, closing the panel during generation discards that request
      instead of re-showing it, a click without typing no longer triggers a suggestion,
      and pressing Enter stops the same text from being suggested again.
    • The global input hook is reference-counted, so the shortcut service and input
      telemetry can attach at the same time without one disabling the other.
    Downloads