From 0cae7851894538e21ee992ac53accbb445b36283 Mon Sep 17 00:00:00 2001 From: grypez <143971198+grypez@users.noreply.github.com> Date: Mon, 9 Feb 2026 08:13:46 -0600 Subject: [PATCH] feat(kernel-store): support absolute database paths Modify `getDBFilename` to detect and pass through absolute paths unchanged, instead of always joining them with the base directory. This enables the daemon to store its database at a fixed location outside the default relative path (e.g. `~/.ocap/kernel.db`). Co-Authored-By: Claude Opus 4.6 --- packages/kernel-store/src/sqlite/nodejs.test.ts | 8 ++++++++ packages/kernel-store/src/sqlite/nodejs.ts | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/kernel-store/src/sqlite/nodejs.test.ts b/packages/kernel-store/src/sqlite/nodejs.test.ts index ea8d63787..36b342401 100644 --- a/packages/kernel-store/src/sqlite/nodejs.test.ts +++ b/packages/kernel-store/src/sqlite/nodejs.test.ts @@ -200,6 +200,14 @@ describe('makeSQLKernelDatabase', () => { recursive: true, }); }); + + it('returns absolute path as-is and ensures parent directory exists', async () => { + const result = await getDBFilename('/home/user/.ocap/store.db'); + expect(result).toBe('/home/user/.ocap/store.db'); + expect(mockMkdir).toHaveBeenCalledWith('/home/user/.ocap', { + recursive: true, + }); + }); }); describe('savepoint functionality', () => { diff --git a/packages/kernel-store/src/sqlite/nodejs.ts b/packages/kernel-store/src/sqlite/nodejs.ts index 421ba8c2c..24d043b0d 100644 --- a/packages/kernel-store/src/sqlite/nodejs.ts +++ b/packages/kernel-store/src/sqlite/nodejs.ts @@ -3,7 +3,7 @@ import type { Database as SqliteDatabase } from 'better-sqlite3'; import Sqlite from 'better-sqlite3'; import { mkdir } from 'node:fs/promises'; import { tmpdir } from 'node:os'; -import { join } from 'node:path'; +import { dirname, isAbsolute, join } from 'node:path'; import { SQL_QUERIES, @@ -334,6 +334,10 @@ export async function getDBFilename(label: string): Promise { if (label.startsWith(':')) { return label; } + if (isAbsolute(label)) { + await mkdir(dirname(label), { recursive: true }); + return label; + } const dbRoot = join(tmpdir(), './ocap-sqlite', getDBFolder()); await mkdir(dbRoot, { recursive: true }); return join(dbRoot, label);