Middleware that adds a _context_tokens channel to the graph state.
The field is checkpointed (survives across sessions) but not passed to the
model (PrivateStateAttr). The CLI writes the latest total-context token
count here after every LLM response and context offload, and reads it back
when resuming a thread so that /tokens and the status bar show accurate
values immediately.