@skillkit/memory 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/types.ts","../src/database/schema.ts","../src/database/cozo-adapter.ts","../src/embeddings/encoder.ts","../src/embeddings/search.ts","../src/stores/memory-store.ts","../src/index.ts","../src/database/index.ts","../src/embeddings/index.ts","../src/stores/index.ts","../src/tiers/tier-manager.ts"],"sourcesContent":["export type MemoryCategory =\n | 'fact'\n | 'decision'\n | 'preference'\n | 'pattern'\n | 'insight'\n | 'reasoning';\n\nexport type MemoryTier = 'warm' | 'long';\n\nexport interface PersistentMemory {\n id: string;\n agentId: string;\n category: MemoryCategory;\n tier: MemoryTier;\n content: string;\n embedding: number[];\n reinforcementScore: number;\n createdAt: string;\n updatedAt: string;\n accessCount: number;\n lastAccessedAt: string;\n tags: string[];\n metadata: Record<string, unknown>;\n}\n\nexport interface MemoryCreateInput {\n agentId: string;\n category: MemoryCategory;\n content: string;\n tier?: MemoryTier;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface MemoryUpdateInput {\n category?: MemoryCategory;\n tier?: MemoryTier;\n content?: string;\n tags?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport interface MemorySearchOptions {\n agentId?: string;\n category?: MemoryCategory;\n tier?: MemoryTier;\n tags?: string[];\n limit?: number;\n threshold?: number;\n}\n\nexport interface MemorySearchResult {\n memory: PersistentMemory;\n score: number;\n}\n\nexport interface MemoryLink {\n id: string;\n sourceId: string;\n targetId: string;\n relationshipType: 'related' | 'derived' | 'contradicts' | 'supports';\n strength: number;\n createdAt: string;\n}\n\nexport interface MemoryStats {\n totalMemories: number;\n byCategory: Record<MemoryCategory, number>;\n byTier: Record<MemoryTier, number>;\n avgReinforcementScore: number;\n oldestMemory: string | null;\n newestMemory: string | null;\n}\n\nexport interface TierPromotionConfig {\n accessCountThreshold: number;\n reinforcementScoreThreshold: number;\n ageThresholdDays: number;\n}\n\nexport const DEFAULT_TIER_PROMOTION_CONFIG: TierPromotionConfig = {\n accessCountThreshold: 5,\n reinforcementScoreThreshold: 0.7,\n ageThresholdDays: 7,\n};\n\nexport interface MemoryDatabaseConfig {\n dbPath: string;\n embeddingDimension: number;\n maxConnections: number;\n}\n\nexport const DEFAULT_EMBEDDING_DIMENSION = 384;\n","import type { CozoDb } from 'cozo-node';\n\nexport const MEMORY_SCHEMA = `\n:create memories {\n id: String\n =>\n agent_id: String,\n category: String,\n tier: String,\n content: String,\n reinforcement_score: Float,\n created_at: String,\n updated_at: String,\n access_count: Int,\n last_accessed_at: String,\n tags: [String],\n metadata: String\n}\n\n:create memory_vec {\n id: String\n =>\n embedding: <F32; 384>\n}\n\n:create memory_links {\n id: String\n =>\n source_id: String,\n target_id: String,\n relationship_type: String,\n strength: Float,\n created_at: String\n}\n\n::hnsw create memory_vec:embedding_idx {\n dim: 384,\n m: 16,\n ef_construction: 100,\n dtype: F32,\n fields: [embedding],\n distance: Cosine,\n filter: null\n}\n`;\n\nexport const CREATE_MEMORIES_TABLE = `\n:create memories {\n id: String\n =>\n agent_id: String,\n category: String,\n tier: String,\n content: String,\n reinforcement_score: Float,\n created_at: String,\n updated_at: String,\n access_count: Int,\n last_accessed_at: String,\n tags: [String],\n metadata: String\n}\n`;\n\nexport const CREATE_MEMORY_VEC_TABLE = `\n:create memory_vec {\n id: String\n =>\n embedding: <F32; 384>\n}\n`;\n\nexport const CREATE_MEMORY_LINKS_TABLE = `\n:create memory_links {\n id: String\n =>\n source_id: String,\n target_id: String,\n relationship_type: String,\n strength: Float,\n created_at: String\n}\n`;\n\nexport const CREATE_HNSW_INDEX = `\n::hnsw create memory_vec:embedding_idx {\n dim: 384,\n m: 16,\n ef_construction: 100,\n dtype: F32,\n fields: [embedding],\n distance: Cosine,\n filter: null\n}\n`;\n\nexport async function initializeSchema(db: CozoDb): Promise<void> {\n const tables = ['memories', 'memory_vec', 'memory_links'];\n\n for (const table of tables) {\n try {\n await db.run(`?[id] := *${table}{id} :limit 1`);\n } catch {\n switch (table) {\n case 'memories':\n await db.run(CREATE_MEMORIES_TABLE);\n break;\n case 'memory_vec':\n await db.run(CREATE_MEMORY_VEC_TABLE);\n break;\n case 'memory_links':\n await db.run(CREATE_MEMORY_LINKS_TABLE);\n break;\n }\n }\n }\n\n try {\n await db.run(CREATE_HNSW_INDEX);\n } catch {\n }\n}\n\nexport async function dropSchema(db: CozoDb): Promise<void> {\n try {\n await db.run('::hnsw drop memory_vec:embedding_idx');\n } catch {\n }\n\n const tables = ['memory_links', 'memory_vec', 'memories'];\n for (const table of tables) {\n try {\n await db.run(`::remove ${table}`);\n } catch {\n }\n }\n}\n","import { CozoDb } from 'cozo-node';\nimport { mkdir } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { homedir } from 'node:os';\nimport { initializeSchema, dropSchema } from './schema.js';\n\nexport interface CozoAdapterOptions {\n agentId: string;\n dbPath?: string;\n}\n\nexport class CozoAdapter {\n private db: CozoDb | null = null;\n private dbPath: string;\n private initialized = false;\n\n constructor(options: CozoAdapterOptions) {\n this.dbPath = options.dbPath ?? this.getDefaultDbPath(options.agentId);\n }\n\n private getDefaultDbPath(agentId: string): string {\n return join(homedir(), '.skillkit', 'agents', agentId, 'memory.db');\n }\n\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n await mkdir(dirname(this.dbPath), { recursive: true });\n\n this.db = new CozoDb('rocksdb', this.dbPath);\n await initializeSchema(this.db);\n this.initialized = true;\n }\n\n async close(): Promise<void> {\n if (this.db) {\n this.db.close();\n this.db = null;\n this.initialized = false;\n }\n }\n\n async reset(): Promise<void> {\n if (!this.db) throw new Error('Database not initialized');\n await dropSchema(this.db);\n await initializeSchema(this.db);\n }\n\n async run(query: string, params?: Record<string, unknown>): Promise<CozoResult> {\n if (!this.db) throw new Error('Database not initialized');\n\n const result = await this.db.run(query, params);\n return {\n headers: result.headers,\n rows: result.rows,\n ok: result.ok,\n };\n }\n\n async insertMemory(\n id: string,\n agentId: string,\n category: string,\n tier: string,\n content: string,\n reinforcementScore: number,\n createdAt: string,\n updatedAt: string,\n accessCount: number,\n lastAccessedAt: string,\n tags: string[],\n metadata: Record<string, unknown>\n ): Promise<void> {\n const query = `\n ?[id, agent_id, category, tier, content, reinforcement_score, created_at, updated_at, access_count, last_accessed_at, tags, metadata] <- [[\n $id, $agent_id, $category, $tier, $content, $reinforcement_score, $created_at, $updated_at, $access_count, $last_accessed_at, $tags, $metadata\n ]]\n :put memories {\n id, agent_id, category, tier, content, reinforcement_score, created_at, updated_at, access_count, last_accessed_at, tags, metadata\n }\n `;\n\n await this.run(query, {\n id,\n agent_id: agentId,\n category,\n tier,\n content,\n reinforcement_score: reinforcementScore,\n created_at: createdAt,\n updated_at: updatedAt,\n access_count: accessCount,\n last_accessed_at: lastAccessedAt,\n tags,\n metadata: JSON.stringify(metadata),\n });\n }\n\n async insertEmbedding(id: string, embedding: number[]): Promise<void> {\n const query = `\n ?[id, embedding] <- [[$id, $embedding]]\n :put memory_vec { id, embedding }\n `;\n\n await this.run(query, { id, embedding });\n }\n\n async getMemory(id: string): Promise<MemoryRow | null> {\n const query = `\n ?[id, agent_id, category, tier, content, reinforcement_score, created_at, updated_at, access_count, last_accessed_at, tags, metadata] :=\n *memories[id, agent_id, category, tier, content, reinforcement_score, created_at, updated_at, access_count, last_accessed_at, tags, metadata],\n id == $id\n `;\n\n const result = await this.run(query, { id });\n if (result.rows.length === 0) return null;\n\n return this.rowToMemory(result.rows[0]);\n }\n\n async getMemoriesByAgent(agentId: string, limit = 100): Promise<MemoryRow[]> {\n const query = `\n ?[id, agent_id, category, tier, content, reinforcement_score, created_at, updated_at, access_count, last_accessed_at, tags, metadata] :=\n *memories[id, agent_id, category, tier, content, reinforcement_score, created_at, updated_at, access_count, last_accessed_at, tags, metadata],\n agent_id == $agent_id\n :limit $limit\n `;\n\n const result = await this.run(query, { agent_id: agentId, limit });\n return result.rows.map(row => this.rowToMemory(row));\n }\n\n async updateMemory(\n id: string,\n updates: Partial<{\n category: string;\n tier: string;\n content: string;\n reinforcementScore: number;\n updatedAt: string;\n accessCount: number;\n lastAccessedAt: string;\n tags: string[];\n metadata: Record<string, unknown>;\n }>\n ): Promise<void> {\n const existing = await this.getMemory(id);\n if (!existing) throw new Error(`Memory ${id} not found`);\n\n const query = `\n ?[id, agent_id, category, tier, content, reinforcement_score, created_at, updated_at, access_count, last_accessed_at, tags, metadata] <- [[\n $id, $agent_id, $category, $tier, $content, $reinforcement_score, $created_at, $updated_at, $access_count, $last_accessed_at, $tags, $metadata\n ]]\n :put memories {\n id, agent_id, category, tier, content, reinforcement_score, created_at, updated_at, access_count, last_accessed_at, tags, metadata\n }\n `;\n\n await this.run(query, {\n id,\n agent_id: existing.agentId,\n category: updates.category ?? existing.category,\n tier: updates.tier ?? existing.tier,\n content: updates.content ?? existing.content,\n reinforcement_score: updates.reinforcementScore ?? existing.reinforcementScore,\n created_at: existing.createdAt,\n updated_at: updates.updatedAt ?? new Date().toISOString(),\n access_count: updates.accessCount ?? existing.accessCount,\n last_accessed_at: updates.lastAccessedAt ?? existing.lastAccessedAt,\n tags: updates.tags ?? existing.tags,\n metadata: JSON.stringify(updates.metadata ?? existing.metadata),\n });\n }\n\n async deleteMemory(id: string): Promise<void> {\n const deleteMemory = `\n ?[id] <- [[$id]]\n :rm memories { id }\n `;\n const deleteEmbedding = `\n ?[id] <- [[$id]]\n :rm memory_vec { id }\n `;\n\n await this.run(deleteMemory, { id });\n await this.run(deleteEmbedding, { id });\n }\n\n async semanticSearch(\n embedding: number[],\n limit = 10,\n _agentId?: string,\n _category?: string,\n _tier?: string\n ): Promise<Array<{ id: string; score: number }>> {\n const params: Record<string, unknown> = { embedding, limit };\n\n const query = `\n ?[id, score] := ~memory_vec:embedding_idx{ id, embedding |\n query: $embedding,\n k: $limit,\n ef: 50\n }, score = cos_dist(embedding, $embedding)\n :order score\n :limit $limit\n `;\n\n const result = await this.run(query, params);\n return result.rows.map(row => ({\n id: row[0] as string,\n score: 1 - (row[1] as number),\n }));\n }\n\n async insertLink(\n id: string,\n sourceId: string,\n targetId: string,\n relationshipType: string,\n strength: number,\n createdAt: string\n ): Promise<void> {\n const query = `\n ?[id, source_id, target_id, relationship_type, strength, created_at] <- [[\n $id, $source_id, $target_id, $relationship_type, $strength, $created_at\n ]]\n :put memory_links { id, source_id, target_id, relationship_type, strength, created_at }\n `;\n\n await this.run(query, {\n id,\n source_id: sourceId,\n target_id: targetId,\n relationship_type: relationshipType,\n strength,\n created_at: createdAt,\n });\n }\n\n async getLinks(memoryId: string): Promise<LinkRow[]> {\n const query = `\n ?[id, source_id, target_id, relationship_type, strength, created_at] :=\n *memory_links[id, source_id, target_id, relationship_type, strength, created_at],\n or(source_id == $memory_id, target_id == $memory_id)\n `;\n\n const result = await this.run(query, { memory_id: memoryId });\n return result.rows.map(row => ({\n id: row[0] as string,\n sourceId: row[1] as string,\n targetId: row[2] as string,\n relationshipType: row[3] as string,\n strength: row[4] as number,\n createdAt: row[5] as string,\n }));\n }\n\n async getStats(agentId?: string): Promise<StatsRow> {\n let condition = '';\n const params: Record<string, unknown> = {};\n\n if (agentId) {\n condition = ', agent_id == $agent_id';\n params.agent_id = agentId;\n }\n\n const countQuery = `\n ?[count(id)] := *memories[id, agent_id, _, _, _, _, _, _, _, _, _, _]${condition}\n `;\n const countResult = await this.run(countQuery, params);\n const total = countResult.rows[0]?.[0] as number ?? 0;\n\n const categoryQuery = `\n ?[category, count(id)] := *memories[id, agent_id, category, _, _, _, _, _, _, _, _, _]${condition}\n `;\n const categoryResult = await this.run(categoryQuery, params);\n const byCategory: Record<string, number> = {};\n for (const row of categoryResult.rows) {\n byCategory[row[0] as string] = row[1] as number;\n }\n\n const tierQuery = `\n ?[tier, count(id)] := *memories[id, agent_id, _, tier, _, _, _, _, _, _, _, _]${condition}\n `;\n const tierResult = await this.run(tierQuery, params);\n const byTier: Record<string, number> = {};\n for (const row of tierResult.rows) {\n byTier[row[0] as string] = row[1] as number;\n }\n\n return {\n total,\n byCategory,\n byTier,\n };\n }\n\n private rowToMemory(row: unknown[]): MemoryRow {\n return {\n id: row[0] as string,\n agentId: row[1] as string,\n category: row[2] as string,\n tier: row[3] as string,\n content: row[4] as string,\n reinforcementScore: row[5] as number,\n createdAt: row[6] as string,\n updatedAt: row[7] as string,\n accessCount: row[8] as number,\n lastAccessedAt: row[9] as string,\n tags: row[10] as string[],\n metadata: JSON.parse(row[11] as string),\n };\n }\n\n get isInitialized(): boolean {\n return this.initialized;\n }\n\n get path(): string {\n return this.dbPath;\n }\n}\n\nexport interface CozoResult {\n headers: string[];\n rows: unknown[][];\n ok: boolean;\n}\n\nexport interface MemoryRow {\n id: string;\n agentId: string;\n category: string;\n tier: string;\n content: string;\n reinforcementScore: number;\n createdAt: string;\n updatedAt: string;\n accessCount: number;\n lastAccessedAt: string;\n tags: string[];\n metadata: Record<string, unknown>;\n}\n\nexport interface LinkRow {\n id: string;\n sourceId: string;\n targetId: string;\n relationshipType: string;\n strength: number;\n createdAt: string;\n}\n\nexport interface StatsRow {\n total: number;\n byCategory: Record<string, number>;\n byTier: Record<string, number>;\n}\n","import { pipeline, env } from '@xenova/transformers';\nimport { DEFAULT_EMBEDDING_DIMENSION } from '../types.js';\n\nenv.cacheDir = './.cache/transformers';\n\nlet embeddingPipeline: any = null;\nlet initPromise: Promise<void> | null = null;\n\nconst DEFAULT_MODEL = 'Xenova/all-MiniLM-L6-v2';\n\nexport interface EncoderOptions {\n model?: string;\n cacheDir?: string;\n}\n\nexport async function initializeEncoder(options: EncoderOptions = {}): Promise<void> {\n if (embeddingPipeline) return;\n\n if (initPromise) {\n await initPromise;\n return;\n }\n\n initPromise = (async () => {\n if (options.cacheDir) {\n env.cacheDir = options.cacheDir;\n }\n\n const modelName = options.model ?? DEFAULT_MODEL;\n embeddingPipeline = await pipeline('feature-extraction', modelName, {\n quantized: true,\n } as any);\n })();\n\n try {\n await initPromise;\n } catch (error) {\n initPromise = null;\n throw error;\n }\n}\n\nexport async function encode(text: string): Promise<number[]> {\n if (!embeddingPipeline) {\n await initializeEncoder();\n }\n\n if (!embeddingPipeline) {\n throw new Error('Failed to initialize embedding pipeline');\n }\n\n const output = await embeddingPipeline(text, {\n pooling: 'mean',\n normalize: true,\n } as any);\n\n const embedding = Array.from((output as any).data as Float32Array);\n\n if (embedding.length !== DEFAULT_EMBEDDING_DIMENSION) {\n throw new Error(\n `Embedding dimension mismatch: expected ${DEFAULT_EMBEDDING_DIMENSION}, got ${embedding.length}`\n );\n }\n\n return embedding;\n}\n\nexport async function encodeBatch(texts: string[]): Promise<number[][]> {\n if (texts.length === 0) return [];\n\n if (!embeddingPipeline) {\n await initializeEncoder();\n }\n\n if (!embeddingPipeline) {\n throw new Error('Failed to initialize embedding pipeline');\n }\n\n const embeddings: number[][] = [];\n\n for (const text of texts) {\n const output = await embeddingPipeline(text, {\n pooling: 'mean',\n normalize: true,\n } as any);\n embeddings.push(Array.from((output as any).data as Float32Array));\n }\n\n return embeddings;\n}\n\nexport function cosineSimilarity(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n throw new Error('Vectors must have the same dimension');\n }\n\n let dotProduct = 0;\n let normA = 0;\n let normB = 0;\n\n for (let i = 0; i < a.length; i++) {\n dotProduct += a[i] * b[i];\n normA += a[i] * a[i];\n normB += b[i] * b[i];\n }\n\n const denominator = Math.sqrt(normA) * Math.sqrt(normB);\n if (denominator === 0) return 0;\n\n return dotProduct / denominator;\n}\n\nexport function euclideanDistance(a: number[], b: number[]): number {\n if (a.length !== b.length) {\n throw new Error('Vectors must have the same dimension');\n }\n\n let sum = 0;\n for (let i = 0; i < a.length; i++) {\n const diff = a[i] - b[i];\n sum += diff * diff;\n }\n\n return Math.sqrt(sum);\n}\n\nexport function isEncoderReady(): boolean {\n return embeddingPipeline !== null;\n}\n\nexport async function disposeEncoder(): Promise<void> {\n if (embeddingPipeline) {\n try {\n await embeddingPipeline.dispose();\n } catch {\n }\n }\n embeddingPipeline = null;\n initPromise = null;\n}\n","import type { CozoAdapter } from '../database/cozo-adapter.js';\nimport type { PersistentMemory, MemorySearchOptions, MemorySearchResult } from '../types.js';\nimport { encode } from './encoder.js';\n\nexport interface SemanticSearchOptions extends MemorySearchOptions {\n minScore?: number;\n includeSimilar?: boolean;\n maxSimilarPerResult?: number;\n}\n\nexport class SemanticSearch {\n constructor(private adapter: CozoAdapter) {}\n\n async search(\n query: string,\n options: SemanticSearchOptions = {}\n ): Promise<MemorySearchResult[]> {\n const {\n agentId,\n category,\n tier,\n limit = 10,\n threshold = 0.5,\n minScore = 0,\n } = options;\n\n const queryEmbedding = await encode(query);\n\n const results = await this.adapter.semanticSearch(\n queryEmbedding,\n limit * 5,\n agentId,\n category,\n tier\n );\n\n const searchResults: MemorySearchResult[] = [];\n\n for (const { id, score } of results) {\n if (score < Math.max(threshold, minScore)) continue;\n if (searchResults.length >= limit) break;\n\n const memory = await this.adapter.getMemory(id);\n if (!memory) continue;\n\n if (agentId && memory.agentId !== agentId) continue;\n if (category && memory.category !== category) continue;\n if (tier && memory.tier !== tier) continue;\n\n searchResults.push({\n memory: this.rowToMemory(memory),\n score,\n });\n }\n\n return searchResults;\n }\n\n async findSimilar(\n memoryId: string,\n limit = 5,\n excludeSelf = true\n ): Promise<MemorySearchResult[]> {\n const memory = await this.adapter.getMemory(memoryId);\n if (!memory) {\n throw new Error(`Memory ${memoryId} not found`);\n }\n\n const embedding = await encode(memory.content);\n\n const results = await this.adapter.semanticSearch(\n embedding,\n limit + (excludeSelf ? 1 : 0),\n memory.agentId\n );\n\n const searchResults: MemorySearchResult[] = [];\n\n for (const { id, score } of results) {\n if (excludeSelf && id === memoryId) continue;\n if (searchResults.length >= limit) break;\n\n const similarMemory = await this.adapter.getMemory(id);\n if (!similarMemory) continue;\n\n searchResults.push({\n memory: this.rowToMemory(similarMemory),\n score,\n });\n }\n\n return searchResults;\n }\n\n async searchByCategory(\n query: string,\n category: string,\n limit = 10\n ): Promise<MemorySearchResult[]> {\n return this.search(query, { category: category as any, limit });\n }\n\n async searchByTier(\n query: string,\n tier: 'warm' | 'long',\n limit = 10\n ): Promise<MemorySearchResult[]> {\n return this.search(query, { tier, limit });\n }\n\n async hybridSearch(\n query: string,\n keywords: string[],\n options: SemanticSearchOptions = {}\n ): Promise<MemorySearchResult[]> {\n const semanticResults = await this.search(query, {\n ...options,\n limit: (options.limit ?? 10) * 2,\n });\n\n const scoredResults = semanticResults.map(result => {\n let keywordBoost = 0;\n const contentLower = result.memory.content.toLowerCase();\n\n for (const keyword of keywords) {\n if (contentLower.includes(keyword.toLowerCase())) {\n keywordBoost += 0.1;\n }\n }\n\n return {\n ...result,\n score: Math.min(1, result.score + keywordBoost),\n };\n });\n\n scoredResults.sort((a, b) => b.score - a.score);\n\n return scoredResults.slice(0, options.limit ?? 10);\n }\n\n private rowToMemory(row: any): PersistentMemory {\n return {\n id: row.id,\n agentId: row.agentId,\n category: row.category as PersistentMemory['category'],\n tier: row.tier as PersistentMemory['tier'],\n content: row.content,\n embedding: row.embedding || [],\n reinforcementScore: row.reinforcementScore,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n accessCount: row.accessCount,\n lastAccessedAt: row.lastAccessedAt,\n tags: row.tags,\n metadata: row.metadata,\n };\n }\n}\n\nexport async function quickSearch(\n adapter: CozoAdapter,\n query: string,\n options: SemanticSearchOptions = {}\n): Promise<MemorySearchResult[]> {\n const search = new SemanticSearch(adapter);\n return search.search(query, options);\n}\n","import { randomUUID } from 'node:crypto';\nimport { CozoAdapter } from '../database/cozo-adapter.js';\nimport { encode } from '../embeddings/encoder.js';\nimport type {\n PersistentMemory,\n MemoryCreateInput,\n MemoryUpdateInput,\n MemoryCategory,\n MemoryTier,\n MemoryLink,\n MemoryStats,\n MemorySearchResult,\n MemorySearchOptions,\n} from '../types.js';\nimport { SemanticSearch } from '../embeddings/search.js';\n\nexport class MemoryStore {\n private adapter: CozoAdapter;\n private search: SemanticSearch;\n\n constructor(agentId: string, dbPath?: string) {\n this.adapter = new CozoAdapter({ agentId, dbPath });\n this.search = new SemanticSearch(this.adapter);\n }\n\n async initialize(): Promise<void> {\n await this.adapter.initialize();\n }\n\n async close(): Promise<void> {\n await this.adapter.close();\n }\n\n async create(input: MemoryCreateInput): Promise<PersistentMemory> {\n const id = randomUUID();\n const now = new Date().toISOString();\n const embedding = await encode(input.content);\n\n await this.adapter.insertMemory(\n id,\n input.agentId,\n input.category,\n input.tier ?? 'warm',\n input.content,\n 1.0,\n now,\n now,\n 0,\n now,\n input.tags ?? [],\n input.metadata ?? {}\n );\n\n await this.adapter.insertEmbedding(id, embedding);\n\n return {\n id,\n agentId: input.agentId,\n category: input.category,\n tier: input.tier ?? 'warm',\n content: input.content,\n embedding,\n reinforcementScore: 1.0,\n createdAt: now,\n updatedAt: now,\n accessCount: 0,\n lastAccessedAt: now,\n tags: input.tags ?? [],\n metadata: input.metadata ?? {},\n };\n }\n\n async get(id: string): Promise<PersistentMemory | null> {\n const row = await this.adapter.getMemory(id);\n if (!row) return null;\n\n await this.adapter.updateMemory(id, {\n accessCount: row.accessCount + 1,\n lastAccessedAt: new Date().toISOString(),\n });\n\n return {\n id: row.id,\n agentId: row.agentId,\n category: row.category as MemoryCategory,\n tier: row.tier as MemoryTier,\n content: row.content,\n embedding: [],\n reinforcementScore: row.reinforcementScore,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n accessCount: row.accessCount + 1,\n lastAccessedAt: new Date().toISOString(),\n tags: row.tags,\n metadata: row.metadata,\n };\n }\n\n async update(id: string, input: MemoryUpdateInput): Promise<PersistentMemory> {\n const existing = await this.adapter.getMemory(id);\n if (!existing) {\n throw new Error(`Memory ${id} not found`);\n }\n\n const updates: Record<string, unknown> = {\n updatedAt: new Date().toISOString(),\n };\n\n if (input.category) updates.category = input.category;\n if (input.tier) updates.tier = input.tier;\n if (input.tags) updates.tags = input.tags;\n if (input.metadata) updates.metadata = input.metadata;\n\n if (input.content && input.content !== existing.content) {\n updates.content = input.content;\n const embedding = await encode(input.content);\n await this.adapter.insertEmbedding(id, embedding);\n }\n\n await this.adapter.updateMemory(id, updates as any);\n\n const updated = await this.adapter.getMemory(id);\n if (!updated) {\n throw new Error(`Failed to update memory ${id}`);\n }\n\n return {\n id: updated.id,\n agentId: updated.agentId,\n category: updated.category as MemoryCategory,\n tier: updated.tier as MemoryTier,\n content: updated.content,\n embedding: [],\n reinforcementScore: updated.reinforcementScore,\n createdAt: updated.createdAt,\n updatedAt: updated.updatedAt,\n accessCount: updated.accessCount,\n lastAccessedAt: updated.lastAccessedAt,\n tags: updated.tags,\n metadata: updated.metadata,\n };\n }\n\n async delete(id: string): Promise<void> {\n await this.adapter.deleteMemory(id);\n }\n\n async list(agentId: string, limit = 100): Promise<PersistentMemory[]> {\n const rows = await this.adapter.getMemoriesByAgent(agentId, limit);\n\n return rows.map(row => ({\n id: row.id,\n agentId: row.agentId,\n category: row.category as MemoryCategory,\n tier: row.tier as MemoryTier,\n content: row.content,\n embedding: [],\n reinforcementScore: row.reinforcementScore,\n createdAt: row.createdAt,\n updatedAt: row.updatedAt,\n accessCount: row.accessCount,\n lastAccessedAt: row.lastAccessedAt,\n tags: row.tags,\n metadata: row.metadata,\n }));\n }\n\n async semanticSearch(\n query: string,\n options: MemorySearchOptions = {}\n ): Promise<MemorySearchResult[]> {\n return this.search.search(query, options);\n }\n\n async findSimilar(memoryId: string, limit = 5): Promise<MemorySearchResult[]> {\n return this.search.findSimilar(memoryId, limit);\n }\n\n async reinforce(id: string, amount = 0.1): Promise<PersistentMemory> {\n const existing = await this.adapter.getMemory(id);\n if (!existing) {\n throw new Error(`Memory ${id} not found`);\n }\n\n const newScore = Math.min(1, existing.reinforcementScore + amount);\n\n await this.adapter.updateMemory(id, {\n reinforcementScore: newScore,\n updatedAt: new Date().toISOString(),\n });\n\n return this.get(id) as Promise<PersistentMemory>;\n }\n\n async weaken(id: string, amount = 0.1): Promise<PersistentMemory> {\n const existing = await this.adapter.getMemory(id);\n if (!existing) {\n throw new Error(`Memory ${id} not found`);\n }\n\n const newScore = Math.max(0, existing.reinforcementScore - amount);\n\n await this.adapter.updateMemory(id, {\n reinforcementScore: newScore,\n updatedAt: new Date().toISOString(),\n });\n\n return this.get(id) as Promise<PersistentMemory>;\n }\n\n async link(\n sourceId: string,\n targetId: string,\n relationshipType: MemoryLink['relationshipType'],\n strength = 1.0\n ): Promise<MemoryLink> {\n const id = randomUUID();\n const now = new Date().toISOString();\n\n await this.adapter.insertLink(id, sourceId, targetId, relationshipType, strength, now);\n\n return {\n id,\n sourceId,\n targetId,\n relationshipType,\n strength,\n createdAt: now,\n };\n }\n\n async getLinks(memoryId: string): Promise<MemoryLink[]> {\n const rows = await this.adapter.getLinks(memoryId);\n\n return rows.map(row => ({\n id: row.id,\n sourceId: row.sourceId,\n targetId: row.targetId,\n relationshipType: row.relationshipType as MemoryLink['relationshipType'],\n strength: row.strength,\n createdAt: row.createdAt,\n }));\n }\n\n async getStats(agentId?: string): Promise<MemoryStats> {\n const stats = await this.adapter.getStats(agentId);\n\n const byCategory: Record<MemoryCategory, number> = {\n fact: stats.byCategory.fact ?? 0,\n decision: stats.byCategory.decision ?? 0,\n preference: stats.byCategory.preference ?? 0,\n pattern: stats.byCategory.pattern ?? 0,\n insight: stats.byCategory.insight ?? 0,\n reasoning: stats.byCategory.reasoning ?? 0,\n };\n\n const byTier: Record<MemoryTier, number> = {\n warm: stats.byTier.warm ?? 0,\n long: stats.byTier.long ?? 0,\n };\n\n return {\n totalMemories: stats.total,\n byCategory,\n byTier,\n avgReinforcementScore: 0,\n oldestMemory: null,\n newestMemory: null,\n };\n }\n\n async promoteToLongTerm(id: string): Promise<PersistentMemory> {\n return this.update(id, { tier: 'long' });\n }\n\n async demoteToWarm(id: string): Promise<PersistentMemory> {\n return this.update(id, { tier: 'warm' });\n }\n\n get isInitialized(): boolean {\n return this.adapter.isInitialized;\n }\n\n get dbPath(): string {\n return this.adapter.path;\n }\n}\n","export * from './types.js';\n\nexport { CozoAdapter, type CozoAdapterOptions, type CozoResult, type MemoryRow, type LinkRow, type StatsRow } from './database/index.js';\nexport { initializeSchema, dropSchema } from './database/index.js';\n\nexport {\n initializeEncoder,\n encode,\n encodeBatch,\n cosineSimilarity,\n euclideanDistance,\n isEncoderReady,\n disposeEncoder,\n type EncoderOptions,\n SemanticSearch,\n quickSearch,\n type SemanticSearchOptions,\n} from './embeddings/index.js';\n\nexport { MemoryStore } from './stores/index.js';\n\nexport { TierManager, createTierManager, type TierEvaluationResult } from './tiers/index.js';\n\nexport async function createMemoryStore(agentId: string, dbPath?: string): Promise<import('./stores/memory-store.js').MemoryStore> {\n const { MemoryStore } = await import('./stores/memory-store.js');\n const store = new MemoryStore(agentId, dbPath);\n await store.initialize();\n return store;\n}\n","export { CozoAdapter, type CozoAdapterOptions, type CozoResult, type MemoryRow, type LinkRow, type StatsRow } from './cozo-adapter.js';\nexport { initializeSchema, dropSchema } from './schema.js';\n","export {\n initializeEncoder,\n encode,\n encodeBatch,\n cosineSimilarity,\n euclideanDistance,\n isEncoderReady,\n disposeEncoder,\n type EncoderOptions,\n} from './encoder.js';\n\nexport {\n SemanticSearch,\n quickSearch,\n type SemanticSearchOptions,\n} from './search.js';\n","export { MemoryStore } from './memory-store.js';\n","import type { MemoryStore } from '../stores/memory-store.js';\nimport type {\n PersistentMemory,\n TierPromotionConfig,\n MemoryTier,\n} from '../types.js';\nimport { DEFAULT_TIER_PROMOTION_CONFIG } from '../types.js';\n\nexport interface TierEvaluationResult {\n memoryId: string;\n currentTier: MemoryTier;\n suggestedTier: MemoryTier;\n reason: string;\n score: number;\n}\n\nexport class TierManager {\n private config: TierPromotionConfig;\n\n constructor(config: Partial<TierPromotionConfig> = {}) {\n this.config = { ...DEFAULT_TIER_PROMOTION_CONFIG, ...config };\n }\n\n evaluateForPromotion(memory: PersistentMemory): TierEvaluationResult {\n const score = this.calculatePromotionScore(memory);\n const threshold = 0.7;\n\n const shouldPromote = memory.tier === 'warm' && score >= threshold;\n const shouldDemote = memory.tier === 'long' && score < 0.3;\n\n let suggestedTier = memory.tier;\n let reason = 'Memory is appropriately tiered';\n\n if (shouldPromote) {\n suggestedTier = 'long';\n reason = this.getPromotionReason(memory);\n } else if (shouldDemote) {\n suggestedTier = 'warm';\n reason = this.getDemotionReason(memory);\n }\n\n return {\n memoryId: memory.id,\n currentTier: memory.tier,\n suggestedTier,\n reason,\n score,\n };\n }\n\n calculatePromotionScore(memory: PersistentMemory): number {\n const accessScore = Math.min(1, memory.accessCount / this.config.accessCountThreshold);\n\n const reinforcementScore = memory.reinforcementScore / this.config.reinforcementScoreThreshold;\n\n const ageMs = Date.now() - new Date(memory.createdAt).getTime();\n const ageDays = ageMs / (1000 * 60 * 60 * 24);\n const ageScore = Math.min(1, ageDays / this.config.ageThresholdDays);\n\n const recencyMs = Date.now() - new Date(memory.lastAccessedAt).getTime();\n const recencyDays = recencyMs / (1000 * 60 * 60 * 24);\n const recencyScore = Math.max(0, 1 - recencyDays / 30);\n\n const weights = {\n access: 0.3,\n reinforcement: 0.35,\n age: 0.15,\n recency: 0.2,\n };\n\n return (\n accessScore * weights.access +\n Math.min(1, reinforcementScore) * weights.reinforcement +\n ageScore * weights.age +\n recencyScore * weights.recency\n );\n }\n\n async evaluateAll(store: MemoryStore, agentId: string): Promise<TierEvaluationResult[]> {\n const memories = await store.list(agentId);\n return memories.map(memory => this.evaluateForPromotion(memory));\n }\n\n async applyRecommendations(\n store: MemoryStore,\n evaluations: TierEvaluationResult[]\n ): Promise<{ promoted: string[]; demoted: string[] }> {\n const promoted: string[] = [];\n const demoted: string[] = [];\n\n for (const evaluation of evaluations) {\n if (evaluation.currentTier === evaluation.suggestedTier) continue;\n\n if (evaluation.suggestedTier === 'long') {\n await store.promoteToLongTerm(evaluation.memoryId);\n promoted.push(evaluation.memoryId);\n } else {\n await store.demoteToWarm(evaluation.memoryId);\n demoted.push(evaluation.memoryId);\n }\n }\n\n return { promoted, demoted };\n }\n\n async autoPromote(\n store: MemoryStore,\n agentId: string\n ): Promise<{ promoted: string[]; demoted: string[] }> {\n const evaluations = await this.evaluateAll(store, agentId);\n return this.applyRecommendations(store, evaluations);\n }\n\n getConfig(): TierPromotionConfig {\n return { ...this.config };\n }\n\n updateConfig(updates: Partial<TierPromotionConfig>): void {\n this.config = { ...this.config, ...updates };\n }\n\n private getPromotionReason(memory: PersistentMemory): string {\n const reasons: string[] = [];\n\n if (memory.accessCount >= this.config.accessCountThreshold) {\n reasons.push(`accessed ${memory.accessCount} times`);\n }\n\n if (memory.reinforcementScore >= this.config.reinforcementScoreThreshold) {\n reasons.push(`high reinforcement (${memory.reinforcementScore.toFixed(2)})`);\n }\n\n const ageDays = (Date.now() - new Date(memory.createdAt).getTime()) / (1000 * 60 * 60 * 24);\n if (ageDays >= this.config.ageThresholdDays) {\n reasons.push(`${Math.floor(ageDays)} days old`);\n }\n\n return reasons.length > 0\n ? `Promote to long-term: ${reasons.join(', ')}`\n : 'Memory qualifies for long-term storage';\n }\n\n private getDemotionReason(memory: PersistentMemory): string {\n const reasons: string[] = [];\n\n if (memory.reinforcementScore < 0.3) {\n reasons.push(`low reinforcement (${memory.reinforcementScore.toFixed(2)})`);\n }\n\n const recencyDays =\n (Date.now() - new Date(memory.lastAccessedAt).getTime()) / (1000 * 60 * 60 * 24);\n if (recencyDays > 30) {\n reasons.push(`not accessed in ${Math.floor(recencyDays)} days`);\n }\n\n return reasons.length > 0\n ? `Demote to warm: ${reasons.join(', ')}`\n : 'Memory no longer qualifies for long-term storage';\n }\n}\n\nexport function createTierManager(config?: Partial<TierPromotionConfig>): TierManager {\n return new TierManager(config);\n}\n"],"mappings":"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","names":["MemoryStore"]}
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "@skillkit/memory",
3
+ "version": "1.8.0",
4
+ "description": "CozoDB-backed semantic memory with embeddings for SkillKit",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ }
13
+ },
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "dependencies": {
18
+ "cozo-node": "^0.7.6",
19
+ "@xenova/transformers": "^2.17.2",
20
+ "@skillkit/core": "1.8.0"
21
+ },
22
+ "devDependencies": {
23
+ "tsup": "^8.0.1",
24
+ "typescript": "^5.3.3",
25
+ "vitest": "^1.2.0"
26
+ },
27
+ "engines": {
28
+ "node": ">=18"
29
+ },
30
+ "repository": {
31
+ "type": "git",
32
+ "url": "https://github.com/rohitg00/skillkit.git",
33
+ "directory": "packages/memory"
34
+ },
35
+ "keywords": [
36
+ "skillkit",
37
+ "memory",
38
+ "cozodb",
39
+ "embeddings",
40
+ "semantic-search"
41
+ ],
42
+ "license": "Apache-2.0",
43
+ "scripts": {
44
+ "build": "tsup",
45
+ "dev": "tsup --watch",
46
+ "typecheck": "tsc --noEmit",
47
+ "test": "vitest run",
48
+ "test:watch": "vitest"
49
+ }
50
+ }