diff --git a/components/MessageInput.tsx b/components/MessageInput.tsx index ddb92cb..fe6dc37 100644 --- a/components/MessageInput.tsx +++ b/components/MessageInput.tsx @@ -8,7 +8,7 @@ import type { Message } from '@/lib/api'; const MAX_RECORDING_SECONDS = 60; export default function MessageInput() { - const { currentId, setCurrentId, addMessage, setIsLoading, isLoading, setConversations } = useStore(); + const { currentId, setCurrentId, addMessage, setIsLoading, isLoading, setConversations, settings } = useStore(); const [text, setText] = useState(''); const [recording, setRecording] = useState(false); const [transcribing, setTranscribing] = useState(false); @@ -55,7 +55,7 @@ export default function MessageInput() { setIsLoading(true); try { - const data = await api.sendMessage(message, convId); + const data = await api.sendMessage(message, convId, settings.share_time ?? true); setCurrentId(data.conversation_id); addMessage({ role: 'assistant', diff --git a/components/SettingsPanel.tsx b/components/SettingsPanel.tsx index 08dce17..9f3f423 100644 --- a/components/SettingsPanel.tsx +++ b/components/SettingsPanel.tsx @@ -166,6 +166,9 @@ export default function SettingsPanel() { updateSetting('show_sources', v)} /> + + updateSetting('share_time', v)} /> + {/* Memory */} @@ -323,6 +326,9 @@ export default function SettingsPanel() {
+ {status?.watcher_ingestion && ( + + )}
@@ -441,3 +447,16 @@ function StatusRow({ label, value, ok, yellow }: { label: string; value: string; ); } + +function IngestionRow({ ingestion }: { ingestion: { status: string; message: string; file_count: number } }) { + const color = ingestion.status === 'ingesting' ? '#c8821a' : ingestion.status === 'error' ? '#a32d2d' : '#888780'; + const label = ingestion.status === 'ingesting' + ? `Ingesting ${ingestion.file_count} file(s)...` + : ingestion.message || 'Idle'; + return ( +
+ + {label} +
+ ); +} diff --git a/lib/api.ts b/lib/api.ts index ec00cea..ab8ff49 100644 --- a/lib/api.ts +++ b/lib/api.ts @@ -25,8 +25,15 @@ export const api = { request<{ deleted: string }>(`/conversations/${id}`, { method: 'DELETE' }), clearAllConversations: () => request<{ cleared: boolean }>('/conversations', { method: 'DELETE' }), - sendMessage: (message: string, conversation_id: string) => - request('/chat', { method: 'POST', body: JSON.stringify({ message, conversation_id }) }), + sendMessage: (message: string, conversation_id: string, share_time = true) => + request('/chat', { + method: 'POST', + body: JSON.stringify({ + message, + conversation_id, + ...(share_time ? { client_time: new Date().toISOString() } : {}), + }), + }), getMemory: () => request<{ content: string }>('/memory'), updateMemory: (content: string) => request<{ saved: boolean }>('/memory', { method: 'POST', body: JSON.stringify({ content }) }), @@ -73,6 +80,7 @@ export interface Settings { font_size: 'small' | 'medium' | 'large'; web_search: boolean; show_sources: boolean; + share_time: boolean; dream_hour_utc: number; dream_minute_utc: number; dream_mode: string; @@ -106,6 +114,7 @@ export interface DreamerStatus { export interface Status { aaron_ai: string; watcher: string; + watcher_ingestion?: { status: string; message: string; file_count: number }; chunk_count: number; file_count: number; last_indexed: string; diff --git a/lib/store.ts b/lib/store.ts index c9c173b..d07662a 100644 --- a/lib/store.ts +++ b/lib/store.ts @@ -47,6 +47,7 @@ export const useStore = create()( font_size: 'medium', web_search: true, show_sources: true, + share_time: true, dream_hour_utc: 8, dream_minute_utc: 0, dream_mode: 'nrem',