earendil-works/pi · error · SessionError
storage
storage
Error message
Missing stats row for session ${sessionId} What it means
Error "Missing stats row for session ${sessionId}" thrown in earendil-works/pi.
Source
Thrown at packages/session-backends/sqlite-node/src/sqlite/storage/session-stats.ts:25
session_id: string;
message_count: number;
cached_tokens: number;
uncached_tokens: number;
total_tokens: number;
cost_total: number;
}
export function createStats(db: SqliteDatabase, sessionId: string, messageCount = 0): void {
sql`INSERT INTO session_stats
(session_id, message_count, cached_tokens, uncached_tokens, total_tokens, cost_total)
VALUES (${sessionId}, ${messageCount}, 0, 0, 0, 0)`.run(db);
}
export function readStats(db: SqliteDatabase, sessionId: string): SessionStats {
const row = sql`SELECT session_id, message_count, cached_tokens, uncached_tokens, total_tokens, cost_total
FROM session_stats
WHERE session_id = ${sessionId}`.get<SessionStatsRow>(db);
if (!row) throw new SessionError("storage", `Missing stats row for session ${sessionId}`);
return {
messageCount: row.message_count,
cachedTokens: row.cached_tokens,
uncachedTokens: row.uncached_tokens,
totalTokens: row.total_tokens,
costTotal: row.cost_total,
};
}
export function incrementMessageCount(db: SqliteDatabase, sessionId: string): void {
const result = sql`UPDATE session_stats SET message_count = message_count + 1 WHERE session_id = ${sessionId}`.run(
db,
);
if (result.changes !== 1) throw new SessionError("storage", `Missing stats row for session ${sessionId}`);
}
export function addUsageToStats(db: SqliteDatabase, sessionId: string, usage: Usage): void {
const result = sql`UPDATE session_statsView on GitHub (pinned to 4af9d21d3b)
Solutions
- The session's stats row is missing; recreate the session record.
When it happens
Trigger: Thrown at packages/session-backends/sqlite-node/src/sqlite/storage/session-stats.ts:25 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of earendil-works/pi@4af9d21d3b (2026-08-24).
Data as JSON: /api/errors/31ddb4c165c10c51.
Report an issue: GitHub.