-- Enter focus mode — three side-effects bundled into one voice trigger: -- 1. activate "work" profile (silences fun/games/banter commands) -- 2. enable Windows Focus Assist (Quiet Hours) via registry tweak -- 3. schedule a "стретчинг" reminder in 50 minutes via the persistent scheduler -- -- All three are independent — if one fails, the rest still happen. local lang = jarvis.context.language local report = {} -- 1) Profile switch (best effort) local ok1, err1 = pcall(function() jarvis.profile.set("work") end) if ok1 then table.insert(report, lang == "ru" and "профиль 'работа'" or "work profile") else jarvis.log("warn", "focus.start: profile.set failed: " .. tostring(err1)) end -- 2) Windows Focus Assist: writes the registry key Windows uses for -- "Priority only" mode. This is the same key Windows 11 toggles when you -- flip Focus on/off via the Action Center. local ps = [[ $key = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.QuietHours' if (-not (Test-Path $key)) { New-Item -Path $key -Force | Out-Null } Set-ItemProperty -Path $key -Name 'NOC_GLOBAL_SETTING_TOASTS_ENABLED' -Value 0 -Type DWord Write-Output 'fa-on' ]] local cmd = 'powershell -NoProfile -ExecutionPolicy Bypass -Command "& {' .. ps:gsub('\r?\n', '; '):gsub('"', '\\"') .. '}"' local res = jarvis.system.exec(cmd) if res.success and (res.stdout or ""):find("fa%-on") then table.insert(report, lang == "ru" and "уведомления выключены" or "notifications muted") else jarvis.log("warn", "focus.start: focus assist registry tweak failed") end -- 3) Stretch reminder in 50 minutes (the canonical Pomodoro-XL value) local stretch_text = lang == "ru" and "Сэр, 50 минут истекли. Встаньте, разомнитесь, посмотрите вдаль." or "Sir, 50 minutes are up. Stand, stretch, look away from the screen." local ok3, err3 = pcall(function() jarvis.scheduler.add({ name = lang == "ru" and "Стретч-пауза" or "Stretch break", schedule = "in 50 minutes", action = { type = "speak", text = stretch_text }, }) end) if ok3 then table.insert(report, lang == "ru" and "пауза через 50 мин" or "break in 50 min") else jarvis.log("warn", "focus.start: scheduler.add failed: " .. tostring(err3)) end if #report == 0 then return jarvis.cmd.error(lang == "ru" and "Ничего не получилось включить." or "Couldn't enable anything.") end local summary = table.concat(report, ", ") return jarvis.cmd.ok(lang == "ru" and ("Включил режим фокуса: " .. summary .. ". Удачной работы, сэр.") or ("Focus mode enabled: " .. summary .. ". Good luck, sir."))