From 4bc02b0102e45dc8cce97b7fc8499e0ab23d862f Mon Sep 17 00:00:00 2001 From: Adam Malczewski Date: Fri, 12 Jun 2026 01:01:32 +0900 Subject: feat(metrics): consume contextSize — current context-usage readout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Backend context-size handoff: re-pin wire@0.5.0 / transport-contract@0.6.0 (+ re-mirror .dispatch reference snapshots). Thread the optional contextSize through core/metrics (done fold + durable + selectCurrentContextSize: latest turn's defined value, undefined=>unknown never 0, durable-wins-over-live). Chat store exposes currentContextSize; ContextSizeBadge renders "N tokens in context" / "context size unknown" above the composer. GLOSSARY: add context size / context window. 533 tests green. --- src/core/metrics/format.ts | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'src/core/metrics/format.ts') diff --git a/src/core/metrics/format.ts b/src/core/metrics/format.ts index ee8db60..d8dd2cc 100644 --- a/src/core/metrics/format.ts +++ b/src/core/metrics/format.ts @@ -17,6 +17,17 @@ function formatTps(tps: number | null): string | null { return `${Math.round(tps)} tok/s`; } +/** + * Format the current context size for display. A defined count renders as + * `" tokens in context"` (thousands-separated); `undefined` ("unknown" — no + * per-step usage reported yet) renders the placeholder `"context size unknown"`. + * Never renders `0` for the unknown case. + */ +export function formatContextSize(n: number | undefined): string { + if (n === undefined) return "context size unknown"; + return `${formatTokens(n)} tokens in context`; +} + /** Compute tokens-per-second. Returns null when elapsed time is absent or zero. */ export function computeTps(outputTokens: number, elapsedMs: number | undefined): number | null { if (elapsedMs === undefined || elapsedMs <= 0) return null; -- cgit v1.2.3