J.A.R.V.I.S-rust/resources/commands/macros/command.toml

102 lines
1.9 KiB
TOML
Raw Normal View History

feat(macros): IMBA-7 voice-recorded command sequences (VoiceAttack-style) Simpler than AHK keyboard hooks: record what the user SAID, replay each phrase through the normal dispatch path. Works for any command jarvis already knows. Flow: "Запиши макрос работа" → start_recording("работа") "Открой браузер" → buffered into the recording "Запусти спотифай" → buffered "Режим работа" → buffered "Сохрани макрос" → save_recording() → persist ...later... "Запусти макрос работа" → replay("работа") → fires each phrase in order Core (crates/jarvis-core/src/macros.rs) - Macro {name, steps, created_at, last_run} persisted at <APP_CONFIG_DIR>/macros.json with atomic write-through. - Recording state in-memory: RwLock<Option<RecordingState>>. - start_recording / record_step / save_recording / cancel_recording. - list / get / delete / mark_run. - replay(name) spawns a thread that fires each step through a callback, with 800ms inter-step delay. Caller returns immediately. - is_macro_control filter prevents recording the meta-commands themselves (no infinite recursion when "запиши макрос" runs during a recording). - 3 unit tests (55 total). Wiring (crates/jarvis-app/src/main.rs) - macros::init() before listener starts. - macros::set_replay_callback(move |phrase| text_cmd_tx.send(phrase)) — each replay step gets queued as a synthetic text command, processed by the same dispatcher the GUI uses. No special-case code path. Recording hook (crates/jarvis-app/src/app.rs::execute_command) - On successful command execution → call macros::record_step(text). - Failed commands are NOT recorded (would fail on replay too). - is_macro_control filter inside record_step skips meta-commands. Lua API (crates/jarvis-core/src/lua/api/macros.rs) - jarvis.macros.{start, save, cancel, replay, list, delete, is_recording, recording_name} Voice pack (resources/commands/macros/, 6 commands) - "запиши макрос NAME" → macros.start_recording - "сохрани макрос" → macros.save - "отмени макрос" → macros.cancel - "запусти макрос NAME" → macros.replay - "какие у меня макросы" → macros.list - "удали макрос NAME" → macros.delete Build: cargo build --release -p jarvis-app green. 55/55 tests pass.
2026-05-15 17:12:32 +03:00
# IMBA-7: Voice macros — record and replay sequences of voice commands.
[[commands]]
id = "macros.start_recording"
type = "lua"
script = "start.lua"
sandbox = "standard"
timeout = 3000
[commands.phrases]
ru = [
"запиши макрос",
"начни запись макроса",
"записывай макрос",
"новый макрос",
]
en = ["record macro", "start macro recording"]
[[commands]]
id = "macros.save"
type = "lua"
script = "save.lua"
sandbox = "standard"
timeout = 3000
[commands.phrases]
ru = [
"сохрани макрос",
"стоп макрос",
"стоп запись макроса",
"закончи запись",
"макрос готов",
]
en = ["save macro", "stop macro", "finish macro"]
[[commands]]
id = "macros.cancel"
type = "lua"
script = "cancel.lua"
sandbox = "minimal"
timeout = 2000
[commands.phrases]
ru = [
"отмени макрос",
"отмени запись макроса",
"отмени запись",
"забудь макрос",
]
en = ["cancel macro", "discard macro"]
[[commands]]
id = "macros.replay"
type = "lua"
script = "replay.lua"
sandbox = "standard"
timeout = 60000
[commands.phrases]
ru = [
"запусти макрос",
"выполни макрос",
"воспроизведи макрос",
"сыграй макрос",
"проиграй макрос",
]
en = ["play macro", "replay macro", "run macro"]
[[commands]]
id = "macros.list"
type = "lua"
script = "list.lua"
sandbox = "minimal"
timeout = 3000
[commands.phrases]
ru = [
"какие у меня макросы",
"список макросов",
"покажи макросы",
]
en = ["list macros", "show macros"]
[[commands]]
id = "macros.delete"
type = "lua"
script = "delete.lua"
sandbox = "minimal"
timeout = 3000
[commands.phrases]
ru = [
"удали макрос",
"забудь о макросе",
]
en = ["delete macro", "remove macro"]