From 41961a69807eb6796adcb190aee1c90856a935e9 Mon Sep 17 00:00:00 2001 From: Jarvis Date: Thu, 2 Apr 2026 20:24:16 -0500 Subject: [PATCH] feat(memory): define MemoryAdapter interface types Co-Authored-By: Claude Opus 4.6 --- packages/memory/src/index.ts | 7 ++++ packages/memory/src/types.ts | 72 ++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 packages/memory/src/types.ts diff --git a/packages/memory/src/index.ts b/packages/memory/src/index.ts index ebe925c..3648f73 100644 --- a/packages/memory/src/index.ts +++ b/packages/memory/src/index.ts @@ -13,3 +13,10 @@ export { type SearchResult, } from './insights.js'; export type { VectorStore, VectorSearchResult, EmbeddingProvider } from './vector-store.js'; +export type { + MemoryAdapter, + MemoryConfig, + NewInsight as AdapterNewInsight, + Insight as AdapterInsight, + InsightSearchResult, +} from './types.js'; diff --git a/packages/memory/src/types.ts b/packages/memory/src/types.ts new file mode 100644 index 0000000..cddc2a6 --- /dev/null +++ b/packages/memory/src/types.ts @@ -0,0 +1,72 @@ +export type { EmbeddingProvider, VectorSearchResult } from './vector-store.js'; +import type { EmbeddingProvider } from './vector-store.js'; + +/* ------------------------------------------------------------------ */ +/* Insight types (adapter-level, decoupled from Drizzle schema) */ +/* ------------------------------------------------------------------ */ + +export interface NewInsight { + userId: string; + content: string; + source: string; + category: string; + relevanceScore: number; + metadata?: Record; + embedding?: number[]; +} + +export interface Insight extends NewInsight { + id: string; + createdAt: Date; + updatedAt?: Date; + decayedAt?: Date; +} + +export interface InsightSearchResult { + id: string; + content: string; + score: number; + metadata?: Record; +} + +/* ------------------------------------------------------------------ */ +/* MemoryAdapter interface */ +/* ------------------------------------------------------------------ */ + +export interface MemoryAdapter { + readonly name: string; + + // Preferences + getPreference(userId: string, key: string): Promise; + setPreference(userId: string, key: string, value: unknown, category?: string): Promise; + deletePreference(userId: string, key: string): Promise; + listPreferences( + userId: string, + category?: string, + ): Promise>; + + // Insights + storeInsight(insight: NewInsight): Promise; + getInsight(id: string): Promise; + searchInsights( + userId: string, + query: string, + opts?: { limit?: number; embedding?: number[] }, + ): Promise; + deleteInsight(id: string): Promise; + + // Embedding + readonly embedder: EmbeddingProvider | null; + + // Lifecycle + close(): Promise; +} + +/* ------------------------------------------------------------------ */ +/* MemoryConfig */ +/* ------------------------------------------------------------------ */ + +export type MemoryConfig = + | { type: 'pgvector'; embedder?: EmbeddingProvider } + | { type: 'sqlite-vec'; embedder?: EmbeddingProvider } + | { type: 'keyword' };