Skip to content

feat(tui): live context gauge via per-iteration usage events - #20

Merged
jkyberneees merged 2 commits into
mainfrom
feat/live-context-gauge
Jul 29, 2026
Merged

feat(tui): live context gauge via per-iteration usage events#20
jkyberneees merged 2 commits into
mainfrom
feat/live-context-gauge

Conversation

@jkyberneees

Copy link
Copy Markdown
Contributor

What

The header context gauge only refreshed when a run finished, because odek serve reported token economics solely on the done event (once per user prompt, after the whole agent loop). odek v1.23.0 (BackendStack21/odek#127) now streams a lightweight usage event after every LLM turn — this PR consumes it.

Changes

  • internal/tui/events.go — handle the usage event: refresh winCtxTok (the gauge's data source) mid-run, coalesced through the existing 80ms streaming flush. Zero-usage events (providers without usage reporting) are ignored so the last known fill is preserved. Turn state (busy, status) is untouched.
  • internal/tui/stats_test.go — regression test: gauge refreshes mid-run on usage, zero values don't clobber a known fill, turn state undisturbed.
  • AGENTS.md — new workflow rule: never modify the odek project from a bodek session; hand odek-side fixes to the user as a task for an odek session.

Compatibility

Fully backward compatible both ways: older bodek ignores the unknown event type; older odek simply never sends it (gauge behaves as before).

Verification

  • make fmt / vet / lint (0 issues) / test -race — all green.
  • Live end-to-end against a real released odek v1.23.0 serve (tool-call prompt → multiple LLM turns): 3 usage events streamed live (9.1k → 9.1k → 18.4k ctx tokens) before the first response token and before done, final value matching done.contextTokens.

odek serve v1.23.0 streams a "usage" event after every LLM turn
(cumulative contextTokens/outputTokens for the run). Handle it to keep
the header context gauge live during multi-turn runs instead of stale
until "done". Zero-usage events (providers without usage reporting)
are ignored so the last known fill is preserved. Renders are coalesced
via the existing streaming flush path.

Verified end-to-end against a real odek v1.23.0 serve: 3 usage events
streamed before the first response token, final value matching
done.contextTokens.
bodek is a pure front-end; odek-side fixes must be handed to the user
as a task for an odek session, not edited directly.
@jkyberneees
jkyberneees merged commit 0e0884b into main Jul 29, 2026
5 checks passed
@jkyberneees
jkyberneees deleted the feat/live-context-gauge branch July 29, 2026 17:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant