711f5455df
Gemini and OpenRouter are stateless APIs that never return session IDs. Without synthetic IDs, PR #693's defensive memorySessionId checks throw errors on every observation processing call for these providers. Generates provider-prefixed IDs (gemini-/openrouter-{contentSessionId}- {timestamp}) before the first API call, persisted to the database via updateMemorySessionId(). Applied from PR #615 (closed due to staleness). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>