Agent budgets stop turns before each model call
An agent budget is now enforced before every model call in the native loop through a shared budget gate, the same gate the Agents API backend uses. When a budget is exhausted, the turn stops with a typed reason and emits budget events, instead of continuing to spend.
Budget summaries also carry the budget ID, so a client can tell which of several stacked budgets stopped the turn. To continue, top up the exhausted budget with the budget API or CLI.