feat(dashboard): LLM stats answer who/what spends tokens — member scope chips and spend breakdowns
Nightly Build / build (push) Successful in 4m27s

The stats section was designed single-user: four global charts, no
attribution. Request metadata rows now carry the session's source and
the frame's agent_id/depth (additive ensure_column), denormalized at log
time by the LoggingModel from the owner's pool — off the turn's hot
path, degrading to NULLs, never to a lost row.

The dashboard gains member scope chips filtering every chart, and a
breakdown row splitting the range's billed tokens by member, kind
(chat / sub-agents / cron / system agents / channels), agent, model and
provider — a sub-agent's spend is attributed to the sub-agent itself.
Rows predating the columns group under 'older data'.
This commit is contained in:
Daniele
2026-09-10 14:03:22 +01:00
parent 7e3fa3caad
commit 0958264c6f
14 changed files with 550 additions and 99 deletions
+7
View File
@@ -10,6 +10,13 @@ release PR may merge — and a section is closed at the commit that bumps it.
### Added
- The dashboard's **LLM stats** section answers "who and what is spending tokens", not
just "how much": a row of member chips filters every chart to one person (or the whole
instance, as before), and a new breakdown row splits the billed tokens of the selected
range **by member, by kind** (chat / sub-agents / scheduled tasks / system agents /
channels), **by agent, by model and by provider** — a sub-agent's spend is attributed to
the sub-agent itself. Request metadata rows now carry the session's source and the
frame's agent/depth, denormalized at log time; older rows group under "Older data".
- The file viewer opens **word-processor documents** (`.docx`, `.doc`, `.odt`, `.rtf`):
when LibreOffice is installed on the server they are converted to PDF and shown as the
document, live-reloading when the file changes, exactly like a compiled `.tex`. A