2026-02-18 21:08:48 +05:00
|
|
|
|
# APP INFO
|
2026-01-07 05:04:04 +05:00
|
|
|
|
app-name = JARVIS
|
|
|
|
|
|
app-description = Голосовой ассистент
|
|
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# TRAY MENU
|
2026-01-07 05:04:04 +05:00
|
|
|
|
tray-restart = Перезапустить
|
|
|
|
|
|
tray-settings = Настройки
|
|
|
|
|
|
tray-exit = Выход
|
|
|
|
|
|
tray-tooltip = JARVIS - Голосовой ассистент
|
2026-02-18 21:08:48 +05:00
|
|
|
|
tray-language = Язык
|
|
|
|
|
|
tray-voice = Голос
|
|
|
|
|
|
tray-wake-word = Движок wake-word
|
|
|
|
|
|
tray-noise-suppression = Шумоподавление
|
|
|
|
|
|
tray-vad = Детекция голоса (VAD)
|
|
|
|
|
|
tray-gain-normalizer = Нормализация громкости
|
|
|
|
|
|
|
|
|
|
|
|
# HEADER
|
2026-01-07 05:04:04 +05:00
|
|
|
|
header-commands = КОМАНДЫ
|
|
|
|
|
|
header-settings = НАСТРОЙКИ
|
|
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# SEARCH
|
2026-01-07 05:04:04 +05:00
|
|
|
|
search-placeholder = Введите команду вручную или произнесите «Джарвис» ...
|
|
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# MAIN PAGE
|
2026-01-07 05:04:04 +05:00
|
|
|
|
assistant-not-running = АССИСТЕНТ НЕ ЗАПУЩЕН
|
|
|
|
|
|
assistant-offline-hint = Настроить его можно не запуская.
|
|
|
|
|
|
btn-start = ЗАПУСТИТЬ
|
|
|
|
|
|
btn-starting = ЗАПУСК...
|
|
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# STATUS
|
2026-01-07 05:04:04 +05:00
|
|
|
|
status-disconnected = Отключен
|
|
|
|
|
|
status-standby = Ожидание
|
|
|
|
|
|
status-listening = Слушаю...
|
|
|
|
|
|
status-processing = Обработка...
|
|
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# STATS
|
2026-01-07 05:04:04 +05:00
|
|
|
|
stats-microphone = МИКРОФОН
|
|
|
|
|
|
stats-neural-networks = НЕЙРОСЕТИ
|
|
|
|
|
|
stats-resources = РЕСУРСЫ
|
|
|
|
|
|
stats-system-default = Системный
|
|
|
|
|
|
stats-not-selected = Не выбран
|
|
|
|
|
|
stats-loading = Загрузка...
|
|
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# FOOTER
|
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution
The previous feature/gui-rebrand-polish work only updated the appInfo store
keys; Footer.svelte, settings, and the commands page were still rendering
upstream's Telegram channel, Boosty/Patreon support links, feedback bot,
and the original author byline. This finishes the job.
Rust side (applies after `cargo build` — currently a no-op until MSVC Build
Tools are reinstalled):
- Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork.
Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI
no longer renders an author byline.
- config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK
/ SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for
the licence attribution), ISSUES_LINK (this fork's GH issues), and
PYTHON_FORK_LINK.
- tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/
get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link,
get_python_fork_link. Tidied up the Option<&str> -> String boilerplate
with unwrap_or.
- main.rs: invoke_handler updated to match.
Frontend side (visible only after Rust rebuild — Tauri bundles the dist into
the exe):
- stores.ts: appInfo shape reduced to repositoryLink / upstreamLink /
issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr()
with hardcoded fallbacks so the UI still populates correctly when run
against an un-rebuilt binary; fetchRepoOr() additionally overrides
CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis.
- Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues
link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line.
No author byline (it's in LICENSE.txt).
- routes/settings/index.svelte: feedback link now points to GitHub Issues.
- routes/commands/index.svelte: TG-channel reference replaced with a link
to the Python fork (where the command builder lives) plus a pointer to
resources/commands/ in this repo. Bruh GIF removed.
- locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram /
footer-support, added footer-issues / footer-fork-of, rewrote
commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues".
Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app
data directory.
2026-05-15 01:09:14 +03:00
|
|
|
|
footer-github = Репозиторий проекта
|
|
|
|
|
|
footer-issues = Сообщить о баге
|
|
|
|
|
|
footer-fork-of = Форк
|
2026-01-07 05:04:04 +05:00
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# SETTINGS
|
2026-01-07 05:04:04 +05:00
|
|
|
|
settings-title = Настройки
|
|
|
|
|
|
settings-general = Основные
|
|
|
|
|
|
settings-devices = Устройства
|
|
|
|
|
|
settings-neural-networks = Нейросети
|
|
|
|
|
|
settings-audio = Аудио
|
|
|
|
|
|
settings-recognition = Распознавание
|
|
|
|
|
|
settings-about = О программе
|
|
|
|
|
|
settings-language = Язык
|
|
|
|
|
|
settings-microphone = Микрофон
|
|
|
|
|
|
settings-microphone-desc = Его будет слушать ассистент.
|
|
|
|
|
|
settings-mic-default = По умолчанию (Система)
|
|
|
|
|
|
settings-voice = Голос ассистента
|
2026-01-07 23:29:46 +05:00
|
|
|
|
settings-voice-desc =
|
|
|
|
|
|
Не все команды работают со всеми звуковыми пакетами.
|
|
|
|
|
|
Кликните, чтобы прослушать как звучит голос.
|
2026-01-07 05:04:04 +05:00
|
|
|
|
settings-wake-word-engine = Движок активации
|
|
|
|
|
|
settings-wake-word-desc = Выберите нейросеть для распознавания активационной фразы.
|
|
|
|
|
|
settings-stt-engine = Распознавание речи
|
|
|
|
|
|
settings-intent-engine = Определение намерения
|
|
|
|
|
|
settings-intent-engine-desc = Выберите нейросеть для распознавания команд.
|
|
|
|
|
|
settings-noise-suppression = Шумоподавление
|
2026-01-08 00:35:21 +05:00
|
|
|
|
settings-noise-suppression-desc = Уменьшает фоновый шум. Может негативно влиять на распознавание.
|
2026-01-07 05:04:04 +05:00
|
|
|
|
settings-vad = Определение голоса (VAD)
|
|
|
|
|
|
settings-vad-desc = Пропускает тишину, экономит ресурсы CPU.
|
|
|
|
|
|
settings-gain-normalizer = Нормализация громкости
|
|
|
|
|
|
settings-gain-normalizer-desc = Автоматически регулирует уровень громкости.
|
|
|
|
|
|
settings-api-keys = API Ключи
|
|
|
|
|
|
settings-save = Сохранить
|
|
|
|
|
|
settings-cancel = Отмена
|
|
|
|
|
|
settings-back = Назад
|
|
|
|
|
|
settings-enabled = Включено
|
|
|
|
|
|
settings-disabled = Отключено
|
|
|
|
|
|
|
|
|
|
|
|
# settings - beta notice
|
|
|
|
|
|
settings-beta-title = БЕТА версия!
|
|
|
|
|
|
settings-beta-desc = Часть функций может работать некорректно.
|
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution
The previous feature/gui-rebrand-polish work only updated the appInfo store
keys; Footer.svelte, settings, and the commands page were still rendering
upstream's Telegram channel, Boosty/Patreon support links, feedback bot,
and the original author byline. This finishes the job.
Rust side (applies after `cargo build` — currently a no-op until MSVC Build
Tools are reinstalled):
- Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork.
Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI
no longer renders an author byline.
- config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK
/ SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for
the licence attribution), ISSUES_LINK (this fork's GH issues), and
PYTHON_FORK_LINK.
- tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/
get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link,
get_python_fork_link. Tidied up the Option<&str> -> String boilerplate
with unwrap_or.
- main.rs: invoke_handler updated to match.
Frontend side (visible only after Rust rebuild — Tauri bundles the dist into
the exe):
- stores.ts: appInfo shape reduced to repositoryLink / upstreamLink /
issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr()
with hardcoded fallbacks so the UI still populates correctly when run
against an un-rebuilt binary; fetchRepoOr() additionally overrides
CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis.
- Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues
link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line.
No author byline (it's in LICENSE.txt).
- routes/settings/index.svelte: feedback link now points to GitHub Issues.
- routes/commands/index.svelte: TG-channel reference replaced with a link
to the Python fork (where the command builder lives) plus a pointer to
resources/commands/ in this repo. Bruh GIF removed.
- locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram /
footer-support, added footer-issues / footer-fork-of, rewrote
commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues".
Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app
data directory.
2026-05-15 01:09:14 +03:00
|
|
|
|
settings-beta-feedback = Сообщайте обо всех найденных багах через
|
|
|
|
|
|
settings-beta-bot = GitHub Issues
|
2026-01-07 05:04:04 +05:00
|
|
|
|
settings-open-logs = Открыть папку с логами
|
|
|
|
|
|
|
|
|
|
|
|
# settings - picovoice
|
|
|
|
|
|
settings-attention = Внимание!
|
|
|
|
|
|
settings-picovoice-warning = Эта нейросеть работает не у всех!
|
|
|
|
|
|
settings-picovoice-waiting = Мы ждем официального патча от разработчиков.
|
|
|
|
|
|
settings-picovoice-key-desc = Введите сюда свой ключ Picovoice. Он выдается бесплатно при регистрации в
|
|
|
|
|
|
settings-picovoice-key = Ключ Picovoice
|
|
|
|
|
|
|
|
|
|
|
|
# settings - vosk
|
|
|
|
|
|
settings-auto-detect = Авто-определение
|
|
|
|
|
|
settings-vosk-model = Модель распознавания речи (Vosk)
|
2026-01-13 02:21:59 +05:00
|
|
|
|
settings-vosk-model-desc =
|
|
|
|
|
|
Выберите модель Vosk для распознавания речи.
|
|
|
|
|
|
Вы можете скачать модели здесь: https://alphacephei.com/vosk/models
|
2026-01-07 05:04:04 +05:00
|
|
|
|
settings-models-not-found = Модели не найдены
|
|
|
|
|
|
settings-models-hint = Поместите модели Vosk в папку resources/vosk
|
|
|
|
|
|
|
|
|
|
|
|
# settings - openai
|
|
|
|
|
|
settings-openai-key = Ключ OpenAI
|
|
|
|
|
|
settings-openai-not-supported = В данный момент ChatGPT не поддерживается. Он будет добавлен в ближайших обновлениях.
|
|
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# COMMANDS PAGE
|
2026-01-07 05:04:04 +05:00
|
|
|
|
commands-title = Команды
|
|
|
|
|
|
commands-search = Поиск команд...
|
|
|
|
|
|
commands-count = { $count } команд
|
chore(gui): rebrand — strip TG/Boosty/Patreon/feedback-bot, keep CC BY-NC-SA attribution
The previous feature/gui-rebrand-polish work only updated the appInfo store
keys; Footer.svelte, settings, and the commands page were still rendering
upstream's Telegram channel, Boosty/Patreon support links, feedback bot,
and the original author byline. This finishes the job.
Rust side (applies after `cargo build` — currently a no-op until MSVC Build
Tools are reinstalled):
- Cargo.toml: authors = ["Bossiara13"], repository = J.A.R.V.I.S-rust fork.
Original attribution stays in LICENSE.txt per CC BY-NC-SA 4.0; the UI
no longer renders an author byline.
- config.rs: dropped TG_OFFICIAL_LINK / FEEDBACK_LINK / SUPPORT_BOOSTY_LINK
/ SUPPORT_PATREON_LINK. Added UPSTREAM_REPOSITORY_LINK (Priler/jarvis for
the licence attribution), ISSUES_LINK (this fork's GH issues), and
PYTHON_FORK_LINK.
- tauri_commands/etc.rs: dropped get_tg_official_link/get_boosty_link/
get_patreon_link/get_feedback_link. Added get_upstream_link, get_issues_link,
get_python_fork_link. Tidied up the Option<&str> -> String boilerplate
with unwrap_or.
- main.rs: invoke_handler updated to match.
Frontend side (visible only after Rust rebuild — Tauri bundles the dist into
the exe):
- stores.ts: appInfo shape reduced to repositoryLink / upstreamLink /
issuesLink / pythonForkLink / logFilePath. loadAppInfo() uses fetchOr()
with hardcoded fallbacks so the UI still populates correctly when run
against an un-rebuilt binary; fetchRepoOr() additionally overrides
CARGO_PKG_REPOSITORY if it still resolves to upstream's Priler/jarvis.
- Footer.svelte: rewritten — © year + "J.A.R.V.I.S." + repo link + issues
link + small "fork of Priler/jarvis · CC BY-NC-SA 4.0" attribution line.
No author byline (it's in LICENSE.txt).
- routes/settings/index.svelte: feedback link now points to GitHub Issues.
- routes/commands/index.svelte: TG-channel reference replaced with a link
to the Python fork (where the command builder lives) plus a pointer to
resources/commands/ in this repo. Bruh GIF removed.
- locales/{ru,en,ua}.ftl: removed footer-author / footer-telegram /
footer-support, added footer-issues / footer-fork-of, rewrote
commands-wip-* strings, retargeted settings-beta-bot to "GitHub Issues".
Bundle identifier (com.priler.jarvis) kept intact to avoid moving the app
data directory.
2026-05-15 01:09:14 +03:00
|
|
|
|
commands-wip-title = Раздел в разработке
|
|
|
|
|
|
commands-wip-desc = Здесь будет редактор команд и список установленных пакетов.
|
|
|
|
|
|
commands-wip-builder = Пока что используй Python-форк с конструктором команд —
|
|
|
|
|
|
commands-wip-builder-link = открыть репозиторий
|
|
|
|
|
|
commands-wip-or-fork = Или загляни в Rust-репозиторий и правь команды напрямую в
|
|
|
|
|
|
commands-wip-fork-link = resources/commands/
|
2026-01-07 05:04:04 +05:00
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# ERRORS
|
2026-01-07 05:04:04 +05:00
|
|
|
|
error-generic = Произошла ошибка
|
|
|
|
|
|
error-connection = Ошибка подключения
|
|
|
|
|
|
error-not-found = Не найдено
|
|
|
|
|
|
|
2026-02-18 21:08:48 +05:00
|
|
|
|
# NOTIFICATIONS
|
2026-01-07 05:04:04 +05:00
|
|
|
|
notification-saved = Настройки сохранены!
|
|
|
|
|
|
notification-error = Ошибка
|
|
|
|
|
|
notification-assistant-started = Ассистент запущен
|
|
|
|
|
|
notification-assistant-stopped = Ассистент остановлен
|
2026-01-07 23:29:46 +05:00
|
|
|
|
|
2026-02-11 07:21:50 +05:00
|
|
|
|
# SLOTS EXTRACTION
|
|
|
|
|
|
settings-slot-engine = Извлечение параметров
|
|
|
|
|
|
settings-slot-engine-desc = Извлекает параметры из голосовых команд (напр. название города, число).
|
|
|
|
|
|
settings-gliner-model = Модель GLiNER ONNX
|
|
|
|
|
|
settings-gliner-model-desc =
|
|
|
|
|
|
Выберите вариант модели.
|
|
|
|
|
|
Квантизированные модели (int8, uint8) быстрее, но менее точны.
|
|
|
|
|
|
settings-gliner-models-hint = Модели GLiNER не найдены.
|
|
|
|
|
|
|
2026-01-07 23:29:46 +05:00
|
|
|
|
# ETC
|
|
|
|
|
|
search-error-not-running = Ассистент не запущен
|
|
|
|
|
|
search-error-failed = Не удалось выполнить команду
|
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n
Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars
or voice commands. Tauri commands for this landed in b243e67; this commit
wires them to Svelte.
Footer (frontend/src/components/Footer.svelte)
- Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips.
- Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile).
- Friendly title tooltips with full backend + model names.
- Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker.
Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte)
- Status banner showing active LLM (with model name) + TTS + Profile.
- LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change
(hot-swap, persisted to DB).
- TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend
(persisted, effective on next jarvis-app restart).
- "Reset context" button → llm_reset_context Tauri command.
- Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN).
- Tips alert: how to install Ollama / Piper / voice commands.
- Loads prefs via db_read('llm_backend' / 'tts_backend') on mount.
i18n strings (ru/en/ua, .ftl files)
- 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto,
settings-ai-applying, settings-ai-error, settings-ai-tips,
settings-llm-backend{,-desc}, settings-tts-backend{,-desc},
settings-llm-context{,-desc}, settings-llm-reset, settings-profile.
Build glue (crates/jarvis-gui/Cargo.toml)
- jarvis-core dep now includes the `llm` feature so backends.rs can resolve
`jarvis_core::llm::*` (was failing to compile after the global LLM module).
.gitignore
- tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally
installed binaries from tools/piper/install.ps1, not committed.
Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite).
Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
|
|
|
|
settings-no-voices = Голоса не найдены
|
|
|
|
|
|
|
|
|
|
|
|
# AI Backends tab
|
|
|
|
|
|
settings-ai-backends = ИИ-движки
|
|
|
|
|
|
settings-ai-active = Активный движок
|
|
|
|
|
|
settings-ai-auto = Авто
|
|
|
|
|
|
settings-ai-applying = Применяю...
|
|
|
|
|
|
settings-ai-error = Ошибка переключения
|
|
|
|
|
|
settings-ai-tips = Подсказки
|
|
|
|
|
|
settings-llm-backend = LLM движок
|
|
|
|
|
|
settings-llm-backend-desc = Где исполнять LLM-запросы. Hot-swap, без рестарта.
|
|
|
|
|
|
settings-tts-backend = TTS движок
|
fix: TTS hot-swap actually works + GUI max-width + Python builder discoverable
ROOT CAUSE ANALYSIS
User reported: (a) TTS dropdown doesn't apply, (b) GUI feels stretched,
(c) no link to command builder, (d) Python doesn't even start.
Issues (a), (b), (c) addressed here. (d) addressed in python repo.
=== Fix A: TTS hot-swap (was completely broken) ===
Two distinct bugs:
1. `tts::init_backend()` only read JARVIS_TTS env var, NEVER consulted
`Settings.tts_backend` in the DB. So saving "Silero" in the GUI
dropdown changed nothing — not even on restart.
2. `BACKEND: OnceCell<...>` couldn't be replaced at runtime, so even
if init had picked the right backend, the dropdown was useless
mid-session.
Fixed:
- `tts::BACKEND` is now `Lazy<RwLock<Option<Arc<dyn TtsBackend>>>>`.
- `choose_backend_name()` resolves from DB → env → auto-detect.
- New `swap_to(name)` replaces the live backend atomically.
- IPC: new `IpcAction::SwitchTts { backend }`. jarvis-app reacts to
it the same way it reacts to SwitchLlm.
- GUI's `set_tts_backend` now persists + hot-swaps GUI's TTS + Svelte
page also fires `switchDaemonTts()` over WS so the running daemon
installs the new backend.
- Removed "Применится при следующем запуске" hint — now applies
immediately. RU + EN locale strings updated.
=== Fix B: GUI max-width ===
main + #header had no max-width, so on a 1920px monitor the labels
sprawled across 1860px of space, which felt stretched. Added
max-width: 1280px + margin: 0 auto + box-sizing: border-box. Smaller
windows are unaffected.
Also added the same cap on .app-container.assist-page so the home
screen arc reactor centres properly.
=== Fix C: Command builder discoverable ===
The Python fork ships a separate yaml-editing tool at
`python/tools/command_builder/` (pywebview GUI). No way to find it
from the main Rust GUI. Fixed:
- New tauri command `open_command_builder` (crates/jarvis-gui/src/
tauri_commands/builder.rs). Locates the Python fork via
$JARVIS_PYTHON_DIR → sibling python/ → C:\Jarvis\python, prefers
the project's .venv, spawns `python -m tools.command_builder`.
- New blue "Конструктор команд (Python)" button on /settings page
near the Save / Back buttons.
Tests: 140 rust + 104 python all pass. Release builds of jarvis-app
and jarvis-gui both green.
2026-05-24 22:12:04 +03:00
|
|
|
|
settings-tts-backend-desc = Применяется сразу — без перезапуска.
|
feat(gui): footer backend chips + Settings 'AI Backends' tab + i18n
Surfaces the LLM/TTS hot-swap UX in the GUI so the user doesn't need env vars
or voice commands. Tauri commands for this landed in b243e67; this commit
wires them to Svelte.
Footer (frontend/src/components/Footer.svelte)
- Poll get_active_backends() every 5 s, show TTS / LLM / Profile chips.
- Chips have border accents by kind (cyan = TTS, lime = LLM, orange = Profile).
- Friendly title tooltips with full backend + model names.
- Silent if jarvis-gui can't reach the command (e.g. cold start) — no UI flicker.
Settings — new "AI Backends" tab (frontend/src/routes/settings/index.svelte)
- Status banner showing active LLM (with model name) + TTS + Profile.
- LLM selector: Auto / Groq / Ollama → calls set_llm_backend on change
(hot-swap, persisted to DB).
- TTS selector: Auto / SAPI / Piper / Silero → calls set_tts_backend
(persisted, effective on next jarvis-app restart).
- "Reset context" button → llm_reset_context Tauri command.
- Error toast for swap failures (e.g. Groq selected but no GROQ_TOKEN).
- Tips alert: how to install Ollama / Piper / voice commands.
- Loads prefs via db_read('llm_backend' / 'tts_backend') on mount.
i18n strings (ru/en/ua, .ftl files)
- 14 new keys: settings-ai-backends, settings-ai-active, settings-ai-auto,
settings-ai-applying, settings-ai-error, settings-ai-tips,
settings-llm-backend{,-desc}, settings-tts-backend{,-desc},
settings-llm-context{,-desc}, settings-llm-reset, settings-profile.
Build glue (crates/jarvis-gui/Cargo.toml)
- jarvis-core dep now includes the `llm` feature so backends.rs can resolve
`jarvis_core::llm::*` (was failing to compile after the global LLM module).
.gitignore
- tools/piper/*.dll, piper.exe, voices/, espeak-ng-data/ — locally
installed binaries from tools/piper/install.ps1, not committed.
Build: cargo build --release -p jarvis-gui green (4m, includes npm/Vite).
Test path: rebuild + launch jarvis-gui, /settings → "AI Backends" tab.
2026-05-15 17:06:46 +03:00
|
|
|
|
settings-llm-context = Контекст разговора
|
|
|
|
|
|
settings-llm-context-desc = LLM помнит предыдущие реплики. Сбросить, если ответы становятся странными.
|
|
|
|
|
|
settings-llm-reset = Сбросить контекст
|
feat(gui): /macros + /scheduler pages + README rewrite
Surfaces voice macros and scheduled tasks in the GUI, so the user doesn't
have to remember voice commands or grep schedule.json by hand.
Tauri commands (crates/jarvis-gui/src/tauri_commands/)
- macros.rs: macros_list, macros_replay, macros_delete, macros_is_recording,
macros_recording_name, macros_start_recording, macros_save_recording,
macros_cancel_recording (8 commands).
- scheduler.rs: scheduler_list, scheduler_remove, scheduler_clear (3 commands).
- Both exposed in main.rs invoke_handler.
GUI pages (frontend/src/routes/)
- macros/index.svelte:
* Lists all macros with name, steps_count, first 5 step previews,
created/last_run timestamps.
* Top: TextInput + "Начать запись" button. While recording shows orange
banner with "Сохранить"/"Отменить" buttons + polls is_recording every 2s.
* Per-card: "Запустить" (with busy state for replay duration), "Удалить".
* confirm() before delete.
- scheduler/index.svelte:
* Lists tasks with name, schedule_human (e.g. "каждые 2 ч"), action body,
ID, timestamps, action_kind badge.
* "Отменить" per task + "Очистить всё (N)" bottom button.
* Auto-polls every 5s (so the list updates as scheduler ticks fire tasks).
Header (frontend/src/components/Header.svelte)
- Two new buttons: "Макросы" → /macros, "Расписание" → /scheduler.
- Beside existing /commands and /settings buttons.
i18n
- ru/en/ua FTL: settings-ai-backends, settings-llm-*, settings-tts-*,
settings-profile, header-macros, header-scheduler.
- Re-applied AI Backends keys for ua.ftl (earlier edit hadn't taken).
README.md (full rewrite)
- Old README was 178 lines mostly explaining LLM-trigger flow and VAD config.
- New README is ~190 lines covering: features (LLM hot-swap, memory, profiles,
vision, scheduler, macros, utilities table), quick start, env vars table,
build steps with vcvars setup, test command, structure tree, voice workflow
diagram, license, roadmap.
- Up to date for 59 packs and all new infra.
Build: cargo build --release -p jarvis-gui green (2m). 55/55 tests pass.
2026-05-15 17:28:22 +03:00
|
|
|
|
settings-profile = Профиль
|
|
|
|
|
|
|
|
|
|
|
|
# Header buttons
|
|
|
|
|
|
header-macros = Макросы
|
feat: GUI /memory page + disk/date_math/sleep_timer packs (10 new commands)
GUI: Memory management completes the management trio (/macros + /scheduler + /memory).
Tauri commands (crates/jarvis-gui/src/tauri_commands/memory.rs)
- memory_list → Vec<MemoryFact{key, value, created_at, last_used_at, use_count}>
- memory_remember(k, v) → persist new fact (or overwrite)
- memory_forget(key) → delete by exact key
- memory_search(q, limit) → substring search
GUI /memory page (frontend/src/routes/memory/index.svelte)
- Top: add-fact form (key + value inputs + "+Добавить" button)
- Substring filter input for the list
- Per-card: key + use_count badge + value (highlighted box) + timestamps +
"Забыть" button with confirm() guard
- Auto-sorted by recency (last_used_at desc)
- Empty state shows voice-hint: 'скажи Jarvis-у "запомни что я люблю чай улун"'
Header (frontend/src/components/Header.svelte)
- New "Память" button between /scheduler and /settings.
- i18n: header-memory in ru/en/ua FTL files.
New voice packs
resources/commands/disk/ (2 cmds)
- disk.free "сколько свободно на диске" / "сколько места на диске C"
PowerShell Get-PSDrive → speaks "Свободно X ГБ из Y, это N%"
- disk.list "какие у меня диски" → "C 120 ГБ, D 300 ГБ, E 50 ГБ"
resources/commands/date_math/ (2 cmds)
- date.days_until "сколько дней до нового года" / "сколько до 8 марта" /
"сколько до 15 марта" — recognises Russian months,
holidays (Новый год, Рождество, 8 марта, 9 мая).
Auto-rolls to next year if target already passed.
Russian-grammar pluralisation (день/дня/дней).
- date.day_of_week "какой сегодня день недели" — Zeller's congruence,
maps to ru day name.
resources/commands/sleep_timer/ (3 cmds)
- sleep_timer.pause_in "выключи музыку через 30 минут"
→ scheduler one-shot lua action that fires media
VK_MEDIA_PLAY_PAUSE via the existing media_keys helper.
(Auto-generates _fire_pause.lua wrapper if missing.)
- sleep_timer.shutdown_in "выключи компьютер через 1 час"
→ shutdown.exe /s /t <secs>. Caps at 24 hours.
Speaks "Скажите 'отмени таймер' чтобы передумать."
- sleep_timer.cancel "отмени таймер выключения" / "не выключай компьютер"
→ shutdown /a + scheduler.remove("sleep_timer_pause"),
idempotent.
Pack count: 64 → 67. Tests: 112/112 pass.
Build: cargo build --release -p jarvis-gui green.
2026-05-15 23:35:23 +03:00
|
|
|
|
header-scheduler = Расписание
|
2026-05-16 13:26:42 +03:00
|
|
|
|
header-memory = Память
|
feat: /history page (recognition log) + multi wake-word loading
# Recognition history page
New /history route in the Tauri GUI. Every voice/text phrase that
reaches the dispatcher gets a row with: timestamp, the phrase, what
happened, command id + confidence (if matched), which matcher fired
(intent / fuzzy / LLM-router / LLM-fallback).
Color coding:
- Green: command matched AND executed successfully
- Red: command matched but failed, OR dispatcher error
- Blue: LLM fallback handled it (Jarvis spoke a free-form reply)
- Orange: no match at all ("Не понял")
Live updates: GUI polls every 2s from the on-disk log, so the page
shows daemon writes in near real time even though they're separate
processes. Filter box for searching by phrase or command id.
Architecture:
- New core module `recognition_log` with ring buffer (cap 500) +
atomic JSON write-through to `<APP_CONFIG_DIR>/recognition_log.json`.
- `record(phrase, source, outcome)` is the single call-site from the
daemon's `execute_command()` — hooked into the 4 outcome paths
(matched-ok, matched-fail, not-found, llm-handled, error).
- `recent(limit)` reads the in-memory buffer (daemon's view).
- `recent_from_disk(limit)` re-reads the JSON file — GUI uses this
since the GUI process has its own buffer that doesn't see the
daemon's writes.
- 5 new unit tests covering ring buffer trimming, outcome serde
roundtrip, missing/corrupt/oversized file recovery.
GUI:
- `crates/jarvis-gui/src/tauri_commands/history.rs`: history_recent,
history_clear. Flattens the Outcome enum into a single struct that's
easier for the Svelte template to render.
- `frontend/src/routes/history/index.svelte`: ~270 lines. Stats badges
(✓ N matched / ✗ N misses / total), filter input, virtual list of
entry cards with color-coded left border. Polls every 2s.
- Header gets a new "История" / "History" button (between Plugins and
Settings). Russian + English locale entries added.
# Multi wake-word loading
Was: `init()` loaded the bundled `jarvis-default.rpw` + at most ONE
custom (from `settings.custom_wake_word`). User had to pick a single
trained model.
Now: loads the bundled default PLUS every .rpw in
`APP_CONFIG_DIR/wake_words/` simultaneously. Rustpotter natively
supports multiple wake-word triggers — each adds robustness for
different voice profiles. The legacy `custom_wake_word` field is
checked for back-compat but is a no-op if it points inside the
already-loaded directory.
User-facing impact: train the wake-word once via /wake-trainer →
restart daemon → detection improves automatically without picking a
single "active" model.
# Settings → "Обучить wake-word" button
Added a purple button on the settings page that links to
/wake-trainer. The trainer existed but had no in-GUI link, so users
couldn't find it without typing the URL. Now sits next to the
"Конструктор команд (Python)" button.
Tests: 140 → 145 rust core tests (+5 recognition_log). Frontend
rebuilds in 6.2s. Release builds of jarvis-app + jarvis-gui green.
Practical test: GUI launches (MainWindowTitle confirmed), seed log
file written + visible to the page.
2026-05-24 23:23:43 +03:00
|
|
|
|
header-plugins = Плагины
|
|
|
|
|
|
header-history = История
|