From 368b43cb8e754319e1882e7c0913a489e5267747 Mon Sep 17 00:00:00 2001 From: Antigravity Date: Sat, 9 May 2026 14:40:36 +0000 Subject: [PATCH] feat: improve AI Chat UX, add notebook summary, and fix shared/reminders routing --- memento-note/app/(main)/layout.tsx | 4 +- memento-note/app/(main)/page.tsx | 1 + memento-note/app/(main)/reminders/page.tsx | 9 - .../general/general-settings-client.tsx | 2 + memento-note/app/api/chat/route.ts | 9 +- memento-note/app/globals.css | 10 +- memento-note/app/layout.tsx | 4 + .../components/admin-providers-wrapper.tsx | 18 +- memento-note/components/ai-chat.tsx | 44 ++--- .../components/chat/chat-container.tsx | 4 +- memento-note/components/chat/chat-input.tsx | 10 +- .../components/chat/chat-messages.tsx | 2 +- memento-note/components/chat/chat-sidebar.tsx | 2 +- .../components/contextual-ai-chat.tsx | 168 +++++++++--------- .../components/direction-initializer.tsx | 6 +- memento-note/components/home-client.tsx | 65 +++++-- memento-note/components/sidebar.tsx | 83 +++++---- memento-note/lib/i18n/LanguageProvider.tsx | 19 +- memento-note/lib/i18n/detect-user-language.ts | 13 +- memento-note/next.config.ts | 15 ++ 20 files changed, 292 insertions(+), 196 deletions(-) delete mode 100644 memento-note/app/(main)/reminders/page.tsx diff --git a/memento-note/app/(main)/layout.tsx b/memento-note/app/(main)/layout.tsx index 6922f1c..c06ba40 100644 --- a/memento-note/app/(main)/layout.tsx +++ b/memento-note/app/(main)/layout.tsx @@ -31,12 +31,12 @@ export default async function MainLayout({ return ( {/* No top-bar header — sidebar-only navigation (architectural-grid design) */} -
+
}> -
+
{children}
diff --git a/memento-note/app/(main)/page.tsx b/memento-note/app/(main)/page.tsx index 8615f62..49c507a 100644 --- a/memento-note/app/(main)/page.tsx +++ b/memento-note/app/(main)/page.tsx @@ -25,6 +25,7 @@ export default async function HomePage() { notesViewMode, noteHistory: settings?.noteHistory === true, noteHistoryMode: (settings?.noteHistoryMode ?? 'manual') as 'manual' | 'auto', + aiAssistantEnabled: settings?.paragraphRefactor !== false, }} /> ) diff --git a/memento-note/app/(main)/reminders/page.tsx b/memento-note/app/(main)/reminders/page.tsx deleted file mode 100644 index 00ce5a8..0000000 --- a/memento-note/app/(main)/reminders/page.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import { getNotesWithReminders } from '@/app/actions/notes' -import { RemindersPage } from '@/components/reminders-page' - -export const dynamic = 'force-dynamic' - -export default async function RemindersRoute() { - const notes = await getNotesWithReminders() - return -} diff --git a/memento-note/app/(main)/settings/general/general-settings-client.tsx b/memento-note/app/(main)/settings/general/general-settings-client.tsx index 1f1d2e1..4123555 100644 --- a/memento-note/app/(main)/settings/general/general-settings-client.tsx +++ b/memento-note/app/(main)/settings/general/general-settings-client.tsx @@ -29,9 +29,11 @@ export function GeneralSettingsClient({ initialSettings }: GeneralSettingsClient await updateAISettings({ preferredLanguage: value as any }) if (value === 'auto') { localStorage.removeItem('user-language') + document.cookie = 'user-language=;path=/;max-age=0' toast.success(t('settings.languageAuto') || 'Language set to Auto') } else { localStorage.setItem('user-language', value) + document.cookie = `user-language=${value};path=/;max-age=${60 * 60 * 24 * 365};samesite=lax` setContextLanguage(value as any) toast.success(t('profile.languageUpdateSuccess') || 'Language updated') } diff --git a/memento-note/app/api/chat/route.ts b/memento-note/app/api/chat/route.ts index a24cd0a..a412eb3 100644 --- a/memento-note/app/api/chat/route.ts +++ b/memento-note/app/api/chat/route.ts @@ -273,22 +273,21 @@ Focus ONLY on this note unless asked otherwise.` const provider = getChatProvider(sysConfig) const result = await streamText({ - model: provider.chatModel, + model: provider.getModel(), system: systemPrompt, messages: incomingMessages, tools: chatTools, maxSteps: 5, onFinish: async (final) => { - // Save messages to DB const userContent = incomingMessages[incomingMessages.length - 1].content - await prisma.message.create({ + await prisma.chatMessage.create({ data: { conversationId: conversation.id, role: 'user', content: userContent } }) - await prisma.message.create({ + await prisma.chatMessage.create({ data: { conversationId: conversation.id, role: 'assistant', content: final.text } }) } }) - return result.toDataStreamResponse() + return result.toUIMessageStreamResponse() } diff --git a/memento-note/app/globals.css b/memento-note/app/globals.css index dcd8661..31cd3d9 100644 --- a/memento-note/app/globals.css +++ b/memento-note/app/globals.css @@ -15,9 +15,11 @@ /* Memento — Architectural Grid (réf. architectural-grid1) */ --color-memento-desk: #E5E2D9; --color-memento-paper: #F2F0E9; + --color-memento-sidebar: #F6F4F0; --color-memento-ink: #1C1C1C; --color-primary: #ACB995; --color-memento-accent: #D4A373; + --color-memento-blue: #75B2D6; --color-memento-paper-elevated: #faf9f5; --color-background-light: var(--color-memento-paper); --color-background-dark: #202020; @@ -342,8 +344,8 @@ html.dark .memento-active-nav { :root { --radius: 0.5rem; - --memento-desk: #F9F8F6; - --background: #F9F8F6; + --memento-desk: #E5E2D9; + --background: #F2F0E9; --foreground: #212529; --card: #ffffff; --card-foreground: #212529; @@ -365,7 +367,7 @@ html.dark .memento-active-nav { --pinned-gold: #F59E0B; --sage-green: #10B981; - --sidebar: #ffffff; + --sidebar: #F6F4F0; --sidebar-foreground: #212529; --sidebar-primary: #212529; --sidebar-primary-foreground: #F9F8F6; @@ -403,7 +405,7 @@ html.dark { --border: rgba(28, 28, 28, 0.1); --input: rgba(28, 28, 28, 0.12); --ring: rgba(28, 28, 28, 0.35); - --sidebar: color-mix(in oklab, #ffffff 65%, #F2F0E9); + --sidebar: #F6F4F0; --sidebar-foreground: #1C1C1C; --sidebar-primary: #1C1C1C; --sidebar-primary-foreground: #F2F0E9; diff --git a/memento-note/app/layout.tsx b/memento-note/app/layout.tsx index db48e02..531d560 100644 --- a/memento-note/app/layout.tsx +++ b/memento-note/app/layout.tsx @@ -75,6 +75,10 @@ const directionScript = ` (function(){ try { var lang = localStorage.getItem('user-language'); + if (!lang) { + var c = document.cookie.split(';').map(function(s){return s.trim()}).find(function(s){return s.startsWith('user-language=')}); + if (c) lang = c.split('=')[1]; + } if (lang === 'fa' || lang === 'ar') { document.documentElement.dir = 'rtl'; document.documentElement.lang = lang; diff --git a/memento-note/components/admin-providers-wrapper.tsx b/memento-note/components/admin-providers-wrapper.tsx index 796479c..666a4cf 100644 --- a/memento-note/components/admin-providers-wrapper.tsx +++ b/memento-note/components/admin-providers-wrapper.tsx @@ -1,6 +1,8 @@ 'use client' import { LanguageProvider } from '@/lib/i18n/LanguageProvider' +import { NoteRefreshProvider } from '@/context/NoteRefreshContext' +import { QueryProvider } from '@/components/query-provider' import type { Translations } from '@/lib/i18n/load-translations' import type { ReactNode } from 'react' @@ -16,11 +18,15 @@ export function AdminProvidersWrapper({ initialTranslations, }: AdminProvidersWrapperProps) { return ( - - {children} - + + + + {children} + + + ) } diff --git a/memento-note/components/ai-chat.tsx b/memento-note/components/ai-chat.tsx index ca520d1..29e99f0 100644 --- a/memento-note/components/ai-chat.tsx +++ b/memento-note/components/ai-chat.tsx @@ -152,18 +152,18 @@ export function AIChat({ showFloatingTrigger = true }: { showFloatingTrigger?: b return ( ) } return (