Release Notes:
- Fixed spurious "no checkpoint" error in agent panel
---
## Summary
`update_last_checkpoint` would call `last_user_message()` twice - once
at the start to capture the checkpoint, and again in an async closure
after the checkpoint comparison completed. If a new user message without
a checkpoint was added between these two calls, the second call would
find the new message and fail with "no checkpoint".
## Fix
Capture the user message ID at the start and use `user_message_mut(&id)`
in the async closure to find the specific message.
cc @mikayla-maki