earendil-works/pi · error · SessionError

storage

storage

Error message

Invalid SQLite session ${sessionId}: metadata is not valid JSON

What it means

Error "Invalid SQLite session ${sessionId}: metadata is not valid JSON" thrown in earendil-works/pi.

Source

Thrown at packages/session-backends/sqlite-node/src/sqlite/storage/sessions.ts:29

	has_session_name: number;
	session_name: string | null;
}

export interface NewSessionRow {
	id: string;
	createdAt: number;
	cwd: string;
	parentSessionId?: string;
	metadata?: Record<string, unknown>;
}

function parseMetadata(metadata: string | null, sessionId: string): Record<string, unknown> | undefined {
	if (metadata === null) return undefined;
	let parsed: unknown;
	try {
		parsed = JSON.parse(metadata);
	} catch (error) {
		throw new SessionError(
			"storage",
			`Invalid SQLite session ${sessionId}: metadata is not valid JSON`,
			error instanceof Error ? error : undefined,
		);
	}
	if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
		throw new SessionError("storage", `Invalid SQLite session ${sessionId}: metadata must be an object`);
	}
	return parsed as Record<string, unknown>;
}

export function sessionExists(db: SqliteDatabase, sessionId: string) {
	return !!sql`SELECT 1 AS found FROM sessions WHERE id = ${sessionId}`.get<{ found: number }>(db);
}

function serializeMetadata(metadata: Record<string, unknown> | undefined): string | null {
	if (metadata === undefined) return null;
	if (typeof metadata !== "object" || metadata === null || Array.isArray(metadata)) {

View on GitHub (pinned to 4af9d21d3b)

Solutions

  1. The session metadata is not valid JSON; fix or reset the stored metadata.

When it happens

Trigger: Thrown at packages/session-backends/sqlite-node/src/sqlite/storage/sessions.ts:29 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/5dcc703d61568093. Report an issue: GitHub.