earendil-works/pi · error · SessionError
invalid_payload
invalid_payload
Error message
SQLite session metadata must be an object
What it means
Error "SQLite session metadata must be an object" thrown in earendil-works/pi.
Source
Thrown at packages/session-backends/sqlite-node/src/sqlite/storage/sessions.ts:48
"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)) {
throw new SessionError("invalid_payload", "SQLite session metadata must be an object");
}
assertJsonSerializable(metadata);
return JSON.stringify(metadata);
}
export function insertSessionRow(db: SqliteDatabase, session: NewSessionRow) {
sql`INSERT INTO sessions (id, created_at, metadata, cwd, parent_session_id)
VALUES (${session.id}, ${session.createdAt}, ${serializeMetadata(session.metadata)}, ${session.cwd}, ${session.parentSessionId ?? null})`.run(
db,
);
}
export function readSessionRow(db: SqliteDatabase, sessionId: string) {
return sql`SELECT s.id, s.created_at, s.metadata, s.cwd, s.parent_session_id,
name_fact.seq IS NOT NULL AS has_session_name,
name_fact.value AS session_name
FROM sessions AS s
LEFT JOIN facts AS name_factView on GitHub (pinned to 4af9d21d3b)
Solutions
- Session metadata must be a JSON object.
When it happens
Trigger: Thrown at packages/session-backends/sqlite-node/src/sqlite/storage/sessions.ts:48 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/2f61e50f67ca300b.
Report an issue: GitHub.