What you’re seeing is the per-model-step invocation id (the turn request id + a step counter + a short random suffix), while the other hooks report the turn-level request id.
Workaround for now: the turn’s generation_id is always a prefix of the afterAgentThought value, so you can join events within a turn by stripping the trailing -<step>-<random> using some RegEx.
^(.*)-\d+-[a-z0-9]{4}$ → capture group 1 is the turn generation_id.
We’ve filed a bug internally to decide whether to make this consistent (report the turn id everywhere) or expose the invocation id as a separate field.
One thing we noticed while reproducing: in our runs, afterAgentThought sometimes fired twice per thought, once with the suffixed invocation id and once with the bare turn generation_id. Are you seeing that too on your side (duplicate afterAgentThought events for the same thought), or just the single suffixed value?