From 05086682e5a4eb47d4d6da7a64accb25c9aa0ab3 Mon Sep 17 00:00:00 2001 From: Amolith Date: Fri, 2 Jan 2026 11:25:38 -0700 Subject: [PATCH] fix(agent): read step data for summarization check StopWhen was reading token counts from currentSession, which is fetched once at Run() start and never updated. OnStepFinish updates a separate updatedSession variable, leaving currentSession stale. It now reads directly from the steps parameter that fantasy passes to StopWhen, which contains fresh usage data from completed steps. Fixes: charmbracelet/crush#1750 Assisted-by: Claude Opus 4.5 via Crush --- internal/agent/agent.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/internal/agent/agent.go b/internal/agent/agent.go index 30c3392939b63aa441551fd0437a5c69789d7b58..16c8e5955d9738283b11543755e82cb0e0584df4 100644 --- a/internal/agent/agent.go +++ b/internal/agent/agent.go @@ -371,9 +371,14 @@ func (a *sessionAgent) Run(ctx context.Context, call SessionAgentCall) (*fantasy return a.messages.Update(genCtx, *currentAssistant) }, StopWhen: []fantasy.StopCondition{ - func(_ []fantasy.StepResult) bool { + func(steps []fantasy.StepResult) bool { + if len(steps) == 0 { + return false + } + lastStep := steps[len(steps)-1] + usage := lastStep.Usage + tokens := usage.InputTokens + usage.OutputTokens + usage.CacheCreationTokens + usage.CacheReadTokens cw := int64(a.largeModel.CatwalkCfg.ContextWindow) - tokens := currentSession.CompletionTokens + currentSession.PromptTokens remaining := cw - tokens var threshold int64 if cw > 200_000 {