J.A.R.V.I.S-py/commands.yaml

1036 lines
26 KiB
YAML
Raw Normal View History

open_browser:
phrases:
- открой браузер
- запусти браузер
- открой яндекс
- яндекс браузер
action: {type: url, href: "about:blank", browser: "yandex"}
open_youtube:
phrases:
- открой ютуб
- ютуб
- запусти ютуб
action: {type: url, href: "https://www.youtube.com", browser: "yandex"}
open_google:
phrases:
- открой гугл
- гугл
- запусти гугл
action: {type: url, href: "https://www.google.com", browser: "yandex"}
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:
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'}
2023-04-16 16:59:18 +05:00
music_off:
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'}
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'}
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'}
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:
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'}
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:
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}
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}
set_reminder:
phrases:
- напомни через
- напомни мне через
- поставь напоминание через
- установи таймер на
- таймер на
action: {type: set_reminder}
today:
phrases:
- какой сегодня день
- какое сегодня число
- сегодня какое число
- что сегодня
action: {type: date_query, offset: 0}
tomorrow:
phrases:
- какой день завтра
- что завтра
- завтра какое число
- какое число завтра
action: {type: date_query, offset: 1}
yesterday:
phrases:
- какой был вчера день
- что было вчера
- вчера какое число было
action: {type: date_query, offset: -1}
type_text:
phrases:
- напечатай
- набери текст
- введи текст
- впиши
action: {type: type_text}
coin_flip:
phrases:
- подбрось монетку
- брось монетку
- орёл или решка
- орел или решка
action: {type: dice, kind: coin}
roll_dice:
phrases:
- брось кубик
- подбрось кубик
- кинь кубик
action: {type: dice, kind: dice}
random_number:
phrases:
- случайное число
- выбери случайное число
- рандомное число
action: {type: dice, kind: random}
stopwatch_start:
phrases:
- засеки время
- запусти секундомер
- старт секундомер
- включи секундомер
action: {type: stopwatch, op: start}
stopwatch_check:
phrases:
- сколько прошло
- сколько времени прошло
- проверь секундомер
action: {type: stopwatch, op: check}
stopwatch_stop:
phrases:
- стоп секундомер
- останови секундомер
- выключи секундомер
action: {type: stopwatch, op: stop}
feat: parity — news, currency, crypto, fun, wiki, power, help (82 commands) Mirrors the rust analog-inspired tier-2 packs. yaml + ast smoke pass. 56 → 82 commands (+26 yaml entries; 14 of them are power/fun/wiki/ news/etc. permutations). main.py — 7 new action handlers, all built on stdlib urllib.request (no new dep). Helper _http_get() with User-Agent header so RSS feeds that 403 default UAs go through. + do_news: pulls RSS (default Lenta.ru), extracts <title> via regex, skips channel title (idx 0), takes 5, sends to Groq for a 2-3 sentence summary at temp 0.4. Falls back to reading first 3 headlines verbatim if no token. + do_currency_rate: cbr-xml-daily.ru daily_json.js. Recognises USD/EUR/CNY/GBP/JPY/KZT in the phrase, computes value/nominal, diffs against Previous, speaks Russian with direction. + do_crypto_price: CoinGecko simple/price for BTC/ETH/SOL/DOGE/TON with 24h change, picked by phrase keywords. + do_fun_ask: joke / fact / quote / compliment via Groq at temp 1.0 with per-kind system prompts, random seed in user message. + do_wiki_lookup: ru.wikipedia opensearch → page summary, optional Groq retell when extract > 350 chars. + do_power: dispatch table for shutdown / restart / sleep / hibernate / logoff / cancel — runs shutdown.exe /s|/r|/h|/l|/a or rundll32 powrprof,SetSuspendState. 30-second grace on shutdown and restart with /c message so "отмени выключение" works. + do_help_commands: sorts VA_CMD_LIST.keys(), speaks first 12 + total, full list to clipboard. commands.yaml +26 entries: news_headlines, currency_rate, crypto_price, joke / fact / quote / compliment (action:fun_ask, kind: ...), wiki_lookup, shutdown_pc / restart_pc / sleep_pc / hibernate_pc / logoff_user / cancel_shutdown (action:power, op: ...), help. Inspired by what mainstream voice assistants (Siri/Alexa/Алиса/ Cortana) ship by default + power-user utilities (shutdown, window/process control).
2026-05-15 12:43:26 +03:00
news_headlines:
phrases:
- что нового
- новости
- что в мире
- последние новости
- расскажи новости
- топ новостей
action: {type: news}
currency_rate:
phrases:
- курс доллара
- курс евро
- сколько стоит доллар
- сколько стоит евро
- курс юаня
- курс валют
- что с долларом
- что с евро
action: {type: currency_rate}
crypto_price:
phrases:
- сколько биткоин
- цена биткоина
- курс биткоина
- цена эфира
- сколько эфир
- цена крипты
- цена соланы
action: {type: crypto_price}
joke:
phrases:
- расскажи шутку
- пошути
- анекдот
- рассмеши меня
action: {type: fun_ask, kind: joke}
fact:
phrases:
- расскажи факт
- интересный факт
- поделись фактом
action: {type: fun_ask, kind: fact}
quote:
phrases:
- вдохнови меня
- цитата дня
- мотивируй
- процитируй кого-нибудь
action: {type: fun_ask, kind: quote}
compliment:
phrases:
- сделай комплимент
- похвали меня
action: {type: fun_ask, kind: compliment}
wiki_lookup:
phrases:
- что такое
- кто такой
- кто такая
- расскажи про
- википедия про
- найди в википедии про
action: {type: wiki_lookup}
shutdown_pc:
phrases:
- выключи компьютер
- выключи пк
- выключи комп
action: {type: power, op: shutdown}
restart_pc:
phrases:
- перезагрузи компьютер
- перезагрузи пк
- ребутни
- ребут
action: {type: power, op: restart}
sleep_pc:
phrases:
- усыпи компьютер
- усыпи пк
- режим сна
- перейди в сон
action: {type: power, op: sleep}
hibernate_pc:
phrases:
- гибернация
- переведи в гибернацию
- режим гибернации
action: {type: power, op: hibernate}
logoff_user:
phrases:
- выйди из системы
- разлогинь
- выйди из учётки
- сеанс закончи
action: {type: power, op: logoff}
cancel_shutdown:
phrases:
- отмени выключение
- отмени ребут
- отмени перезагрузку
- стой не выключай
action: {type: power, op: cancel}
help:
phrases:
- что ты умеешь
- какие команды
- список команд
- помощь
- помоги
- что можешь
action: {type: help_commands}
launch_game:
phrases:
- запусти игру
- включи игру
- поиграем
- хочу поиграть
- запусти доту
- включи кс
- включи фортнайт
action: {type: launch_game}
list_games:
phrases:
- какие у меня игры
- список игр
- покажи игры
action: {type: list_games}
mouse_left_click:
phrases:
- клик
- кликни
- нажми мышкой
action: {type: mouse, op: left}
mouse_right_click:
phrases:
- правый клик
- клик правой
- правой кнопкой
action: {type: mouse, op: right}
mouse_double_click:
phrases:
- двойной клик
- дабл клик
- двойное нажатие
action: {type: mouse, op: double}
mouse_scroll_down:
phrases:
- промотай вниз
- прокрути вниз
action: {type: mouse, op: scroll_down}
mouse_scroll_up:
phrases:
- промотай вверх
- прокрути вверх
action: {type: mouse, op: scroll_up}
random_choice:
phrases:
- выбери из
- выбери
- решай за меня
- выбрать
action: {type: random_choice}
brightness_up:
phrases:
- ярче
- сделай ярче
- увеличь яркость
- поярче
action: {type: brightness, op: up}
brightness_down:
phrases:
- темнее
- сделай темнее
- уменьши яркость
- потемнее
action: {type: brightness, op: down}
brightness_max:
phrases:
- максимальная яркость
- яркость на максимум
action: {type: brightness, op: max}
brightness_min:
phrases:
- минимальная яркость
- яркость на минимум
action: {type: brightness, op: min}
switch_to_window:
phrases:
- переключись на
- переключи на
- активируй окно
- покажи окно
- перейди в
action: {type: window_switch}
spell_out:
phrases:
- произнеси по буквам
- продиктуй по буквам
- произнеси буквы
- по буквам
action: {type: spell_out}
open_wifi_settings:
phrases:
- настройки wifi
- настройки вайфай
- wifi настройки
- сеть
action: {type: network_settings, section: wifi}
open_bluetooth_settings:
phrases:
- настройки блютуз
- блютуз
action: {type: network_settings, section: bluetooth}
my_ip:
phrases:
- мой ай пи
- мой ip
- какой у меня айпи
- айпишник
action: {type: my_ip}
summarize_selection:
phrases:
- суммируй
- перескажи выделенное
- кратко перескажи
- о чём это
- что выделил
- перескажи это
action: {type: summarize_selection}
thanks:
phrases:
- спасибо
- молодец
- респект
- ты супер
- отличная работа
- ты крут
- ты большой молодец
- ты реально крут
- ты афигенный
action: {type: play_sound, name: thanks}
2023-04-16 16:59:18 +05:00
stupid:
phrases:
- ты дурак
- ты дебил
- ты глупый
- ты тупой
action: {type: play_sound, name: stupid}
'off':
phrases:
- выключись
- вырубись
- завершить работу
- закройся
- отключись
- заверши свою работу
- на сегодня хватит
- выгрузи себя из памяти
- ты мне надоел
- пора спать
action:
type: multi
steps:
- {type: play_sound, name: "off"}
- {type: system, op: exit}
feat: extensions module + 19 new commands (100 → 119) Mirror of new packs from the rust fork. Self-contained `extensions.py` with new do_* handlers, registered via 'set_speak' / 'set_clipboard_fn' callbacks from main.py. Wiring (main.py) - `import extensions` at top. - `extensions.set_speak(_speak)` + `extensions.set_clipboard_fn(_set_clipboard)` right after _set_clipboard is defined. - Added 15 new action-type dispatches in run_action. extensions.py (new, ~360 lines) Action types: lock_workstation → rundll32 user32.dll,LockWorkStation screenshot {mode} → clipboard via System.Windows.Forms.Clipboard.SetImage OR file → ~/Pictures/Screenshots/jarvis-<ts>.png disk_free / disk_list → PowerShell Get-PSDrive coin_flip / uuid_gen / password_gen (length 6..64, copies to clipboard, speaks length only — never echoes the password) ssl_check {domain} → PowerShell TCP+SslStream→X509Certificate2 expiry wifi_ssid → netsh wlan show interfaces parser (ru + en field names) public_ip → urllib request to api.ipify.org unit_convert {mode: length|weight|temperature|speed} Russian-grammar pluralisation (фут/фута/футов). date_math {mode: days_until|day_of_week} Recognises Новый год, Рождество, 8 марта, 9 мая + "до N <месяц>". echo_repeat / self_ping — debug commands interesting_fact → Groq LLM (requires GROQ_TOKEN) commands.yaml — 19 new entries: lock_workstation, screenshot_clipboard, screenshot_file, disk_free, disk_list, coin_flip, password_gen, uuid_gen, ssl_check, wifi_ssid, public_ip, convert_length, convert_weight, convert_temperature, convert_speed, days_until, day_of_week, echo_repeat, self_ping, interesting_fact. Tests: python syntax check + yaml.safe_load both pass. Total commands: 119. NOT YET mirrored from rust (would require deeper rework): memory_pack / profile_switch / scheduler / macros / vision / codebase_qa / github_pr / llm_switch / llm_context / media_keys / mood_log / pomodoro / habit_nudge / daily_briefing / quick_search / diagnostics / sleep_timer / wikipedia (the rewritten one) / intro / mailto / generators (UUID, coin, password ARE included — others can follow). The reason these weren't mirrored: they need new state files (memory.json, profiles.json, schedule.json, macros.json) and background threads (scheduler tick). Doable as a follow-up but out of scope here.
2026-05-15 23:51:13 +03:00
# ─── Ported from rust fork (2026-05-15) ───────────────────────────────────
lock_workstation:
phrases:
- заблокируй компьютер
- заблокируй пк
- заблокируй комп
- заблокируй экран
- запри компьютер
action: {type: lock_workstation}
screenshot_clipboard:
phrases:
- сделай скриншот
- сделай скрин
- скопируй экран
- скриншот в буфер
- захвати экран
action: {type: screenshot, mode: clipboard}
screenshot_file:
phrases:
- сохрани скриншот
- сохрани скрин
- скриншот в файл
- сохрани экран
action: {type: screenshot, mode: file}
disk_free:
phrases:
- сколько свободного места
- сколько места на диске
- сколько свободно на диске
- место на диске
- свободное место
action: {type: disk_free}
disk_list:
phrases:
- какие у меня диски
- список дисков
- перечень дисков
action: {type: disk_list}
coin_flip:
phrases:
- подбрось монету
- брось монетку
- орёл или решка
- монетка
action: {type: coin_flip}
password_gen:
phrases:
- сгенерируй пароль
- придумай пароль
- сгенерируй надёжный пароль
action: {type: password_gen}
uuid_gen:
phrases:
- сгенерируй uuid
- сгенерируй юид
- юид
- уникальный идентификатор
action: {type: uuid_gen}
ssl_check:
phrases:
- проверь сертификат
- когда истекает сертификат
- проверь tls
- проверь ssl
- сертификат сайта
action: {type: ssl_check}
wifi_ssid:
phrases:
- к какой сети я подключен
- какой wifi
- какой вайфай
- какая сеть
- имя сети
action: {type: wifi_ssid}
public_ip:
phrases:
- мой внешний ip
- публичный ip
- внешний айпи
- какой у меня внешний
action: {type: public_ip}
convert_length:
phrases:
- переведи метры в футы
- переведи футы в метры
- сколько метров
- сколько футов
- сколько километров
- сколько миль
- переведи в метры
- переведи в футы
- переведи в км
- переведи в мили
action: {type: unit_convert, mode: length}
convert_weight:
phrases:
- переведи килограммы в фунты
- переведи фунты в килограммы
- сколько кг в фунтах
- сколько фунтов
- сколько килограммов
action: {type: unit_convert, mode: weight}
convert_temperature:
phrases:
- переведи цельсий в фаренгейт
- переведи фаренгейт в цельсий
- сколько по фаренгейту
- сколько по цельсию
action: {type: unit_convert, mode: temperature}
convert_speed:
phrases:
- переведи километры в час в мили в час
- переведи в кмч
- переведи в мили в час
- сколько миль в час
- сколько км в час
action: {type: unit_convert, mode: speed}
days_until:
phrases:
- сколько дней до
- сколько до нового года
- сколько до
- до нового года
action: {type: date_math, mode: days_until}
day_of_week:
phrases:
- какой сегодня день недели
- какой день недели
- сегодня какой
action: {type: date_math, mode: day_of_week}
echo_repeat:
phrases:
- повтори за мной
- скажи как я
- эхо
- проверка эхо
action: {type: echo_repeat}
self_ping:
phrases:
- ты тут
- ты слышишь
- ты меня слышишь
- пинг
- ты живой
- ты на месте
- проверка связи
action: {type: self_ping}
interesting_fact:
phrases:
- расскажи интересный факт
- интересный факт о
- интересный факт про
- удиви меня
- интересный факт
- расскажи факт
action: {type: interesting_fact}