diff --git a/pkg/agent/loop.go b/pkg/agent/loop.go index bfa846711..c512f492e 100644 --- a/pkg/agent/loop.go +++ b/pkg/agent/loop.go @@ -274,6 +274,10 @@ func (al *AgentLoop) Run(ctx context.Context) error { func (al *AgentLoop) Stop() { al.running.Store(false) if al.memoryStore != nil { + if err := al.memoryStore.Sync(); err != nil { + logger.WarnCF("agent", "Failed to sync memory before shutdown", + map[string]interface{}{"error": err.Error()}) + } al.memoryStore.Close() } } diff --git a/pkg/memory/store/memory_store.go b/pkg/memory/store/memory_store.go index 32d6fec98..66d4a2767 100644 --- a/pkg/memory/store/memory_store.go +++ b/pkg/memory/store/memory_store.go @@ -500,6 +500,16 @@ func (m *MemoryStore) OffloadToolResult(ctx context.Context, toolName, content, // --- Lifecycle --- +// Sync flushes pending writes to the remote replica (Turso). +// No-op if the underlying delegate doesn't support replication. +func (m *MemoryStore) Sync() error { + type syncer interface{ Sync() error } + if s, ok := m.delegate.(syncer); ok { + return s.Sync() + } + return nil +} + func (m *MemoryStore) Close() error { return m.delegate.Close() }