release: ship v1.5.0 with on-device writing suggestions
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

Adds next-sentence suggestions while typing, weekly input insights and a
personal phrase memory to the desktop app, and fixes custom instructions so
they process the text instead of inserting the instruction's own wording.
Local model requests are now bounded and individually cancellable.

Bumps the product version to 1.5.0 (Android/iOS build 1050000), refreshes the
landing and web download links, and records the new INPUT feature rows and the
open verification gaps in the infrastructure map.
This commit is contained in:
Yun Chan 2026-09-23 16:04:27 +09:00
parent 99f06c253c
commit 5c11ee2fde
104 changed files with 14410 additions and 174 deletions

View file

@ -13,6 +13,69 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Cloud-optional backup (encrypted, opt-in)
- Plugin system for custom pipelines
## [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.
## [1.4.0] - 2026-09-21
### Added