a2e0ca7fc9
When lastSpokenId is missing or stale, collectUnspokenTurnSpeech used index -1 and concatenated every prior assistant reply into one speech string. Bound collection to the current turn (after the last user message) and carry the spoken anchor from a null session id onto the created session so live conversations stay turn-scoped.