2026-04-22 19:35:16 +03:00
|
|
|
|
open_browser:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой браузер
|
|
|
|
|
|
- запусти браузер
|
2026-04-27 20:06:26 +03:00
|
|
|
|
- открой яндекс
|
|
|
|
|
|
- яндекс браузер
|
|
|
|
|
|
action: {type: url, href: "about:blank", browser: "yandex"}
|
2026-04-22 19:35:16 +03:00
|
|
|
|
|
|
|
|
|
|
open_youtube:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой ютуб
|
|
|
|
|
|
- ютуб
|
|
|
|
|
|
- запусти ютуб
|
2026-04-27 20:06:26 +03:00
|
|
|
|
action: {type: url, href: "https://www.youtube.com", browser: "yandex"}
|
2026-04-22 19:35:16 +03:00
|
|
|
|
|
|
|
|
|
|
open_google:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой гугл
|
|
|
|
|
|
- гугл
|
|
|
|
|
|
- запусти гугл
|
2026-04-27 20:06:26 +03:00
|
|
|
|
action: {type: url, href: "https://www.google.com", browser: "yandex"}
|
2026-04-22 19:35:16 +03:00
|
|
|
|
|
feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
2026-05-15 01:48:34 +03:00
|
|
|
|
open_notepad:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой блокнот
|
|
|
|
|
|
- запусти блокнот
|
|
|
|
|
|
- открой нотепад
|
|
|
|
|
|
action: {type: shell, cmd: 'start "" notepad.exe'}
|
|
|
|
|
|
|
|
|
|
|
|
open_calculator:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой калькулятор
|
|
|
|
|
|
- запусти калькулятор
|
|
|
|
|
|
- нужен калькулятор
|
|
|
|
|
|
action: {type: shell, cmd: 'start "" calc.exe'}
|
|
|
|
|
|
|
|
|
|
|
|
open_explorer:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой проводник
|
|
|
|
|
|
- открой папку
|
|
|
|
|
|
- запусти проводник
|
|
|
|
|
|
- открой файлы
|
|
|
|
|
|
action: {type: shell, cmd: 'start "" explorer.exe'}
|
|
|
|
|
|
|
|
|
|
|
|
open_terminal:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой терминал
|
|
|
|
|
|
- запусти терминал
|
|
|
|
|
|
- открой консоль
|
|
|
|
|
|
- открой повершелл
|
|
|
|
|
|
action: {type: shell, cmd: 'start "" wt.exe || start "" powershell.exe'}
|
|
|
|
|
|
|
|
|
|
|
|
open_settings:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой настройки
|
|
|
|
|
|
- открой параметры
|
|
|
|
|
|
- открой настройки виндоус
|
|
|
|
|
|
action: {type: shell, cmd: 'start "" ms-settings:'}
|
|
|
|
|
|
|
|
|
|
|
|
open_task_manager:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой диспетчер задач
|
|
|
|
|
|
- запусти диспетчер задач
|
|
|
|
|
|
- диспетчер задач
|
|
|
|
|
|
action: {type: shell, cmd: 'start "" taskmgr.exe'}
|
|
|
|
|
|
|
|
|
|
|
|
lock_screen:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- заблокируй компьютер
|
|
|
|
|
|
- заблокируй экран
|
|
|
|
|
|
- блокировка экрана
|
|
|
|
|
|
- залочь
|
|
|
|
|
|
action: {type: shell, cmd: 'rundll32.exe user32.dll,LockWorkStation'}
|
|
|
|
|
|
|
|
|
|
|
|
screenshot:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- сделай скриншот
|
|
|
|
|
|
- скриншот
|
|
|
|
|
|
- сними экран
|
|
|
|
|
|
action:
|
|
|
|
|
|
type: shell
|
|
|
|
|
|
cmd: >-
|
|
|
|
|
|
powershell -NoProfile -Command "Add-Type -AssemblyName System.Windows.Forms,System.Drawing; $b=[System.Windows.Forms.Screen]::PrimaryScreen.Bounds; $bmp=New-Object Drawing.Bitmap $b.Width,$b.Height; $g=[Drawing.Graphics]::FromImage($bmp); $g.CopyFromScreen($b.Location,[Drawing.Point]::Empty,$b.Size); $p=Join-Path $env:USERPROFILE ('Pictures\jarvis_'+(Get-Date -Format 'yyyyMMdd_HHmmss')+'.png'); $bmp.Save($p); $g.Dispose(); $bmp.Dispose()"
|
|
|
|
|
|
|
|
|
|
|
|
volume_up:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- громче
|
|
|
|
|
|
- сделай громче
|
|
|
|
|
|
- прибавь звук
|
|
|
|
|
|
- увеличь громкость
|
|
|
|
|
|
- погромче
|
|
|
|
|
|
action:
|
|
|
|
|
|
type: multi
|
|
|
|
|
|
steps:
|
|
|
|
|
|
- {type: keys, sequence: 'volumeup'}
|
|
|
|
|
|
- {type: keys, sequence: 'volumeup'}
|
|
|
|
|
|
- {type: keys, sequence: 'volumeup'}
|
|
|
|
|
|
- {type: keys, sequence: 'volumeup'}
|
|
|
|
|
|
- {type: keys, sequence: 'volumeup'}
|
|
|
|
|
|
|
|
|
|
|
|
volume_down:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- тише
|
|
|
|
|
|
- сделай тише
|
|
|
|
|
|
- убавь звук
|
|
|
|
|
|
- уменьши громкость
|
|
|
|
|
|
- потише
|
|
|
|
|
|
action:
|
|
|
|
|
|
type: multi
|
|
|
|
|
|
steps:
|
|
|
|
|
|
- {type: keys, sequence: 'volumedown'}
|
|
|
|
|
|
- {type: keys, sequence: 'volumedown'}
|
|
|
|
|
|
- {type: keys, sequence: 'volumedown'}
|
|
|
|
|
|
- {type: keys, sequence: 'volumedown'}
|
|
|
|
|
|
- {type: keys, sequence: 'volumedown'}
|
|
|
|
|
|
|
|
|
|
|
|
sound_off:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- выключи звук
|
|
|
|
|
|
- беззвучный режим
|
|
|
|
|
|
- режим без звука
|
|
|
|
|
|
- отключи звук
|
|
|
|
|
|
action:
|
|
|
|
|
|
type: multi
|
|
|
|
|
|
steps:
|
|
|
|
|
|
- {type: play_sound, name: ok}
|
|
|
|
|
|
- {type: system, op: volume_mute}
|
|
|
|
|
|
|
|
|
|
|
|
sound_on:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- включи звук
|
|
|
|
|
|
- режим со звуком
|
|
|
|
|
|
- верни звук
|
|
|
|
|
|
action:
|
|
|
|
|
|
type: multi
|
|
|
|
|
|
steps:
|
|
|
|
|
|
- {type: system, op: volume_unmute}
|
|
|
|
|
|
- {type: play_sound, name: ok}
|
|
|
|
|
|
|
2023-04-16 16:59:18 +05:00
|
|
|
|
music:
|
2026-04-22 19:35:16 +03:00
|
|
|
|
phrases:
|
|
|
|
|
|
- давай музыку
|
|
|
|
|
|
- музыка
|
|
|
|
|
|
- яндекс музыка
|
|
|
|
|
|
- включи музыку
|
|
|
|
|
|
- открой музыку
|
|
|
|
|
|
- послушаем музыку
|
|
|
|
|
|
- хочу музыку
|
|
|
|
|
|
- врубай музло
|
|
|
|
|
|
- включи что-то послушать
|
|
|
|
|
|
- давай что-то послушаем
|
feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
2026-05-15 01:48:34 +03:00
|
|
|
|
action: {type: keys, sequence: 'playpause'}
|
2026-04-22 19:35:16 +03:00
|
|
|
|
|
2023-04-16 16:59:18 +05:00
|
|
|
|
music_off:
|
2026-04-22 19:35:16 +03:00
|
|
|
|
phrases:
|
|
|
|
|
|
- выключи музыку
|
|
|
|
|
|
- отруби музыку
|
|
|
|
|
|
- убери музыку
|
|
|
|
|
|
- отключи музыку
|
|
|
|
|
|
- закрой музыку
|
|
|
|
|
|
- останови музыку
|
|
|
|
|
|
- хватит музыки
|
feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
2026-05-15 01:48:34 +03:00
|
|
|
|
- пауза
|
|
|
|
|
|
- поставь на паузу
|
|
|
|
|
|
action: {type: keys, sequence: 'playpause'}
|
2026-04-22 19:35:16 +03:00
|
|
|
|
|
|
|
|
|
|
music_next:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- следующий трек
|
|
|
|
|
|
- следующая мелодия
|
|
|
|
|
|
- следующая песня
|
|
|
|
|
|
- переключи трек
|
|
|
|
|
|
- переключи мелодию
|
|
|
|
|
|
- переключи песню
|
|
|
|
|
|
- следующая музыка
|
feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
2026-05-15 01:48:34 +03:00
|
|
|
|
action: {type: keys, sequence: 'nexttrack'}
|
2026-04-22 19:35:16 +03:00
|
|
|
|
|
|
|
|
|
|
music_prev:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- предыдущая музыка
|
|
|
|
|
|
- предыдущий трек
|
|
|
|
|
|
- предыдущая мелодия
|
|
|
|
|
|
- предыдущая песня
|
|
|
|
|
|
- верни трек
|
|
|
|
|
|
- верни мелодию
|
|
|
|
|
|
- верни песню
|
|
|
|
|
|
- верни прошлый трек
|
|
|
|
|
|
- переключи на прошлый трек
|
feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
2026-05-15 01:48:34 +03:00
|
|
|
|
action: {type: keys, sequence: 'prevtrack'}
|
2026-04-22 19:35:16 +03:00
|
|
|
|
|
feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
2026-05-15 01:48:34 +03:00
|
|
|
|
media_stop:
|
2026-04-22 19:35:16 +03:00
|
|
|
|
phrases:
|
feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
2026-05-15 01:48:34 +03:00
|
|
|
|
- стоп музыка
|
|
|
|
|
|
- полная тишина
|
|
|
|
|
|
action: {type: keys, sequence: 'stop'}
|
2026-04-22 19:35:16 +03:00
|
|
|
|
|
feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
2026-05-15 01:48:34 +03:00
|
|
|
|
switch_audio_device:
|
2026-04-22 19:35:16 +03:00
|
|
|
|
phrases:
|
feat: parity with rust fork — LLM auto-fallback + 6 new action types + 20+ commands
Brings the python fork in line with the new feature/pc-tools work that
landed in rust. Same UX, same trigger phrases, same env vars.
config.py:
+ LLM_AUTO_FALLBACK = True
+ LLM_AUTO_FALLBACK_MIN_CHARS = 4
Mirrors the rust config knobs. The old "скажи X" trigger still works
(VA_TBR strips it before intent matching, so what remains hits this
fallback anyway) — but now ANY unrecognized query goes to Groq, not
just "скажи" ones.
main.py:
va_respond: replaced the fuzz-on-"скажи" gate with a unified auto-
fallback that fires whenever no command matches, GROQ_TOKEN is set,
and the utterance is at least LLM_AUTO_FALLBACK_MIN_CHARS long.
+ _speak(text): recorder.stop() → tts.va_speak → start, used by the
new action handlers so the mic doesn't pick up the assistant.
+ _set_clipboard(text): subprocess to PowerShell Set-Clipboard, no
new python deps.
+ _strip_trigger(voice, triggers): shared helper for codegen/file_search
where we need the text AFTER the trigger phrase.
New action handlers (registered in run_action dispatch):
+ groq_codegen — extracts query, calls Groq with strict "code only"
system prompt at temp 0.2, strips ```lang ... ``` fences, puts the
result in the clipboard, speaks "Код в буфере, сэр. Строк: N".
+ ocr_screen — PowerShell System.Drawing screenshot to a temp PNG,
shells to tesseract.exe (-l rus+eng), speaks a 120-char preview,
clipboard. Looks for tesseract on PATH first then standard install
dirs; gives a clear "Tesseract не установлен" if missing.
+ sysinfo — CIM-based battery/cpu/ram/disk via PS one-liners, time
via python datetime (gets us localized weekday for free). Topics:
time / battery / cpu / ram / disk / all.
+ file_search — strips trigger, recursive Get-ChildItem in Desktop/
Documents/Downloads (depth 3, top 5), opens explorer /select on
the first hit, speaks count and basename.
+ audio_devices_panel — opens mmsys.cpl. Proper COM-based device
switching (like the rust IPolicyConfig version) is deferred — TODO
in backlog.
commands.yaml:
Total 33 commands (was 19). New:
+ open_notepad / open_calculator / open_explorer / open_terminal
/ open_settings / open_task_manager / lock_screen / screenshot
— all via shell action (no AHK exes needed).
+ volume_up / volume_down — five chained keys=volumeup/volumedown
presses each, like rust's _volume_helper.ps1 with Times=5.
+ media_stop — keys=stop.
+ sysinfo_time / sysinfo_battery / sysinfo_cpu / sysinfo_ram /
sysinfo_disk / sysinfo_all — sysinfo action.
+ file_search, codegen, read_screen, switch_audio_device.
Replaced (were AHK exes that Priler ships and we don't have):
~ music → keys playpause
~ music_off → keys playpause (toggle)
~ music_next → keys nexttrack
~ music_prev → keys prevtrack
Removed (Priler hardware/setup specific, can't sensibly port):
- gaming_mode_on / gaming_mode_off (display config switch)
- music_save (depends on the specific player AHK was driving)
- switch_to_headphones / switch_to_dynamics (replaced with the
generic switch_audio_device that opens mmsys.cpl)
Kept as-is (worked already, no AHK dependency):
open_browser / open_youtube / open_google (url action)
sound_off / sound_on (pycaw via system.volume_mute/unmute)
thanks / stupid / off
Smoke-tested: yaml.safe_load → 33 commands, ast.parse main.py → OK.
Portability: USERPROFILE for screenshot path, $env:SystemDrive for disk,
PATH lookup for tesseract before falling back to standard install dirs.
No hardcoded user-specific paths.
2026-05-15 01:48:34 +03:00
|
|
|
|
- переключи устройство
|
|
|
|
|
|
- смени вывод
|
|
|
|
|
|
- переключи на наушники
|
|
|
|
|
|
- переключи на колонки
|
|
|
|
|
|
- переключи на динамики
|
|
|
|
|
|
- открой настройки звука
|
|
|
|
|
|
action: {type: audio_devices_panel}
|
|
|
|
|
|
|
|
|
|
|
|
sysinfo_time:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- сколько времени
|
|
|
|
|
|
- который час
|
|
|
|
|
|
- какой сегодня день
|
|
|
|
|
|
- какое сегодня число
|
|
|
|
|
|
action: {type: sysinfo, topic: time}
|
|
|
|
|
|
|
|
|
|
|
|
sysinfo_battery:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- сколько заряда
|
|
|
|
|
|
- заряд батареи
|
|
|
|
|
|
- сколько процентов батареи
|
|
|
|
|
|
action: {type: sysinfo, topic: battery}
|
|
|
|
|
|
|
|
|
|
|
|
sysinfo_cpu:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- загрузка процессора
|
|
|
|
|
|
- сколько процессор
|
|
|
|
|
|
- нагрузка цпу
|
|
|
|
|
|
action: {type: sysinfo, topic: cpu}
|
|
|
|
|
|
|
|
|
|
|
|
sysinfo_ram:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- сколько памяти
|
|
|
|
|
|
- сколько оперативки
|
|
|
|
|
|
- загрузка оперативки
|
|
|
|
|
|
- сколько свободной памяти
|
|
|
|
|
|
action: {type: sysinfo, topic: ram}
|
|
|
|
|
|
|
|
|
|
|
|
sysinfo_disk:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- сколько свободно на диске
|
|
|
|
|
|
- сколько места на диске
|
|
|
|
|
|
- сколько свободно на компе
|
|
|
|
|
|
action: {type: sysinfo, topic: disk}
|
|
|
|
|
|
|
|
|
|
|
|
sysinfo_all:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- статус системы
|
|
|
|
|
|
- что с компьютером
|
|
|
|
|
|
- состояние пк
|
|
|
|
|
|
- что по системе
|
|
|
|
|
|
action: {type: sysinfo, topic: all}
|
|
|
|
|
|
|
|
|
|
|
|
file_search:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- найди файл
|
|
|
|
|
|
- найди документ
|
|
|
|
|
|
- поиск файла
|
|
|
|
|
|
- ищи файл
|
|
|
|
|
|
- где файл
|
|
|
|
|
|
action: {type: file_search}
|
|
|
|
|
|
|
|
|
|
|
|
codegen:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- напиши код
|
|
|
|
|
|
- сгенерируй код
|
|
|
|
|
|
- набросай код
|
|
|
|
|
|
- сделай скрипт
|
|
|
|
|
|
- напиши скрипт
|
|
|
|
|
|
- сгенерируй скрипт
|
|
|
|
|
|
action: {type: groq_codegen}
|
|
|
|
|
|
|
|
|
|
|
|
read_screen:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- прочитай экран
|
|
|
|
|
|
- что на экране
|
|
|
|
|
|
- распознай текст с экрана
|
|
|
|
|
|
- что написано на экране
|
|
|
|
|
|
- сними текст с экрана
|
|
|
|
|
|
action: {type: ocr_screen}
|
2026-04-22 19:35:16 +03:00
|
|
|
|
|
feat: tier-1 PC tools parity — window mgmt, clipboard, notes, process killer, web search
Mirrors the new rust packs from the same iteration. Total commands in
commands.yaml is now 49 (was 33). yaml.safe_load + ast.parse both pass.
Window management (8 commands) — uses the existing `keys` action with
pyautogui hotkey strings: winleft+d (show_desktop), winleft+up/down
(maximize/minimize), winleft+left/right (snap left/right), alt+f4
(close_window), winleft+shift+m (restore_all), winleft+tab (task_view).
No new action type needed.
Clipboard read aloud — new clipboard_read action. Shells to
PowerShell Get-Clipboard, caps preview at 400 chars, speaks via the
existing tts.va_speak (which already handles recorder.stop/start).
Notes — new notes_add + notes_open actions. notes_add strips the
trigger phrase, appends "[YYYY-MM-DD HH:MM] body\n" to
%USERPROFILE%\Documents\jarvis-notes.txt, creates the dir if needed.
notes_open shells "cmd /c start" so .txt opens in the user-default
editor.
Process killer — new process_kill action. Strips the trigger ("убей
процесс"/"закрой программу"/etc.), looks up the remainder in the same
alias map as the rust version (хром→chrome, телега→telegram, спотифай
→spotify, едж/эдж/edge→msedge, дискорд→discord, стим→steam, обс→obs64,
проводник/блокнот/калькулятор/диспетчер задач, vs code→code, etc.),
appends .exe if needed, runs taskkill /F /IM, speaks success or
"не нашёл процесс N".
Web search — new websearch action with a `service` param. Bases:
google → https://www.google.com/search?q=
youtube → https://www.youtube.com/results?search_query=
wiki → https://ru.wikipedia.org/wiki/Special:Search?search=
yandex → https://yandex.ru/search/?text=
Strips trigger, urllib.parse.quote-s the rest, opens via webbrowser.open
(respects the user'\''s default browser; config.BROWSER_PATHS only kicks in
for the older url-action commands).
Portability: USERPROFILE used for notes path, no other hardcoded paths.
2026-05-15 11:27:19 +03:00
|
|
|
|
# Window management via pyautogui hotkeys
|
|
|
|
|
|
show_desktop:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- покажи рабочий стол
|
|
|
|
|
|
- свернуть всё
|
|
|
|
|
|
- сверни все окна
|
|
|
|
|
|
- покажи десктоп
|
|
|
|
|
|
action: {type: keys, sequence: 'winleft+d'}
|
|
|
|
|
|
|
|
|
|
|
|
maximize_window:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- разверни окно
|
|
|
|
|
|
- развернуть окно
|
|
|
|
|
|
- на весь экран
|
|
|
|
|
|
- раскрой окно
|
|
|
|
|
|
action: {type: keys, sequence: 'winleft+up'}
|
|
|
|
|
|
|
|
|
|
|
|
minimize_window:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- сверни окно
|
|
|
|
|
|
- свернуть окно
|
|
|
|
|
|
- убери окно
|
|
|
|
|
|
action: {type: keys, sequence: 'winleft+down'}
|
|
|
|
|
|
|
|
|
|
|
|
snap_left:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- окно влево
|
|
|
|
|
|
- сдвинь влево
|
|
|
|
|
|
- прижми влево
|
|
|
|
|
|
action: {type: keys, sequence: 'winleft+left'}
|
|
|
|
|
|
|
|
|
|
|
|
snap_right:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- окно вправо
|
|
|
|
|
|
- сдвинь вправо
|
|
|
|
|
|
- прижми вправо
|
|
|
|
|
|
action: {type: keys, sequence: 'winleft+right'}
|
|
|
|
|
|
|
|
|
|
|
|
close_window:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- закрой окно
|
|
|
|
|
|
- закрой вкладку
|
|
|
|
|
|
- закрой текущее
|
|
|
|
|
|
action: {type: keys, sequence: 'alt+f4'}
|
|
|
|
|
|
|
|
|
|
|
|
restore_all:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- восстанови окна
|
|
|
|
|
|
- верни окна
|
|
|
|
|
|
- разверни окна
|
|
|
|
|
|
action: {type: keys, sequence: 'winleft+shift+m'}
|
|
|
|
|
|
|
|
|
|
|
|
task_view:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой все окна
|
|
|
|
|
|
- обзор окон
|
|
|
|
|
|
- таск вью
|
|
|
|
|
|
- покажи все окна
|
|
|
|
|
|
action: {type: keys, sequence: 'winleft+tab'}
|
|
|
|
|
|
|
|
|
|
|
|
# Clipboard read aloud
|
|
|
|
|
|
read_clipboard:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- прочитай буфер
|
|
|
|
|
|
- что в буфере
|
|
|
|
|
|
- прочитай из буфера
|
|
|
|
|
|
- озвучь буфер
|
|
|
|
|
|
action: {type: clipboard_read}
|
|
|
|
|
|
|
|
|
|
|
|
# Notes
|
|
|
|
|
|
add_note:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- запиши
|
|
|
|
|
|
- запиши заметку
|
|
|
|
|
|
- запиши идею
|
|
|
|
|
|
- запомни
|
|
|
|
|
|
- запомни идею
|
|
|
|
|
|
- сделай заметку
|
|
|
|
|
|
action: {type: notes_add}
|
|
|
|
|
|
|
|
|
|
|
|
open_notes:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- покажи заметки
|
|
|
|
|
|
- открой заметки
|
|
|
|
|
|
- что я записал
|
|
|
|
|
|
action: {type: notes_open}
|
|
|
|
|
|
|
|
|
|
|
|
# Process killer
|
|
|
|
|
|
kill_process:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- убей процесс
|
|
|
|
|
|
- закрой программу
|
|
|
|
|
|
- завершить процесс
|
|
|
|
|
|
- выруби процесс
|
|
|
|
|
|
action: {type: process_kill}
|
|
|
|
|
|
|
|
|
|
|
|
# Web search shortcuts
|
|
|
|
|
|
search_google:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- загугли
|
|
|
|
|
|
- поиск в гугл
|
|
|
|
|
|
- поищи в гугл
|
|
|
|
|
|
- найди в гугл
|
|
|
|
|
|
- ищи в гугл
|
|
|
|
|
|
action: {type: websearch, service: google}
|
|
|
|
|
|
|
|
|
|
|
|
search_youtube:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- найди на ютубе
|
|
|
|
|
|
- поиск на ютубе
|
|
|
|
|
|
- ищи на ютубе
|
|
|
|
|
|
- ютуб поиск
|
|
|
|
|
|
action: {type: websearch, service: youtube}
|
|
|
|
|
|
|
|
|
|
|
|
search_wiki:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- найди в википедии
|
|
|
|
|
|
- поиск в википедии
|
|
|
|
|
|
- википедия
|
|
|
|
|
|
- вики поиск
|
|
|
|
|
|
action: {type: websearch, service: wiki}
|
|
|
|
|
|
|
|
|
|
|
|
search_yandex:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- поищи в яндекс
|
|
|
|
|
|
- найди в яндекс
|
|
|
|
|
|
- яндекс поиск
|
|
|
|
|
|
- пробей в яндекс
|
|
|
|
|
|
action: {type: websearch, service: yandex}
|
|
|
|
|
|
|
feat: tier-1 parity — translate, math, theme toggle, projects, sound panel (56 commands total)
Mirrors the rust packs from the same iteration. yaml.safe_load + ast.parse
both pass.
main.py — six new action handlers + a _speak_in_lang helper:
+ do_translate: picks target language from "переведи на X" / "translate to X"
triggers, defaults to English, sends to Groq with strict "translation only"
prompt, drops to clipboard, speaks via SAPI in matching ISO voice
+ do_math_eval: strips trigger, Groq at temp=0.0 max_tokens=64,
short-circuits on "нет" sentinel for non-math
+ do_theme_set: writes AppsUseLightTheme + SystemUsesLightTheme via
Set-ItemProperty under HKCU\...\Themes\Personalize, action param
mode: dark|light
+ do_open_project / do_list_projects: reads/creates
%USERPROFILE%\Documents\jarvis-projects.json (a flat list of
{name, path}), exact-match → substring-match, opens in VS Code if
code.cmd on PATH else Explorer. First call writes a sample config
pointing under USERPROFILE so it works on any host.
+ do_open_sound_panel: rundll32 mmsys.cpl,,1 — Recording tab
commands.yaml — 8 new entries:
+ translate, math_eval
+ theme_dark, theme_light (action params mode:dark/light)
+ open_project, list_projects
+ open_sound_panel
SAPI voice selection iterates GetInstalledVoices() and picks first
matching TwoLetterISOLanguageName — Russian phrases sound Russian,
English/German/etc. sound right too, falls back to default if no
matching voice is installed.
Total commands: 56 (was 49).
2026-05-15 12:06:44 +03:00
|
|
|
|
translate:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- переведи на английский
|
|
|
|
|
|
- переведи на русский
|
|
|
|
|
|
- переведи на украинский
|
|
|
|
|
|
- переведи на немецкий
|
|
|
|
|
|
- переведи на французский
|
|
|
|
|
|
- переведи на испанский
|
|
|
|
|
|
- переведи на китайский
|
|
|
|
|
|
- переведи на японский
|
|
|
|
|
|
- переведи
|
|
|
|
|
|
- как по английски
|
|
|
|
|
|
- как по русски
|
|
|
|
|
|
action: {type: translate}
|
|
|
|
|
|
|
|
|
|
|
|
math_eval:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- посчитай
|
|
|
|
|
|
- сколько будет
|
|
|
|
|
|
- вычисли
|
|
|
|
|
|
- реши
|
|
|
|
|
|
- сколько это
|
|
|
|
|
|
action: {type: math_eval}
|
|
|
|
|
|
|
|
|
|
|
|
theme_dark:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- тёмная тема
|
|
|
|
|
|
- темная тема
|
|
|
|
|
|
- включи тёмную тему
|
|
|
|
|
|
- тёмный режим
|
|
|
|
|
|
- темный режим
|
|
|
|
|
|
action: {type: theme_set, mode: dark}
|
|
|
|
|
|
|
|
|
|
|
|
theme_light:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- светлая тема
|
|
|
|
|
|
- включи светлую тему
|
|
|
|
|
|
- светлый режим
|
|
|
|
|
|
action: {type: theme_set, mode: light}
|
|
|
|
|
|
|
|
|
|
|
|
open_project:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой проект
|
|
|
|
|
|
- запусти проект
|
|
|
|
|
|
- открой папку проекта
|
|
|
|
|
|
action: {type: open_project}
|
|
|
|
|
|
|
|
|
|
|
|
list_projects:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- какие у меня проекты
|
|
|
|
|
|
- список проектов
|
|
|
|
|
|
- покажи проекты
|
|
|
|
|
|
action: {type: list_projects}
|
|
|
|
|
|
|
|
|
|
|
|
open_sound_panel:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- открой настройки звука
|
|
|
|
|
|
- панель звука
|
|
|
|
|
|
- настройки микрофона
|
|
|
|
|
|
- управление звуком
|
|
|
|
|
|
action: {type: open_sound_panel}
|
|
|
|
|
|
|
2026-04-22 19:35:16 +03:00
|
|
|
|
thanks:
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- спасибо
|
|
|
|
|
|
- молодец
|
|
|
|
|
|
- респект
|
|
|
|
|
|
- ты супер
|
|
|
|
|
|
- отличная работа
|
|
|
|
|
|
- ты крут
|
|
|
|
|
|
- ты большой молодец
|
|
|
|
|
|
- ты реально крут
|
|
|
|
|
|
- ты афигенный
|
|
|
|
|
|
action: {type: play_sound, name: thanks}
|
|
|
|
|
|
|
2023-04-16 16:59:18 +05:00
|
|
|
|
stupid:
|
2026-04-22 19:35:16 +03:00
|
|
|
|
phrases:
|
|
|
|
|
|
- ты дурак
|
|
|
|
|
|
- ты дебил
|
|
|
|
|
|
- ты глупый
|
|
|
|
|
|
- ты тупой
|
|
|
|
|
|
action: {type: play_sound, name: stupid}
|
|
|
|
|
|
|
|
|
|
|
|
'off':
|
|
|
|
|
|
phrases:
|
|
|
|
|
|
- выключись
|
|
|
|
|
|
- вырубись
|
|
|
|
|
|
- завершить работу
|
|
|
|
|
|
- закройся
|
|
|
|
|
|
- отключись
|
|
|
|
|
|
- заверши свою работу
|
|
|
|
|
|
- на сегодня хватит
|
|
|
|
|
|
- выгрузи себя из памяти
|
|
|
|
|
|
- ты мне надоел
|
|
|
|
|
|
- пора спать
|
|
|
|
|
|
action:
|
|
|
|
|
|
type: multi
|
|
|
|
|
|
steps:
|
|
|
|
|
|
- {type: play_sound, name: "off"}
|
|
|
|
|
|
- {type: system, op: exit}
|