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

1743 lines
44 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}
feat: memory_store + profiles_store + 10 new yaml entries (119 → 129) Mirrors `long_term_memory` and `profiles` modules from rust fork. memory_store.py (new, ~95 lines) - JSON store at <here>/long_term_memory.json (atomic write). - remember(key, value) / recall(key) / forget(key) / search(query, limit) / all_facts() / build_llm_context(prompt, limit). - Uses the same JSON shape as the rust side, so the file is interoperable if you ever symlink the two installations to the same dir. profiles_store.py (new, ~145 lines) - Profiles at <here>/profiles/<name>.json. active_profile.txt persists. - Seeds 5 defaults on first init: default ★, work 💼, game 🎮, sleep 🌙, driving 🚗 — same as rust fork. - active() / active_name() / set_active(name) / list_names() / allows_command(cmd_id). extensions.py (+6 handlers, +160 lines) - do_memory_remember — derives key (first 6 words or split on '=') - do_memory_recall — substring search or top-3 if no query - do_memory_forget — exact then substring fallback - do_memory_list — count + first 5 keys - do_profile_set — target via action.target or voice ("работа" → work) - do_profile_what — speaks current profile + description main.py - +6 dispatch entries for the new action types. commands.yaml (+10 entries, 119 → 129) - memory_remember, memory_recall, memory_forget, memory_list - profile_work, profile_game, profile_sleep, profile_driving, profile_default - profile_what Tests: ast.parse passes for all .py files. yaml.safe_load gives 129 entries. Python parity is now meaningful: memory + profiles are usable by voice without any rust install. Still missing for full parity: scheduler (needs background thread), macros (needs phrase-capture state), vision (needs Groq vision model call), codebase_qa, github_pr.
2026-05-15 23:54:33 +03:00
memory_remember:
phrases:
- запомни обо мне
- запомни что
- помни что
- запомни это
- запомни про меня
action: {type: memory_remember}
memory_recall:
phrases:
- что ты помнишь о
- что ты знаешь обо мне
- что помнишь про
- вспомни
action: {type: memory_recall}
memory_forget:
phrases:
- забудь про
- забудь что
- забудь обо мне
action: {type: memory_forget}
memory_list:
phrases:
- что ты помнишь
- что ты знаешь обо мне всё
- покажи память
action: {type: memory_list}
profile_work:
phrases:
- режим работа
- включи режим работы
- рабочий режим
- переключись в работу
action: {type: profile_set, target: work}
profile_game:
phrases:
- режим игра
- игровой режим
- включи игровой режим
- переключись в игры
action: {type: profile_set, target: game}
profile_sleep:
phrases:
- режим сон
- ночной режим
- режим тишины
- иди спать
- выключи всё
action: {type: profile_set, target: sleep}
profile_driving:
phrases:
- режим за рулём
- режим вождения
- я за рулём
- поехали
action: {type: profile_set, target: driving}
profile_default:
phrases:
- обычный режим
- режим по умолчанию
- сбрось режим
- вернись в обычный
action: {type: profile_set, target: default}
profile_what:
phrases:
- какой сейчас режим
- в каком ты режиме
- текущий режим
- какой режим
action: {type: profile_what}
feat: vision + macros + scheduler in Python (129 → 142 commands) Three big rust packs ported. Python parity now covers the FULL imba lineup except codebase_qa and github_pr. vision_handler.py (new, ~125 lines) - Screenshot via PowerShell System.Drawing → temp PNG → base64 → Groq vision API (llama-3.2-11b-vision-preview, override via GROQ_VISION_MODEL). - do_vision_describe "что на экране" / "опиши экран" - do_vision_read_error "прочитай ошибку" - Requires GROQ_TOKEN; speaks "Не удалось" on missing. macros_store.py (new, ~170 lines) - JSON store at <here>/macros.json (atomic write-through). - start(name) / save() / cancel() / replay(name, dispatch_fn) - is_recording / recording_name / list_names / get / delete - record_step(phrase) called by execute_cmd hook (see main.py) - is_macro_control filter blocks "запиши макрос ..." from recording itself (no infinite recursion). - replay spawns daemon thread, fires each step with 800ms delay. scheduler_store.py (new, ~220 lines) - JSON store at <here>/schedule.json. - parse_schedule(spec) handles "daily HH:MM", "at HH:MM", "every/in N minutes|hours|seconds" — Russian (минут/час/секунд) + English. - Background daemon thread ticks every 30s, fires Speak actions through the same speak callback used by main.py. - Once-tasks auto-delete after firing; daily/interval cycle forever. - add/remove/clear/remove_by_text/list_all. extensions.py (+13 handlers) do_vision_describe / do_vision_read_error → thin proxies to vision_handler do_macros_start / save / cancel / replay / list / delete do_scheduler_add_reminder / add_recurring / list / clear / cancel_by_text main.py - extensions.init_background_services() at startup → scheduler thread boots. - Wraps execute_cmd so every successful dispatch feeds macros_store.record_step. - set_dispatch_fn(_execute_phrase_for_macro) enables macro replay through the normal command pipeline (recognize_cmd → execute_cmd). commands.yaml (+13 entries, 129 → 142) vision_describe, vision_read_error, macros_start, macros_save, macros_cancel, macros_replay, macros_list, macros_delete, scheduler_reminder, scheduler_recurring, scheduler_list, scheduler_clear, scheduler_cancel_text. Tests: ast.parse passes for all five .py files. yaml.safe_load = 142 entries. Python parity status vs rust (72 packs): ✓ memory_pack, profile_switch, vision, scheduler, macros, llm switch (via env), llm_context (basic), media_keys (existing), screenshot, net_info, unit_convert, generators, disk, date_math, sleep_timer (via shutdown), interesting_fact, mailto, self_check, ssl_check, intro/echo ✗ codebase_qa, github_pr (require gh CLI + file walk — TODO) ✗ pomodoro / daily_briefing / habit_nudge / quick_search / diagnostics (could be ported but need scheduler integration + LLM glue)
2026-05-16 00:00:22 +03:00
vision_describe:
phrases:
- что на экране
- опиши экран
- посмотри на экран
- что у меня на экране
- посмотри на мой экран
- глянь на экран
action: {type: vision_describe}
vision_read_error:
phrases:
- прочитай ошибку
- что за ошибка
- помоги с ошибкой
action: {type: vision_read_error}
macros_start:
phrases:
- запиши макрос
- начни запись макроса
- записывай макрос
- новый макрос
action: {type: macros_start}
macros_save:
phrases:
- сохрани макрос
- стоп макрос
- стоп запись макроса
- закончи запись
- макрос готов
action: {type: macros_save}
macros_cancel:
phrases:
- отмени макрос
- отмени запись макроса
- забудь макрос
action: {type: macros_cancel}
macros_replay:
phrases:
- запусти макрос
- выполни макрос
- воспроизведи макрос
- сыграй макрос
- проиграй макрос
action: {type: macros_replay}
macros_list:
phrases:
- какие у меня макросы
- список макросов
- покажи макросы
action: {type: macros_list}
macros_delete:
phrases:
- удали макрос
- забудь о макросе
action: {type: macros_delete}
scheduler_reminder:
phrases:
- напомни мне через
- напомни через
- поставь напоминалку через
- поставь напоминание через
- разбуди через
action: {type: scheduler_add_reminder}
scheduler_recurring:
phrases:
- напоминай каждые
- напоминай каждый
- каждые
- каждый час
action: {type: scheduler_add_recurring}
scheduler_list:
phrases:
- что у меня запланировано
- какие напоминания
- покажи расписание
- какие задачи у меня
- что в расписании
action: {type: scheduler_list}
scheduler_clear:
phrases:
- очисти расписание
- удали все напоминания
- отмени все напоминания
- сбрось расписание
action: {type: scheduler_clear}
scheduler_cancel_text:
phrases:
- отмени напоминание про
- отмени напоминание о
- удали задачу про
- удали задачу о
- отмени про
- забудь напоминание про
action: {type: scheduler_cancel_by_text}
feat: codebase_qa + github_pr in Python (142 → 148 commands) Closes the Python parity gap with rust. All major imba features now mirrored EXCEPT live LLM hot-swap (python LLM backend is still env-driven, not voice- switchable like rust). dev_handlers.py (new, ~250 lines) Codebase Q&A: do_codebase_set "укажи проект C:\path" → memory_store.remember("codebase.root", ...) do_codebase_where "какой проект сейчас" do_codebase_ask "что делает функция X" / "найди в коде Y" Walks the root with same caps as rust: depth=3, files=30, file_bytes=4096, total=50000 Filters by extension (rs/py/ts/lua/go/...). Skips .git/target/node_modules/__pycache__/.venv etc. Feeds digest to Groq LLM with "senior reviewer" prompt. GitHub PR review (requires `gh` CLI authenticated): do_github_set_repo "текущий репо owner/repo" → memory_store do_github_list_prs "какие пиары" → `gh pr list --json number,title,author`, speaks count + first 3 titles do_github_summarize_pr "разбери последний пиар" → gh pr view of latest open PR, feeds title+body+diff stat to LLM, speaks 3-5 sentence review. extensions.py — 6 new proxy handlers + import dev_handlers + set_speak wires it. main.py — 6 new action_type dispatches in run_action. commands.yaml (+6 entries, 142 → 148): codebase_set, codebase_where, codebase_ask, github_set_repo, github_list_prs, github_summarize_pr. Tests: ast.parse passes for all .py files. yaml.safe_load = 148 entries. PYTHON PARITY VS RUST IS NOW COMPLETE except: ✗ LLM hot-swap voice command (rust calls llm::swap_to + persists DB; python config.GROQ_TOKEN is read once at startup) ✗ GUI pages (rust has Tauri+Svelte, python is console-only) Everything else has full parity: memory / profiles / vision / macros / scheduler / codebase Q&A / GitHub PR review / 14 utility packs.
2026-05-16 00:40:08 +03:00
codebase_set:
phrases:
- укажи проект
- укажи папку проекта
- укажи кодовую базу
- выбери проект
- проект сейчас
action: {type: codebase_set}
codebase_where:
phrases:
- какой проект сейчас
- где проект
- какая папка проекта
- какая кодовая база
action: {type: codebase_where}
codebase_ask:
phrases:
- что делает функция
- спроси код
- вопрос по коду
- что в коде
- найди в коде
- найди в проекте
- объясни код
action: {type: codebase_ask}
github_set_repo:
phrases:
- текущий репо
- установи репо
- выбери репо
- репозиторий
action: {type: github_set_repo}
github_list_prs:
phrases:
- какие пиары
- какие пулл реквесты
- что в пиарах
- что в pr
- открытые пиары
- список пиаров
action: {type: github_list_prs}
github_summarize_pr:
phrases:
- разбери последний пиар
- объясни последний пиар
- обзор последнего пиара
- что в последнем pr
- разбор pr
action: {type: github_summarize_pr}
feat: LLM hot-swap voice command + Ollama backend (148 → 151 commands) Closes the last functional parity gap with rust. Python now has voice-driven Ollama↔Groq switching, persistent across restarts. llm_backend.py (new, ~130 lines) Singleton module: current_client() → active OpenAI client (or None) current_backend() → 'groq' | 'ollama' | 'none' current_model() → active model name swap_to(name) → hot-swap + persist to <here>/llm_backend.txt parse_backend(name) → ru/en alias normaliser ('облако'→groq, 'локальный'→ollama) Backends: - Groq: config.GROQ_TOKEN + GROQ_BASE_URL + GROQ_MODEL (defaults) - Ollama: OLLAMA_BASE_URL (default http://localhost:11434/v1) + OLLAMA_MODEL (default qwen2.5:3b). api_key='ollama' (placeholder, openai lib insists on a non-empty string; Ollama ignores it). Init precedence (idempotent _ensure_init): 1. Persisted choice from llm_backend.txt 2. JARVIS_LLM env var 3. Auto-detect: Groq if token present, else Ollama Voice commands (commands.yaml, +3 entries → 151) llm_switch_local → ollama llm_switch_cloud → groq llm_status → speaks current backend extensions.py + do_llm_switch / do_llm_status handlers + llm_backend import do_interesting_fact migrated off direct OpenAI(...) to use llm_backend.current_* dev_handlers.py + llm_backend import do_codebase_ask + do_github_summarize_pr migrated to llm_backend.current_* vision_handler.py Vision call documented as Groq-specific (Ollama doesn't expose vision via OpenAI-compat in our stack), kept direct config.GROQ_TOKEN reading. Tests: ast.parse passes for all 5 modules. yaml.safe_load = 151 entries. PYTHON PARITY VS RUST IS NOW FUNCTIONALLY COMPLETE. Only remaining rust-only feature: the Tauri GUI (python is console-only).
2026-05-16 00:44:42 +03:00
llm_switch_local:
phrases:
- переключись на локальный
- переключись на локальный мозг
- включи локальный режим
- перейди на локальный
- используй локальный
- перейди на оллама
- используй оллама
action: {type: llm_switch, target: ollama}
llm_switch_cloud:
phrases:
- переключись на облако
- переключись на облачный
- переключись на грок
- переключись на гроку
- используй облако
- используй грок
- перейди на облако
action: {type: llm_switch, target: groq}
llm_status:
phrases:
- какой у тебя мозг
- какой ллм
- какой у тебя llm
- облако или локально
- ты сейчас где работаешь
- что за модель
action: {type: llm_status}
feat+test: pytest suite + Now Playing + World Clock + Daily Quote packs (154 commands) Adds first formal test suite for Python fork — 42 tests covering memory_store, profiles_store, scheduler_store, macros_store, llm_backend. All pass. Tests (tests/, ~290 lines) conftest.py — `isolated_state` fixture: rewires _PATH/_PROFILES_DIR etc to a per-test tmp_path so concurrent runs don't touch real data. test_memory_store.py — 9 tests: remember/recall/forget round-trip, search by key/value, limit/empty query, persistence across reload, build_llm_context test_profiles_store.py — 7 tests: seeded defaults, set_active persistence, allows_command logic (default/work/driving) test_scheduler_store.py — 12 tests: parser (daily/at/every/in, ru units, bad input), add/remove/clear/remove_by_text, _next_fire for each schedule kind test_macros_store.py — 8 tests: is_macro_control filter, start/save round-trip, control-phrase filtering, list_names sorted, replay unknown raises test_llm_backend.py — 6 tests: parse_backend aliases (ru + en), persist round-trip, auto-detect logic Run: cd /c/Jarvis/python && python -m pytest tests/ Three new fun packs (commands.yaml: 151 → 154) now_playing — Windows Media Session API via PowerShell "что играет" / "что за песня" / "какой трек" Works with Spotify, YouTube, Foobar, Yandex Music, anything that exposes SMTC (Win10 1803+). world_clock — worldtimeapi.org (free, no key) "сколько времени в Токио" / "время в Лондоне" 21 Russian + world cities pre-mapped to IANA timezones. daily_quote — zenquotes.io (free, no key) + LLM translation "цитата дня" / "вдохнови меня" Fetches English quote, translates to Russian via active LLM (Groq or Ollama), speaks "text — author." Pack count: 151 → 154. Tests: 42 pytest + ast.parse + yaml.safe_load.
2026-05-16 00:56:02 +03:00
now_playing:
phrases:
- что играет
- что сейчас играет
- что за музыка
- что за песня
- какой трек
- какая песня
- что слушаю
action: {type: now_playing}
world_clock:
phrases:
- сколько времени в
- который час в
- сколько часов в
- время в
action: {type: world_clock}
daily_quote:
phrases:
- цитата дня
- мотивирующая цитата
- скажи цитату
- вдохнови меня
- цитата
action: {type: daily_quote}
magic_8ball:
phrases:
- ответь да или нет
- магический шар
- восьмой шар
- скажи да или нет
- что скажешь
- предсказание
action: {type: magic_8ball}
gh_list_issues:
phrases:
- какие issues
- какие задачи
- открытые issues
- список issues
- что в issues
- тикеты
action: {type: gh_list_issues}
gh_my_issues:
phrases:
- мои issues
- что мне назначено
action: {type: gh_my_issues}
weather_tomorrow:
phrases:
- погода завтра
- что с погодой завтра
- прогноз на завтра
action: {type: weather_tomorrow}
weather_week:
phrases:
- прогноз на неделю
- погода на неделю
- недельный прогноз
action: {type: weather_week}
rss_add:
phrases:
- добавь rss
- подпишись на
- запомни ленту
- добавь ленту
action: {type: rss_add}
rss_read:
phrases:
- что в ленте
- новости из ленты
- почитай rss
- новости из rss
- новые статьи
action: {type: rss_read}
rss_list:
phrases:
- какие у меня rss
- список лент
- мои подписки
action: {type: rss_list}
ics_create:
phrases:
- добавь встречу
- создай событие
- создай встречу
- новая встреча
action: {type: ics_create}
backup_export:
phrases:
- сделай бекап
- экспортируй настройки
- сохрани мои настройки
- выгрузи настройки
action: {type: backup_export}
clip_save:
phrases:
- запиши буфер
- сохрани буфер
- запомни буфер
- запомни что в буфере
action: {type: clip_save}
clip_list:
phrases:
- что я копировал
- история буфера
- последние буферы
- что было в буфере
action: {type: clip_list}
clip_restore:
phrases:
- верни первый буфер
- верни второй буфер
- верни третий буфер
- восстанови буфер
- вставь старый буфер
action: {type: clip_restore}
notif_missed:
phrases:
- что я пропустил
- что было пока меня не было
- какие уведомления
- пропущенные
action: {type: notif_missed}
notif_clear:
phrases:
- очисти уведомления
- забудь уведомления
- сбрось пропущенное
action: {type: notif_clear}
vault_save:
phrases:
- сохрани пароль от
- запомни пароль от
- пароль для
action: {type: vault_save}
vault_get:
phrases:
- пароль от
- дай пароль
- покажи пароль от
- достань пароль
action: {type: vault_get}
vault_list:
phrases:
- какие у меня пароли
- список паролей
- что в хранилище паролей
action: {type: vault_list}
habit_checkin:
phrases:
- отметь привычку
- выполнил привычку
- я попил воды
- я размялся
- я отдохнул глазам
action: {type: habit_checkin}
habit_streak:
phrases:
- сколько дней подряд
- мои привычки
- статистика привычек
- сколько дней пью воду
- трекинг привычек
action: {type: habit_streak}
personality_greet:
phrases:
- привет джарвис
- здравствуй джарвис
- доброе утро
- добрый день
- добрый вечер
- доброй ночи
- приветствую
- хай джарвис
action: {type: personality_greet}
personality_thanks:
phrases:
- спасибо
- спасибо джарвис
- благодарю
- благодарю джарвис
- спс
- ты лучший
action: {type: personality_thanks}
personality_compliment:
phrases:
- ты молодец
- ты умница
- молодец джарвис
- хорошо сработано
- отличная работа
- так держать
- ты лучший ассистент
action: {type: personality_compliment}
personality_how_are_you:
phrases:
- как дела
- как дела джарвис
- как ты
- как настроение
- как самочувствие
- как поживаешь
- что нового у тебя
action: {type: personality_how_are_you}
personality_tony_quote:
phrases:
- процитируй тони
- цитата тони старка
- что сказал бы тони
- скажи как тони
- процитируй железного человека
- цитата старка
action: {type: personality_tony_quote}
tracker_start:
phrases:
- начни отсчёт
- начни отсчет
- запусти трекер
- я начинаю работу
- начало рабочего дня
action: {type: tracker_start}
tracker_stop:
phrases:
- закончи отсчёт
- закончи отсчет
- останови трекер
- я закончил работу
- конец рабочего дня
action: {type: tracker_stop}
tracker_today:
phrases:
- сколько я работаю сегодня
- сколько отработал сегодня
- сколько часов сегодня
- сколько времени за сегодня
action: {type: tracker_today}
tracker_week:
phrases:
- сколько на этой неделе
- сколько отработал на неделе
- часы за неделю
- статистика за неделю
action: {type: tracker_week}
tracker_reset:
phrases:
- сбрось трекер
- обнули трекер
- очисти трекер
- сбрось отсчёт
action: {type: tracker_reset}
outlook_unread_count:
phrases:
- сколько у меня непрочитанных писем
- сколько непрочитанных писем
- проверь почту
- проверь outlook
- сколько новых писем
action: {type: outlook_unread_count}
outlook_latest:
phrases:
- прочитай последнее письмо
- что в последнем письме
- последнее письмо
- покажи последнее письмо
action: {type: outlook_latest}
outlook_send_clipboard:
phrases:
- отправь письмо
- отправь почту
- напиши письмо
- отправь это
action: {type: outlook_send_clipboard}
outlook_summarize_inbox:
phrases:
- коротко расскажи про инбокс
- расскажи что в инбоксе
- сделай саммари инбокса
- что нового в почте
action: {type: outlook_summarize_inbox}
memory_count:
phrases:
- сколько фактов помнишь
- сколько ты помнишь
- сколько у тебя в памяти
- размер памяти
action: {type: memory_count}
memory_list:
phrases:
- выгрузи список фактов
- покажи что помнишь
- перечисли что помнишь
- что у тебя в памяти
action: {type: memory_list}
memory_wipe:
phrases:
- точно забудь все
- точно забудь всё
- сотри всю память
action: {type: memory_wipe}
cooking_timer:
phrases:
- поставь чайник
- варю яйца
- варю макароны
- варю пасту
- жарю омлет
- жарю яичницу
- варю кашу
- варю рис
- варю гречку
- варю картошку
- запекаю курицу
- пеку пиццу
- завариваю чай
- завариваю кофе
- завариваю френч-пресс
action: {type: cooking}
leftoff:
phrases:
- на чём я остановился
- на чем я остановился
- напомни что делал
- что я делал
- где я остановился
- продолжи откуда я
action: {type: leftoff}
trivia_iron_man:
phrases:
- расскажи про железного человека
- факт про железного человека
- интересное про старка
- марвел факт
action: {type: trivia}
routines_good_night:
phrases:
- спокойной ночи
- иду спать
- пока я в кровати
- ночной режим
- выключи всё на ночь
action: {type: good_night}
routines_good_morning:
phrases:
- доброе утро джарвис
- доброе утро
- я проснулся
- начинаем день
action: {type: good_morning}
routines_coffee_break:
phrases:
- иду за кофе
- перерыв на кофе
- перерыв на чай
- отойду минут на пять
action: {type: coffee_break}
expenses_log:
phrases:
- потратил
- записать трату
- запиши трату
- купил за
- заплатил за
action: {type: expenses_log}
expenses_today:
phrases:
- сколько я потратил сегодня
- траты сегодня
- сколько ушло сегодня
action: {type: expenses_today}
expenses_week:
phrases:
- сколько я потратил на этой неделе
- траты на неделе
- недельные траты
action: {type: expenses_week}
expenses_breakdown:
phrases:
- куда ушли деньги
- разбивка по тратам
- на что я тратил
- разбивка по категориям
action: {type: expenses_breakdown}