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_stats

View on GitHub (pinned to 4af9d21d3b)

Solutions

  1. 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.