From e1884cfbd16e6317049092a8de1b3964f2ef7eaa Mon Sep 17 00:00:00 2001 From: Till JS Date: Mon, 13 Apr 2026 22:19:59 +0200 Subject: [PATCH] =?UTF-8?q?fix(brain):=20fix=20companion=20page=20not=20re?= =?UTF-8?q?ndering=20=E2=80=94=20schema=20version=20+=20query=20robustness?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Bump companion tables to db.version(14) so the schema upgrade runs even on browsers that already saw v10 with only _events - Add try/catch to useConversations() and useMessages() queries to prevent silent crashes if tables don't exist yet - Use db.table() directly in chat store instead of collections.ts module-level references (avoids eager table resolution issues) - Add min-height to empty state and companion page container Co-Authored-By: Claude Opus 4.6 (1M context) --- apps/mana/apps/web/src/lib/data/database.ts | 8 +++++-- .../web/src/lib/modules/companion/queries.ts | 24 ++++++++++++------- .../modules/companion/stores/chat.svelte.ts | 23 +++++++++++------- .../src/routes/(app)/companion/+page.svelte | 8 ++++--- 4 files changed, 42 insertions(+), 21 deletions(-) diff --git a/apps/mana/apps/web/src/lib/data/database.ts b/apps/mana/apps/web/src/lib/data/database.ts index c454f201a..952ad4085 100644 --- a/apps/mana/apps/web/src/lib/data/database.ts +++ b/apps/mana/apps/web/src/lib/data/database.ts @@ -426,13 +426,17 @@ db.version(9).stores({ db.version(10).stores({ _events: '++seq, type, meta.appId, meta.timestamp, meta.recordId, [meta.appId+meta.timestamp], [type+meta.timestamp]', - // Companion Brain: Goals, Memory, Feedback, Chat +}); + +// v14 — Companion Brain: Goals, Memory, Feedback, Chat, Rituals. +// Bumped to v14 (past mail/stretch/meditate/sleep) to ensure schema +// upgrade runs even if the browser already saw an earlier v10. +db.version(14).stores({ companionGoals: 'id, moduleId, status, [moduleId+status]', _memory: 'id, category, confidence, lastConfirmed, [category+confidence]', _nudgeOutcomes: '++id, nudgeId, nudgeType, outcome, timestamp, [nudgeType+outcome]', companionConversations: 'id, createdAt', companionMessages: 'id, conversationId, role, createdAt, [conversationId+createdAt]', - // Rituals rituals: 'id, status, createdAt', ritualSteps: 'id, ritualId, order, [ritualId+order]', ritualLogs: '++id, ritualId, date, [ritualId+date]', diff --git a/apps/mana/apps/web/src/lib/modules/companion/queries.ts b/apps/mana/apps/web/src/lib/modules/companion/queries.ts index f1f436707..9c205e79b 100644 --- a/apps/mana/apps/web/src/lib/modules/companion/queries.ts +++ b/apps/mana/apps/web/src/lib/modules/companion/queries.ts @@ -3,23 +3,31 @@ */ import { useLiveQueryWithDefault } from '@mana/local-store/svelte'; -import { conversationTable, messageTable } from './collections'; +import { db } from '$lib/data/database'; import type { LocalConversation, LocalMessage } from './types'; export function useConversations() { return useLiveQueryWithDefault(async () => { - const all = await conversationTable.toArray(); - return all.filter((c) => !c.deletedAt).sort((a, b) => b.updatedAt.localeCompare(a.updatedAt)); + try { + const all = await db.table('companionConversations').toArray(); + return all.filter((c) => !c.deletedAt).sort((a, b) => b.updatedAt.localeCompare(a.updatedAt)); + } catch { + return []; + } }, []); } export function useMessages(conversationId: string) { return useLiveQueryWithDefault(async () => { if (!conversationId) return []; - const msgs = await messageTable - .where('conversationId') - .equals(conversationId) - .sortBy('createdAt'); - return msgs; + try { + return await db + .table('companionMessages') + .where('conversationId') + .equals(conversationId) + .sortBy('createdAt'); + } catch { + return []; + } }, []); } diff --git a/apps/mana/apps/web/src/lib/modules/companion/stores/chat.svelte.ts b/apps/mana/apps/web/src/lib/modules/companion/stores/chat.svelte.ts index c781588dc..01ea0df92 100644 --- a/apps/mana/apps/web/src/lib/modules/companion/stores/chat.svelte.ts +++ b/apps/mana/apps/web/src/lib/modules/companion/stores/chat.svelte.ts @@ -6,9 +6,12 @@ * Can be upgraded to the LLM orchestrator for multi-tier support. */ -import { conversationTable, messageTable } from '../collections'; +import { db } from '$lib/data/database'; import type { LocalConversation, LocalMessage } from '../types'; +const CONV_TABLE = 'companionConversations'; +const MSG_TABLE = 'companionMessages'; + // ── Conversation CRUD ─────────────────────────────── export const chatStore = { @@ -20,19 +23,19 @@ export const chatStore = { createdAt: now, updatedAt: now, }; - await conversationTable.add(conv); + await db.table(CONV_TABLE).add(conv); return conv; }, async renameConversation(id: string, title: string): Promise { - await conversationTable.update(id, { + await db.table(CONV_TABLE).update(id, { title, updatedAt: new Date().toISOString(), }); }, async deleteConversation(id: string): Promise { - await conversationTable.update(id, { + await db.table(CONV_TABLE).update(id, { deletedAt: new Date().toISOString(), updatedAt: new Date().toISOString(), }); @@ -58,10 +61,10 @@ export const chatStore = { toolResult: extra?.toolResult, createdAt: new Date().toISOString(), }; - await messageTable.add(msg); + await db.table(MSG_TABLE).add(msg); // Touch conversation updatedAt - await conversationTable.update(conversationId, { + await db.table(CONV_TABLE).update(conversationId, { updatedAt: msg.createdAt, }); @@ -69,10 +72,14 @@ export const chatStore = { }, async updateMessageContent(id: string, content: string): Promise { - await messageTable.update(id, { content }); + await db.table(MSG_TABLE).update(id, { content }); }, async getMessages(conversationId: string): Promise { - return messageTable.where('conversationId').equals(conversationId).sortBy('createdAt'); + return db + .table(MSG_TABLE) + .where('conversationId') + .equals(conversationId) + .sortBy('createdAt'); }, }; diff --git a/apps/mana/apps/web/src/routes/(app)/companion/+page.svelte b/apps/mana/apps/web/src/routes/(app)/companion/+page.svelte index de41581d8..e9e9f54b5 100644 --- a/apps/mana/apps/web/src/routes/(app)/companion/+page.svelte +++ b/apps/mana/apps/web/src/routes/(app)/companion/+page.svelte @@ -113,11 +113,12 @@