/** * Store observation function * Extracted from SessionStore.ts for modular organization */ import { Database } from 'bun:sqlite'; import type { ObservationInput, StoreObservationResult } from './types.js'; /** * Store an observation (from SDK parsing) * Assumes session already exists (created by hook) */ export function storeObservation( db: Database, memorySessionId: string, project: string, observation: ObservationInput, promptNumber?: number, discoveryTokens: number = 0, overrideTimestampEpoch?: number ): StoreObservationResult { // Use override timestamp if provided (for processing backlog messages with original timestamps) const timestampEpoch = overrideTimestampEpoch ?? Date.now(); const timestampIso = new Date(timestampEpoch).toISOString(); const stmt = db.prepare(` INSERT INTO observations (memory_session_id, project, type, title, subtitle, facts, narrative, concepts, files_read, files_modified, prompt_number, discovery_tokens, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) `); const result = stmt.run( memorySessionId, project, observation.type, observation.title, observation.subtitle, JSON.stringify(observation.facts), observation.narrative, JSON.stringify(observation.concepts), JSON.stringify(observation.files_read), JSON.stringify(observation.files_modified), promptNumber || null, discoveryTokens, timestampIso, timestampEpoch ); return { id: Number(result.lastInsertRowid), createdAtEpoch: timestampEpoch }; }