local phrase = (jarvis.context.phrase or ""):lower() local body = jarvis.text.strip_trigger(phrase, { "запомни обо мне что", "запомни обо мне", "запомни что", "помни что", "запомни это", "запомни про меня", "запомни", "remember that", "remember about me", "memorize", "запам'ятай що", "запам'ятай про мене", }) body = body:gsub("^[%s,:%.]+", ""):gsub("%s+$", "") if body == "" then jarvis.speak("Что именно запомнить?") jarvis.audio.play_error() return { chain = false } end -- Heuristic: derive a key. Look for "что X = Y" / "что у меня X" / etc. -- For now: first 3-5 meaningful words become the key. local key = body local _, after_eq = body:find("=", 1, true) if after_eq then key = body:sub(1, after_eq - 1):gsub("%s+$", "") body = body:sub(after_eq + 1):gsub("^%s+", "") end -- truncate key to first 6 words local words = {} for w in key:gmatch("%S+") do table.insert(words, w) if #words >= 6 then break end end key = table.concat(words, " ") local ok, err = pcall(function() jarvis.memory.remember(key, body) end) if not ok then jarvis.log("warn", "memory.remember failed: " .. tostring(err)) jarvis.speak("Не удалось запомнить.") jarvis.audio.play_error() return { chain = false } end jarvis.speak("Запомнил.") jarvis.audio.play_ok() return { chain = false }