J.A.R.V.I.S-rust/resources/commands/focus/stop.lua
Bossiara13 8f46bd735a
Some checks are pending
Rust CI / cargo test (jarvis-core) (push) Waiting to run
Rust CI / cargo clippy (push) Waiting to run
Rust CI / cargo check (workspace) (push) Waiting to run
feat: Wave 6 — focus mode, cooking timer, memory admin
Focus mode (`focus/`):
- focus.start ("режим фокуса" / "focus mode"): three side-effects in one
  voice trigger:
    1. switch profile to "work" (silences fun/banter)
    2. enable Windows Focus Assist via registry tweak (QuietHours key)
    3. schedule a stretch reminder in 50 minutes through the persistent
       scheduler — so it survives daemon restart
- focus.stop: undoes all three, including cancelling pending stretch
  reminders by matching their scheduler name. Best-effort: any one
  failing doesn't block the others.

Cooking timer (`cooking/`):
- Recognises 16+ dish names (чай, кофе, омлет, яйца, макароны, паста,
  рис, гречка, картошка, курица, пицца, etc.) and starts a preset-
  duration scheduler reminder ("Сэр, чай готов.").
- Single Lua script, table-driven — adding a recipe is one line.
- EN phrases for the same dishes ("boiling pasta", "frying eggs", ...).

Memory admin (`memory_admin/`):
- memory_admin.count → speak fact count with full RU pluralisation.
- memory_admin.list → speak 5 most-recent + toast the rest.
- memory_admin.wipe → ONLY fires on "точно забудь все" prefix (not bare
  "забудь все") so we can't disaster-wipe by accident.
- Adds `long_term_memory::clear_all() -> usize` returning removed count
  + Lua binding `jarvis.memory.clear_all()`.
- One extra unit test for `clear_all`.

Tests: 139 → 140 (+1). Pack count: 92 → 95.
2026-05-16 14:39:55 +03:00

50 lines
1.9 KiB
Lua

-- Leave focus mode — undo the three side-effects of focus.start.
local lang = jarvis.context.language
local report = {}
-- 1) Revert profile to default
local ok1 = pcall(function() jarvis.profile.set("default") end)
if ok1 then
table.insert(report, lang == "ru" and "обычный профиль" or "default profile")
end
-- 2) Re-enable notifications via the same registry key
local ps = [[
$key = 'HKCU:\Software\Microsoft\Windows\CurrentVersion\Notifications\Settings\Windows.SystemToast.QuietHours'
if (Test-Path $key) {
Set-ItemProperty -Path $key -Name 'NOC_GLOBAL_SETTING_TOASTS_ENABLED' -Value 1 -Type DWord
}
Write-Output 'fa-off'
]]
local cmd = 'powershell -NoProfile -ExecutionPolicy Bypass -Command "& {'
.. ps:gsub('\r?\n', '; '):gsub('"', '\\"')
.. '}"'
local res = jarvis.system.exec(cmd)
if res.success then
table.insert(report, lang == "ru" and "уведомления включены" or "notifications restored")
end
-- 3) Cancel any pending stretch reminders we created — match by name
-- (scheduler has no native "tags" so we use the human name we set in start.lua)
local cancelled = 0
local target_names = { "Стретч-пауза", "Stretch break" }
for _, task in ipairs(jarvis.scheduler.list()) do
for _, name in ipairs(target_names) do
if task.name == name then
jarvis.scheduler.remove(task.id)
cancelled = cancelled + 1
end
end
end
if cancelled > 0 then
table.insert(report, string.format(lang == "ru"
and "отменил %d напоминаний"
or "cancelled %d reminders", cancelled))
end
local summary = #report > 0 and table.concat(report, ", ")
or (lang == "ru" and "ничего не было активно" or "nothing was active")
return jarvis.cmd.ok(lang == "ru"
and ("Фокус выключен: " .. summary .. ".")
or ("Focus mode off: " .. summary .. "."))