What happened
On the Usage Statistics page (使用统计) → Activity records (活动记录), the 任务 (Task) column shows 未命名会话 · <short id> ("Untitled session · …") for every row — even when the underlying session has a real title in the WorkHub.
Expected: named sessions show their real title in the Task column; only genuinely untitled sessions fall back to 未命名会话 · <id>.
This is a regression. #3833 fixed exactly this column by carrying the session name (SessionHeader.name) through the old packages/storage/src/usage-stats-store.ts pipeline. That pipeline was later replaced by the Runtime Host usage projection (#3697), and the old store was deleted (#4060). The new pipeline only carries sessionId, never the session name, so UsageRequestLog.sessionName is declared but never populated — and the UI's usageSessionDisplayLabel always hits the untitled fallback for every row.
How to reproduce
- Open Settings → Usage Statistics (使用统计).
- Have some model/tool activity in sessions that carry real titles.
- Open the Activity records (活动记录) tab and look at the 任务 (Task) column.
- Every row reads
未命名会话 · <short id>, regardless of whether the session actually has a name.
Environment
- Maka commit:
aa586237e
- OS and version: macOS (Darwin 24.6.0)
- Surface: Desktop
- Node.js version: running from source
Logs, screenshots, or additional context
Root cause — sessionName is dropped at every layer of the current usage pipeline:
packages/core/src/settings.ts — UsageRequestLog.sessionName is declared (with a doc comment) but no producer fills it.
apps/desktop/src/main/runtime-host-usage-ipc-main.ts — projectLlmLog / projectToolLog carry sessionId/turnId but never sessionName.
packages/runtime-host/src/protocol/usage-pricing.ts — the projection types (LlmUsageLogProjection / ToolUsageLogProjection) have no session-name field at all.
- The UI already reads
row.sessionName (apps/desktop/src/renderer/settings/usage-settings-page.tsx, usageSessionDisplayLabel), so no UI change is needed — the data layer just needs to populate the field again.
Raw usage rows (UsageLogRow) are keyed only by sessionId; the human-readable title lives in the session catalog. Recovering the name is a sessionId → name join, which the deleted store used to do.
What happened
On the Usage Statistics page (使用统计) → Activity records (活动记录), the 任务 (Task) column shows
未命名会话 · <short id>("Untitled session · …") for every row — even when the underlying session has a real title in the WorkHub.Expected: named sessions show their real title in the Task column; only genuinely untitled sessions fall back to
未命名会话 · <id>.This is a regression. #3833 fixed exactly this column by carrying the session name (
SessionHeader.name) through the oldpackages/storage/src/usage-stats-store.tspipeline. That pipeline was later replaced by the Runtime Host usage projection (#3697), and the old store was deleted (#4060). The new pipeline only carriessessionId, never the session name, soUsageRequestLog.sessionNameis declared but never populated — and the UI'susageSessionDisplayLabelalways hits the untitled fallback for every row.How to reproduce
未命名会话 · <short id>, regardless of whether the session actually has a name.Environment
aa586237eLogs, screenshots, or additional context
Root cause —
sessionNameis dropped at every layer of the current usage pipeline:packages/core/src/settings.ts—UsageRequestLog.sessionNameis declared (with a doc comment) but no producer fills it.apps/desktop/src/main/runtime-host-usage-ipc-main.ts—projectLlmLog/projectToolLogcarrysessionId/turnIdbut neversessionName.packages/runtime-host/src/protocol/usage-pricing.ts— the projection types (LlmUsageLogProjection/ToolUsageLogProjection) have no session-name field at all.row.sessionName(apps/desktop/src/renderer/settings/usage-settings-page.tsx,usageSessionDisplayLabel), so no UI change is needed — the data layer just needs to populate the field again.Raw usage rows (
UsageLogRow) are keyed only bysessionId; the human-readable title lives in the session catalog. Recovering the name is asessionId → namejoin, which the deleted store used to do.