diff --git a/packages/server/src/services/hermes/sessions-db.ts b/packages/server/src/services/hermes/sessions-db.ts index 0367fcc..1291d64 100644 --- a/packages/server/src/services/hermes/sessions-db.ts +++ b/packages/server/src/services/hermes/sessions-db.ts @@ -1,6 +1,10 @@ -import { DatabaseSync } from 'node:sqlite' import { getActiveProfileDir } from './hermes-profile' +const SQLITE_AVAILABLE = (() => { + const [major, minor] = process.versions.node.split('.').map(Number) + return major > 22 || (major === 22 && minor >= 5) +})() + export interface HermesSessionRow { id: string source: string @@ -115,6 +119,11 @@ const BASE_SELECT = ` ` export async function listSessionSummaries(source?: string, limit = 2000): Promise { + if (!SQLITE_AVAILABLE) { + throw new Error(`node:sqlite requires Node >= 22.5, current: ${process.versions.node}`) + } + + const { DatabaseSync } = await import('node:sqlite') const db = new DatabaseSync(sessionDbPath(), { open: true, readOnly: true }) try { diff --git a/tests/server/sessions-db.test.ts b/tests/server/sessions-db.test.ts index 22efa3a..c0f0256 100644 --- a/tests/server/sessions-db.test.ts +++ b/tests/server/sessions-db.test.ts @@ -6,7 +6,7 @@ const closeMock = vi.fn() const databaseSyncMock = vi.fn(() => ({ prepare: prepareMock, close: closeMock })) const getActiveProfileDirMock = vi.fn(() => '/tmp/hermes-profile') -vi.mock('node:sqlite', () => ({ +vi.doMock('node:sqlite', () => ({ DatabaseSync: databaseSyncMock, }))