RinaAssistant v2.0.0 — First Global Update
[2.0.0] — 2026-08
Rina now knows what is installed on your computer. Launching a program no
longer requires adding it by hand: say its name and she finds it, asks which
one you meant when several match, and remembers your answer.
Added
- Program discovery. Rina indexes what is installed on the machine —
Start Menu shortcuts, Microsoft Store apps, desktop shortcuts, and
executables on PATH — so "запусти телеграм" works without any setup.
Names spoken in Russian resolve to Latin-named programs through
transliteration and a table of common spoken names ("стим" → Steam,
"ворд" → Word, "обс" → OBS Studio). "Запусти браузер" launches whichever
browser is actually installed. The index is cached (a full scan takes about
a second, a cached read four milliseconds) and refreshes in the background. - Folders with portable programs (Settings → Программы). Programs that are
simply unpacked into a folder have no Start Menu entry and no registry
record — point Rina at the folder and she will find them. Bundled runtimes
and helper executables are filtered out, so a Ren'Py SDK folder contributes
renpy.exeand not the five other.exefiles shipped inside it. - Teaching Rina a program. When nothing matches, Rina offers to be shown
the file once and remembers it permanently. Remembered programs are listed
in the Commands tab and can be removed individually. - Clarifying questions. When several programs match, Rina asks instead of
guessing — "Нашла несколько: Visual Studio 2022, Visual Studio Code…" — and
accepts "второй", a name, or "отмена". The answer is remembered, so the
same phrase launches straight away next time. - System and media control: volume, mute, play/pause, next/previous track,
screenshot, lock. Shutdown, restart and sleep are available too, but always
require confirmation. - Sequence step "Пауза" — a delay between steps, so a scenario can wait for
a program to start before the next step runs. - Plugin API v3: declarative pages. A plugin now describes its tab as data
(Title,Text,Note,Items,Button,Divider) and the application
renders it. Plugins no longer import Qt, so they will survive a change of UI
framework, and a page can be serialized to JSON for a non-Python shell.
The bundled Notes plugin was rewritten as the reference implementation. - Config schema versioning with automatic migration, including a one-time
backup of the previous configuration before the first migration.
Changed
- Creating a command no longer asks for a file path. The "Программа" type
offers autocomplete over the programs Rina found; browsing for a file is
still available for anything not in the index. Store apps are supported as
command targets, and editing a command shows the program's name rather than
its application identifier. - Sequences were reworked the same way: program steps use the picker, and
the action step grew from five window-only actions to sixteen, covering
volume, playback, screenshot, lock and power. - Duplicate trigger phrases are now refused with an explanation. Previously
two commands could share a phrase, only the first ever ran, and there was no
way to tell why the second was silent. - Commands containing shutdown, restart or sleep — directly or in a step —
ask for confirmation before running. - Sequences run in a background thread, so a pause no longer freezes the window.
- The hard-coded catalogue of five launchable programs is gone; it remains only
as a fallback on systems without an index. - The Commands tab now also shows what Rina found, with a refresh button.
Fixed
- Programs with Russian names could not be launched at all. PowerShell
returns its output in the console codepage, not UTF-8, so 62 system apps —
"Блокнот", "Диспетчер задач", "Калькулятор" — were read as mangled text and
never matched anything. - Window actions were executed from the wrong thread. Commands run in the
speech-recognition thread and called window methods directly; they are now
routed to the GUI thread through a signal. - Enabling any plugin that declares settings crashed the application — the
plugin settings panel still used the old row signature after the 1.2.0
interface rework.
Notes for plugin authors
create_page() returning a QWidget still works, but it is deprecated: it ties
a plugin to Qt. Implement page() (see plugins/page_spec.py) and handle
button presses in on_action(). If both are defined, page() wins.
Upgrading
Configuration is migrated automatically on first launch. Custom commands,
history, plugins and their settings are preserved, and a copy of the previous
configuration is written to backup-v0/ next to the config files
(%APPDATA%\RinaAssistant\) in case you need to go back.