Skip to content

Commit e82ed4d

Browse files
committed
feat: add message count tracking to stats display
1 parent e595928 commit e82ed4d

File tree

2 files changed

+15
-6
lines changed

2 files changed

+15
-6
lines changed

lib/commands/stats.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ export interface StatsCommandContext {
2121
function formatStatsMessage(
2222
sessionTokens: number,
2323
sessionTools: number,
24+
sessionMessages: number,
2425
allTime: AggregatedStats,
2526
): string {
2627
const lines: string[] = []
@@ -31,14 +32,16 @@ function formatStatsMessage(
3132
lines.push("")
3233
lines.push("Session:")
3334
lines.push("─".repeat(60))
34-
lines.push(` Tokens pruned: ~${formatTokenCount(sessionTokens)}`)
35-
lines.push(` Tools pruned: ${sessionTools}`)
35+
lines.push(` Tokens pruned: ~${formatTokenCount(sessionTokens)}`)
36+
lines.push(` Tools pruned: ${sessionTools}`)
37+
lines.push(` Messages pruned: ${sessionMessages}`)
3638
lines.push("")
3739
lines.push("All-time:")
3840
lines.push("─".repeat(60))
39-
lines.push(` Tokens saved: ~${formatTokenCount(allTime.totalTokens)}`)
40-
lines.push(` Tools pruned: ${allTime.totalTools}`)
41-
lines.push(` Sessions: ${allTime.sessionCount}`)
41+
lines.push(` Tokens saved: ~${formatTokenCount(allTime.totalTokens)}`)
42+
lines.push(` Tools pruned: ${allTime.totalTools}`)
43+
lines.push(` Messages pruned: ${allTime.totalMessages}`)
44+
lines.push(` Sessions: ${allTime.sessionCount}`)
4245

4346
return lines.join("\n")
4447
}
@@ -49,19 +52,22 @@ export async function handleStatsCommand(ctx: StatsCommandContext): Promise<void
4952
// Session stats from in-memory state
5053
const sessionTokens = state.stats.totalPruneTokens
5154
const sessionTools = state.prune.toolIds.size
55+
const sessionMessages = state.prune.messageIds.size
5256

5357
// All-time stats from storage files
5458
const allTime = await loadAllSessionStats(logger)
5559

56-
const message = formatStatsMessage(sessionTokens, sessionTools, allTime)
60+
const message = formatStatsMessage(sessionTokens, sessionTools, sessionMessages, allTime)
5761

5862
const params = getCurrentParams(state, messages, logger)
5963
await sendIgnoredMessage(client, sessionId, message, params, logger)
6064

6165
logger.info("Stats command executed", {
6266
sessionTokens,
6367
sessionTools,
68+
sessionMessages,
6469
allTimeTokens: allTime.totalTokens,
6570
allTimeTools: allTime.totalTools,
71+
allTimeMessages: allTime.totalMessages,
6672
})
6773
}

lib/state/persistence.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,13 +134,15 @@ export async function loadSessionState(
134134
export interface AggregatedStats {
135135
totalTokens: number
136136
totalTools: number
137+
totalMessages: number
137138
sessionCount: number
138139
}
139140

140141
export async function loadAllSessionStats(logger: Logger): Promise<AggregatedStats> {
141142
const result: AggregatedStats = {
142143
totalTokens: 0,
143144
totalTools: 0,
145+
totalMessages: 0,
144146
sessionCount: 0,
145147
}
146148

@@ -161,6 +163,7 @@ export async function loadAllSessionStats(logger: Logger): Promise<AggregatedSta
161163
if (state?.stats?.totalPruneTokens && state?.prune?.toolIds) {
162164
result.totalTokens += state.stats.totalPruneTokens
163165
result.totalTools += state.prune.toolIds.length
166+
result.totalMessages += state.prune.messageIds?.length || 0
164167
result.sessionCount++
165168
}
166169
} catch {

0 commit comments

Comments
 (0)