298908fc46
computeNonMessageTokens / computeNonMessageBreakdown re-tokenize the system prompt and every tool's wire schema (per-tool JSON.stringify) on each call, but the per-turn compaction and context-threshold paths call them several times (getContextBreakdown twice, #estimateStoredContextTokens once) over inputs that change at most once per turn. Memoize on the identity of (systemPrompt, tools, skills) -- the same stable refs the StatusLineComponent cache already trusts -- so the expensive parts run at most once per input change instead of per call.