from deerflow.agents.memory.thread_storage import SqliteThreadMemoryStorage def _payload(): return { "ownerId": None, "profile": {"name": "A", "role": None, "expertise": [], "language": None, "context": None}, "preferences": {"tone": None, "verbosity": None, "codeStyle": None, "other": None}, "facts": [], } def test_sqlite_thread_memory_compare_and_swap(tmp_path): storage = SqliteThreadMemoryStorage(str(tmp_path / "thread-memory.db")) thread_id = "thread-1" assert storage.save(thread_id, _payload(), expected_version=0) is True loaded = storage.load(thread_id) assert loaded is not None assert loaded["memoryVersion"] == 0 # wrong expected version should fail assert storage.save(thread_id, _payload(), expected_version=9) is False # correct version should pass and increment assert storage.save(thread_id, _payload(), expected_version=0) is True loaded2 = storage.load(thread_id) assert loaded2 is not None assert loaded2["memoryVersion"] == 1