@agentskit/memory 0.8.3 → 0.10.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.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/file-chat.ts","../src/sqlite.ts","../src/turso.ts","../src/redis-client.ts","../src/redis-chat.ts","../src/redis-vector.ts","../src/vector/filter.ts","../src/file-vector.ts","../src/personalization.ts","../src/graph.ts","../src/vector/pgvector.ts","../src/vector/pinecone.ts","../src/vector/qdrant.ts","../src/vector/chroma.ts","../src/vector/upstash.ts","../src/vector/supabase.ts","../src/vector/weaviate.ts","../src/vector/milvus.ts","../src/vector/mongo-atlas.ts","../src/encrypted.ts","../src/hierarchical.ts"],"names":["serializeMessages","deserializeMessages","MemoryError","ErrorCodes","encodeMessages","decodeMessages","call","cachedSdk","loadSdk"],"mappings":"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","file":"index.js","sourcesContent":["import type { ChatMemory, MemoryRecord } from '@agentskit/core'\nimport { deserializeMessages, serializeMessages } from '@agentskit/core'\n\n/**\n * ChatMemory backed by a JSON file on disk. Node-only.\n *\n * Implements the Memory contract (ADR 0003):\n * - load() returns a snapshot (CM1)\n * - save() is replace-all, not append (CM2)\n * - empty state returns [] (CM5)\n * - clear() is optional but provided here\n */\nexport function fileChatMemory(path: string): ChatMemory {\n return {\n async load() {\n try {\n const fs = await import('node:fs/promises')\n const raw = await fs.readFile(path, 'utf8')\n return deserializeMessages(JSON.parse(raw) as MemoryRecord)\n } catch {\n return []\n }\n },\n async save(messages) {\n const fs = await import('node:fs/promises')\n await fs.writeFile(path, JSON.stringify(serializeMessages(messages), null, 2), 'utf8')\n },\n async clear() {\n try {\n const fs = await import('node:fs/promises')\n await fs.unlink(path)\n } catch {\n // Ignore missing files.\n }\n },\n }\n}\n","import type { ChatMemory, Message, MemoryRecord } from '@agentskit/core'\nimport {\n ErrorCodes,\n MemoryError,\n deserializeMessages,\n serializeMessages,\n} from '@agentskit/core'\n\nexport interface SqliteChatMemoryConfig {\n path: string\n conversationId?: string\n}\n\nfunction encodeMessages(messages: Message[]): string {\n return JSON.stringify(serializeMessages(messages))\n}\n\nfunction decodeMessages(json: string | undefined): Message[] {\n if (!json) return []\n try {\n return deserializeMessages(JSON.parse(json) as MemoryRecord)\n } catch {\n return []\n }\n}\n\ninterface SqliteDb {\n prepare(sql: string): {\n run(...args: unknown[]): void\n get(...args: unknown[]): Record<string, unknown> | undefined\n }\n}\n\nasync function openDatabase(path: string): Promise<SqliteDb> {\n try {\n const mod = await import('better-sqlite3')\n const Database = mod.default ?? mod\n return new (Database as new (p: string) => SqliteDb)(path)\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install better-sqlite3 to use sqliteChatMemory: npm install better-sqlite3',\n hint: 'sqliteChatMemory uses the optional peer \"better-sqlite3\".',\n })\n }\n}\n\nexport function sqliteChatMemory(config: SqliteChatMemoryConfig): ChatMemory {\n const conversationId = config.conversationId ?? 'default'\n let dbPromise: Promise<SqliteDb> | null = null\n\n const getDb = (): Promise<SqliteDb> => {\n if (!dbPromise) {\n dbPromise = openDatabase(config.path).then(db => {\n db.prepare(`\n CREATE TABLE IF NOT EXISTS conversations (\n id TEXT PRIMARY KEY,\n messages TEXT NOT NULL\n )\n `).run()\n return db\n })\n }\n return dbPromise\n }\n\n return {\n async load() {\n const db = await getDb()\n const row = db.prepare('SELECT messages FROM conversations WHERE id = ?').get(conversationId)\n return decodeMessages(row?.messages as string | undefined)\n },\n async save(messages) {\n const db = await getDb()\n const json = encodeMessages(messages)\n db.prepare(`\n INSERT INTO conversations (id, messages) VALUES (?, ?)\n ON CONFLICT(id) DO UPDATE SET messages = ?\n `).run(conversationId, json, json)\n },\n async clear() {\n const db = await getDb()\n db.prepare('DELETE FROM conversations WHERE id = ?').run(conversationId)\n },\n }\n}\n","import type { ChatMemory, Message, MemoryRecord } from '@agentskit/core'\nimport {\n ErrorCodes,\n MemoryError,\n deserializeMessages,\n serializeMessages,\n} from '@agentskit/core'\n\nexport interface TursoChatMemoryConfig {\n /** libSQL URL — file:..., libsql://..., or http://... */\n url: string\n /** Auth token — required for hosted (libsql://) URLs. */\n authToken?: string\n conversationId?: string\n}\n\ninterface LibsqlClient {\n execute(args: { sql: string; args?: unknown[] }): Promise<{ rows: Array<Record<string, unknown>> }>\n}\n\ninterface LibsqlModule {\n createClient(config: { url: string; authToken?: string }): LibsqlClient\n}\n\nlet cachedSdk: Promise<LibsqlModule> | null = null\nasync function loadSdk(): Promise<LibsqlModule> {\n if (!cachedSdk) {\n cachedSdk = (async () => {\n try {\n const moduleId = '@libsql/client'\n return (await import(/* @vite-ignore */ moduleId)) as unknown as LibsqlModule\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install @libsql/client to use tursoChatMemory: npm install @libsql/client',\n hint: 'tursoChatMemory uses the optional peer \"@libsql/client\".',\n })\n }\n })()\n }\n return cachedSdk\n}\n\nfunction encodeMessages(messages: Message[]): string {\n return JSON.stringify(serializeMessages(messages))\n}\n\nfunction decodeMessages(json: string | undefined): Message[] {\n if (!json) return []\n try {\n return deserializeMessages(JSON.parse(json) as MemoryRecord)\n } catch {\n return []\n }\n}\n\n/**\n * libSQL / Turso-backed chat memory. Mirrors the `sqliteChatMemory` shape so\n * code paths can swap between local SQLite and replicated libSQL by changing\n * one import.\n *\n * `@libsql/client` is an optional peer dependency loaded lazily.\n */\nexport function tursoChatMemory(config: TursoChatMemoryConfig): ChatMemory {\n const conversationId = config.conversationId ?? 'default'\n let clientPromise: Promise<LibsqlClient> | null = null\n\n const getClient = async (): Promise<LibsqlClient> => {\n if (!clientPromise) {\n clientPromise = (async () => {\n const sdk = await loadSdk()\n const client = sdk.createClient({ url: config.url, authToken: config.authToken })\n await client.execute({\n sql: 'CREATE TABLE IF NOT EXISTS conversations (id TEXT PRIMARY KEY, messages TEXT NOT NULL)',\n })\n return client\n })()\n }\n return clientPromise\n }\n\n return {\n async load() {\n const client = await getClient()\n const result = await client.execute({\n sql: 'SELECT messages FROM conversations WHERE id = ?',\n args: [conversationId],\n })\n const row = result.rows[0]\n return decodeMessages(row?.messages as string | undefined)\n },\n async save(messages) {\n const client = await getClient()\n const json = encodeMessages(messages)\n await client.execute({\n sql: `INSERT INTO conversations (id, messages) VALUES (?, ?)\n ON CONFLICT(id) DO UPDATE SET messages = excluded.messages`,\n args: [conversationId, json],\n })\n },\n async clear() {\n const client = await getClient()\n await client.execute({\n sql: 'DELETE FROM conversations WHERE id = ?',\n args: [conversationId],\n })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\n\n/**\n * Internal Redis client adapter interface.\n * Abstracts the underlying Redis library so it can be swapped\n * (e.g., from `redis` to `ioredis`) without changing consumers.\n */\nexport interface RedisClientAdapter {\n get(key: string): Promise<string | null>\n set(key: string, value: string): Promise<void>\n del(key: string | string[]): Promise<void>\n keys(pattern: string): Promise<string[]>\n disconnect(): Promise<void>\n call(command: string, ...args: (string | number | Buffer)[]): Promise<unknown>\n}\n\nexport interface RedisConnectionConfig {\n url: string\n client?: RedisClientAdapter\n}\n\nexport async function createRedisClientAdapter(url: string): Promise<RedisClientAdapter> {\n let redis: typeof import('redis')\n try {\n redis = await import('redis')\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install redis to use Redis memory backends: npm install redis',\n hint: 'redisChatMemory and redisVectorMemory use the optional peer \"redis\".',\n })\n }\n\n const client = redis.createClient({ url })\n await client.connect()\n\n return {\n async get(key) {\n return await client.get(key)\n },\n async set(key, value) {\n await client.set(key, value)\n },\n async del(key) {\n const keys = Array.isArray(key) ? key : [key]\n if (keys.length > 0) await client.del(keys)\n },\n async keys(pattern) {\n return await client.keys(pattern)\n },\n async disconnect() {\n await client.disconnect()\n },\n async call(command, ...args) {\n return await client.sendCommand([command, ...args.map(String)])\n },\n }\n}\n","import type { ChatMemory, Message, MemoryRecord } from '@agentskit/core'\nimport { serializeMessages, deserializeMessages } from '@agentskit/core'\nimport type { RedisClientAdapter, RedisConnectionConfig } from './redis-client'\nimport { createRedisClientAdapter } from './redis-client'\n\nexport interface RedisChatMemoryConfig extends RedisConnectionConfig {\n keyPrefix?: string\n conversationId?: string\n}\n\nfunction encodeMessages(messages: Message[]): string {\n return JSON.stringify(serializeMessages(messages))\n}\n\nfunction decodeMessages(json: string | null): Message[] {\n if (!json) return []\n try {\n return deserializeMessages(JSON.parse(json) as MemoryRecord)\n } catch {\n return []\n }\n}\n\nexport function redisChatMemory(config: RedisChatMemoryConfig): ChatMemory {\n const prefix = config.keyPrefix ?? 'agentskit:chat'\n const convId = config.conversationId ?? 'default'\n const key = `${prefix}:${convId}`\n let clientPromise: Promise<RedisClientAdapter> | null = null\n\n const getClient = (): Promise<RedisClientAdapter> => {\n if (config.client) return Promise.resolve(config.client)\n if (!clientPromise) clientPromise = createRedisClientAdapter(config.url)\n return clientPromise\n }\n\n return {\n async load() {\n const client = await getClient()\n const json = await client.get(key)\n return decodeMessages(json)\n },\n async save(messages) {\n const client = await getClient()\n await client.set(key, encodeMessages(messages))\n },\n async clear() {\n const client = await getClient()\n await client.del(key)\n },\n }\n}\n","import type { VectorMemory, VectorDocument, RetrievedDocument } from '@agentskit/core'\nimport type { RedisClientAdapter, RedisConnectionConfig } from './redis-client'\nimport { createRedisClientAdapter } from './redis-client'\n\nexport interface RedisVectorMemoryConfig extends RedisConnectionConfig {\n indexName?: string\n keyPrefix?: string\n dimensions?: number\n}\n\nfunction float32Buffer(vector: number[]): Buffer {\n const buffer = Buffer.alloc(vector.length * 4)\n for (let i = 0; i < vector.length; i++) {\n buffer.writeFloatLE(vector[i], i * 4)\n }\n return buffer\n}\n\nexport function redisVectorMemory(config: RedisVectorMemoryConfig): VectorMemory {\n const indexName = config.indexName ?? 'agentskit:vectors:idx'\n const prefix = config.keyPrefix ?? 'agentskit:vec'\n const dimensions = config.dimensions ?? 0\n let clientPromise: Promise<RedisClientAdapter> | null = null\n let indexCreated = false\n\n const getClient = (): Promise<RedisClientAdapter> => {\n if (config.client) return Promise.resolve(config.client)\n if (!clientPromise) clientPromise = createRedisClientAdapter(config.url)\n return clientPromise\n }\n\n const ensureIndex = async (client: RedisClientAdapter, dims: number) => {\n if (indexCreated) return\n try {\n await client.call(\n 'FT.CREATE', indexName,\n 'ON', 'HASH',\n 'PREFIX', '1', `${prefix}:`,\n 'SCHEMA',\n 'content', 'TEXT',\n 'metadata', 'TEXT',\n 'embedding', 'VECTOR', 'HNSW', '6',\n 'TYPE', 'FLOAT32',\n 'DIM', dims,\n 'DISTANCE_METRIC', 'COSINE',\n )\n } catch (err: unknown) {\n const msg = String(err)\n if (!msg.includes('Index already exists')) throw err\n }\n indexCreated = true\n }\n\n return {\n async store(docs: VectorDocument[]) {\n const client = await getClient()\n const dims = dimensions || docs[0]?.embedding.length || 0\n if (dims > 0) await ensureIndex(client, dims)\n\n for (const doc of docs) {\n const key = `${prefix}:${doc.id}`\n await client.call(\n 'HSET', key,\n 'content', doc.content,\n 'metadata', JSON.stringify(doc.metadata ?? {}),\n 'embedding', float32Buffer(doc.embedding),\n )\n }\n },\n async search(embedding, options) {\n const client = await getClient()\n const topK = options?.topK ?? 5\n const threshold = options?.threshold ?? 0\n\n const result = await client.call(\n 'FT.SEARCH', indexName,\n `*=>[KNN ${topK} @embedding $vec AS score]`,\n 'PARAMS', '2', 'vec', float32Buffer(embedding),\n 'SORTBY', 'score',\n 'RETURN', '3', 'content', 'metadata', 'score',\n 'DIALECT', '2',\n ) as unknown[]\n\n if (!Array.isArray(result) || result.length < 2) return []\n\n const docs: RetrievedDocument[] = []\n // FT.SEARCH returns [total, key1, [field, val, ...], key2, [field, val, ...], ...]\n for (let i = 1; i < result.length; i += 2) {\n const key = String(result[i])\n const fields = result[i + 1] as string[]\n if (!Array.isArray(fields)) continue\n\n const fieldMap: Record<string, string> = {}\n for (let j = 0; j < fields.length; j += 2) {\n fieldMap[fields[j]] = fields[j + 1]\n }\n\n const score = 1 - parseFloat(fieldMap.score ?? '1') // COSINE distance → similarity\n if (score < threshold) continue\n\n docs.push({\n id: key.replace(`${prefix}:`, ''),\n content: fieldMap.content ?? '',\n score,\n metadata: fieldMap.metadata ? JSON.parse(fieldMap.metadata) : undefined,\n })\n }\n\n return docs\n },\n async delete(ids) {\n const client = await getClient()\n await client.del(ids.map(id => `${prefix}:${id}`))\n },\n }\n}\n","import type {\n VectorFilter,\n VectorFilterCompound,\n VectorFilterOperator,\n VectorFilterPredicate,\n VectorFilterPrimitive,\n} from '@agentskit/core'\n\nfunction isPrimitive(value: unknown): value is VectorFilterPrimitive {\n const t = typeof value\n return value === null || t === 'string' || t === 'number' || t === 'boolean'\n}\n\nfunction evalOperator(actual: unknown, op: VectorFilterOperator): boolean {\n if ('$eq' in op) return actual === op.$eq\n if ('$ne' in op) return actual !== op.$ne\n if ('$in' in op) return op.$in.includes(actual as VectorFilterPrimitive)\n if ('$nin' in op) return !op.$nin.includes(actual as VectorFilterPrimitive)\n if ('$gt' in op) return (actual as number | string) > op.$gt\n if ('$gte' in op) return (actual as number | string) >= op.$gte\n if ('$lt' in op) return (actual as number | string) < op.$lt\n if ('$lte' in op) return (actual as number | string) <= op.$lte\n if ('$exists' in op) return (actual !== undefined) === op.$exists\n return false\n}\n\nfunction evalPredicate(actual: unknown, predicate: VectorFilterPredicate): boolean {\n if (isPrimitive(predicate)) return actual === predicate\n return evalOperator(actual, predicate)\n}\n\n/**\n * Evaluate a `VectorFilter` against a metadata record. Used by in-memory /\n * file-backed vector stores. Backends with native filter languages (pgvector,\n * Pinecone, Qdrant, etc.) translate the filter to their own form instead.\n */\nexport function matchesFilter(metadata: Record<string, unknown> | undefined, filter: VectorFilter | undefined): boolean {\n if (!filter) return true\n const meta = metadata ?? {}\n\n const compound = filter as VectorFilterCompound\n if (compound.$and) return compound.$and.every(f => matchesFilter(meta, f))\n if (compound.$or) return compound.$or.some(f => matchesFilter(meta, f))\n\n for (const [field, predicate] of Object.entries(filter)) {\n if (field.startsWith('$')) continue\n if (!evalPredicate(meta[field], predicate as VectorFilterPredicate)) return false\n }\n return true\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { VectorMemory, VectorDocument, RetrievedDocument } from '@agentskit/core'\nimport type { VectorStore } from './vector-store'\nimport { matchesFilter } from './vector/filter'\n\nexport interface FileVectorMemoryConfig {\n path: string\n store?: VectorStore\n}\n\nfunction requireVectra(): { LocalIndex: new (path: string) => VectraIndex } {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require('vectra')\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install vectra to use fileVectorMemory: npm install vectra',\n hint: 'fileVectorMemory uses the optional peer \"vectra\" for the on-disk index.',\n })\n }\n}\n\ninterface VectraIndex {\n isIndexCreated(): Promise<boolean>\n createIndex(): Promise<void>\n insertItem(item: { vector: number[]; metadata: Record<string, unknown> }): Promise<unknown>\n queryItems(vector: number[], topK: number): Promise<Array<{ score: number; item: { metadata: Record<string, unknown> } }>>\n listItems(): Promise<Array<{ id: string; metadata: Record<string, unknown> }>>;\n deleteItem(id: string): Promise<void>\n}\n\nfunction createVectraStore(dirPath: string): VectorStore {\n let index: VectraIndex | null = null\n\n const getIndex = async (): Promise<VectraIndex> => {\n if (index) return index\n const { LocalIndex } = requireVectra()\n index = new LocalIndex(dirPath)\n if (!(await index.isIndexCreated())) {\n await index.createIndex()\n }\n return index\n }\n\n return {\n async upsert(docs) {\n const idx = await getIndex()\n for (const doc of docs) {\n await idx.insertItem({\n vector: doc.vector,\n metadata: { _id: doc.id, ...doc.metadata },\n })\n }\n },\n async query(vector, topK) {\n const idx = await getIndex()\n const results = await idx.queryItems(vector, topK)\n return results.map(r => ({\n id: String(r.item.metadata._id ?? ''),\n score: r.score,\n metadata: r.item.metadata,\n }))\n },\n async delete(ids) {\n const idx = await getIndex()\n const items = await idx.listItems()\n for (const item of items) {\n if (ids.includes(String(item.metadata._id ?? item.id))) {\n await idx.deleteItem(item.id)\n }\n }\n },\n }\n}\n\nexport function fileVectorMemory(config: FileVectorMemoryConfig): VectorMemory {\n const store = config.store ?? createVectraStore(config.path)\n const contentCache = new Map<string, string>()\n\n return {\n async store(docs: VectorDocument[]) {\n for (const doc of docs) {\n contentCache.set(doc.id, doc.content)\n }\n await store.upsert(docs.map(doc => ({\n id: doc.id,\n vector: doc.embedding,\n metadata: { content: doc.content, ...doc.metadata },\n })))\n },\n async search(embedding, options) {\n const topK = options?.topK ?? 5\n const threshold = options?.threshold ?? 0\n // Over-fetch when a filter is set so we can still return ~topK after filtering.\n const fetchK = options?.filter ? Math.max(topK * 4, 50) : topK\n const results = await store.query(embedding, fetchK)\n\n return results\n .filter(r => r.score >= threshold)\n .filter(r => matchesFilter(r.metadata, options?.filter))\n .slice(0, topK)\n .map((r): RetrievedDocument => ({\n id: r.id,\n content: String(r.metadata.content ?? contentCache.get(r.id) ?? ''),\n score: r.score,\n metadata: r.metadata,\n }))\n },\n async delete(ids) {\n for (const id of ids) contentCache.delete(id)\n await store.delete(ids)\n },\n }\n}\n","/**\n * Personalization — a persisted profile per subject (user id,\n * account id, device). The agent reads it on every run to\n * condition responses; the runtime updates it when new facts\n * appear.\n */\n\nexport interface PersonalizationProfile {\n subjectId: string\n /** Human-editable notes, facts, preferences. */\n traits: Record<string, unknown>\n /** ISO timestamp of the latest update. */\n updatedAt: string\n}\n\nexport interface PersonalizationStore {\n get: (subjectId: string) => Promise<PersonalizationProfile | null>\n set: (profile: PersonalizationProfile) => Promise<void>\n merge: (subjectId: string, traits: Record<string, unknown>) => Promise<PersonalizationProfile>\n delete?: (subjectId: string) => Promise<void>\n}\n\n/**\n * In-memory personalization store — tests, single-process demos.\n * Bring your own for production (Postgres, Redis, DynamoDB).\n */\nexport function createInMemoryPersonalization(): PersonalizationStore {\n const profiles = new Map<string, PersonalizationProfile>()\n\n return {\n async get(subjectId) {\n const hit = profiles.get(subjectId)\n return hit ? { ...hit, traits: { ...hit.traits } } : null\n },\n async set(profile) {\n profiles.set(profile.subjectId, {\n ...profile,\n traits: { ...profile.traits },\n updatedAt: profile.updatedAt || new Date().toISOString(),\n })\n },\n async merge(subjectId, traits) {\n const existing = profiles.get(subjectId)\n const next: PersonalizationProfile = {\n subjectId,\n traits: { ...(existing?.traits ?? {}), ...traits },\n updatedAt: new Date().toISOString(),\n }\n profiles.set(subjectId, next)\n return { ...next, traits: { ...next.traits } }\n },\n async delete(subjectId) {\n profiles.delete(subjectId)\n },\n }\n}\n\n/**\n * Render a profile into a system-prompt fragment the runtime can\n * prepend. Kept intentionally short — full profile dumps bloat\n * context and leak unnecessary detail to the model.\n */\nexport function renderProfileContext(profile: PersonalizationProfile | null): string {\n if (!profile || Object.keys(profile.traits).length === 0) return ''\n const lines = Object.entries(profile.traits)\n .filter(([, value]) => value !== undefined && value !== null && value !== '')\n .map(([key, value]) => `- ${key}: ${typeof value === 'string' ? value : JSON.stringify(value)}`)\n if (lines.length === 0) return ''\n return `## User profile\\n${lines.join('\\n')}`\n}\n","/**\n * Non-linear memory: a typed knowledge graph. Use for facts the\n * agent should remember beyond a single conversation — entities,\n * relationships, derived beliefs. Designed to be backed by anything\n * from an in-memory Map (tests, demos) to Neo4j / Memgraph / Neptune.\n */\n\nexport interface GraphNode<TProps = Record<string, unknown>> {\n id: string\n /** Type / label — 'person', 'company', 'topic'. */\n kind: string\n properties?: TProps\n /** ISO timestamp when the node was first inserted. */\n createdAt?: string\n /** ISO timestamp of the latest update. */\n updatedAt?: string\n}\n\nexport interface GraphEdge<TProps = Record<string, unknown>> {\n id: string\n /** Verb / relation type — 'knows', 'works-at', 'cites'. */\n label: string\n from: string\n to: string\n /** Optional weight — confidence, recency, or frequency. */\n weight?: number\n properties?: TProps\n}\n\nexport interface GraphQuery {\n kind?: string\n label?: string\n from?: string\n to?: string\n}\n\nexport interface GraphMemory {\n upsertNode: <T>(node: GraphNode<T>) => Promise<GraphNode<T>>\n upsertEdge: <T>(edge: GraphEdge<T>) => Promise<GraphEdge<T>>\n getNode: <T>(id: string) => Promise<GraphNode<T> | null>\n findNodes: <T>(query?: GraphQuery) => Promise<GraphNode<T>[]>\n findEdges: <T>(query?: GraphQuery) => Promise<GraphEdge<T>[]>\n /** Breadth-first neighbors of `id` up to `depth`. Default 1. */\n neighbors: <T>(id: string, options?: { depth?: number; label?: string }) => Promise<GraphNode<T>[]>\n deleteNode: (id: string) => Promise<void>\n deleteEdge: (id: string) => Promise<void>\n clear?: () => Promise<void>\n}\n\n/**\n * In-memory graph — fine for tests, single-process demos, and as\n * reference for what a backing store needs to implement.\n */\nexport function createInMemoryGraph(): GraphMemory {\n const nodes = new Map<string, GraphNode<unknown>>()\n const edges = new Map<string, GraphEdge<unknown>>()\n\n const matchesNode = (node: GraphNode<unknown>, query?: GraphQuery): boolean => {\n if (!query) return true\n if (query.kind && node.kind !== query.kind) return false\n return true\n }\n const matchesEdge = (edge: GraphEdge<unknown>, query?: GraphQuery): boolean => {\n if (!query) return true\n if (query.label && edge.label !== query.label) return false\n if (query.from && edge.from !== query.from) return false\n if (query.to && edge.to !== query.to) return false\n return true\n }\n\n return {\n async upsertNode<T>(node: GraphNode<T>) {\n const now = new Date().toISOString()\n const existing = nodes.get(node.id)\n const merged = {\n ...(existing ?? {}),\n ...node,\n createdAt: existing?.createdAt ?? now,\n updatedAt: now,\n }\n nodes.set(node.id, merged as GraphNode<unknown>)\n return merged as GraphNode<T>\n },\n async upsertEdge(edge) {\n edges.set(edge.id, edge as GraphEdge<unknown>)\n return edge\n },\n async getNode<T>(id: string) {\n const hit = nodes.get(id)\n return hit ? ({ ...hit } as GraphNode<T>) : null\n },\n async findNodes<T>(query?: GraphQuery) {\n return Array.from(nodes.values())\n .filter(n => matchesNode(n, query))\n .map(n => ({ ...n }) as GraphNode<T>)\n },\n async findEdges<T>(query?: GraphQuery) {\n return Array.from(edges.values())\n .filter(e => matchesEdge(e, query))\n .map(e => ({ ...e }) as GraphEdge<T>)\n },\n async neighbors<T>(id: string, options: { depth?: number; label?: string } = {}) {\n const depth = Math.max(1, options.depth ?? 1)\n const visited = new Set<string>([id])\n let frontier = new Set<string>([id])\n for (let i = 0; i < depth; i++) {\n const next = new Set<string>()\n for (const edge of edges.values()) {\n if (options.label && edge.label !== options.label) continue\n if (frontier.has(edge.from) && !visited.has(edge.to)) next.add(edge.to)\n if (frontier.has(edge.to) && !visited.has(edge.from)) next.add(edge.from)\n }\n for (const n of next) visited.add(n)\n frontier = next\n if (next.size === 0) break\n }\n visited.delete(id)\n return Array.from(visited, nid => nodes.get(nid)).filter((n): n is GraphNode<unknown> => Boolean(n)).map(n => ({ ...n }) as GraphNode<T>)\n },\n async deleteNode(id) {\n nodes.delete(id)\n for (const [eid, edge] of edges) {\n if (edge.from === id || edge.to === id) edges.delete(eid)\n }\n },\n async deleteEdge(id) {\n edges.delete(id)\n },\n async clear() {\n nodes.clear()\n edges.clear()\n },\n }\n}\n","import type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\n/**\n * pgvector-backed VectorMemory. We accept a minimal async SQL runner\n * so the caller picks the driver (`pg`, `postgres`, `@neondatabase/serverless`,\n * `@supabase/postgres-js`, ...). Expects a table with columns\n * `id text primary key`, `content text`, `embedding vector(N)`,\n * `metadata jsonb`.\n */\n\nexport interface PgVectorRunner {\n query: <T = Record<string, unknown>>(\n sql: string,\n params: unknown[],\n ) => Promise<{ rows: T[] }>\n}\n\nexport interface PgVectorConfig {\n runner: PgVectorRunner\n /** Table name. Default 'agentskit_vectors'. */\n table?: string\n /** Default topK for search. Default 10. */\n topK?: number\n}\n\nfunction formatVector(embedding: number[]): string {\n return `[${embedding.join(',')}]`\n}\n\nexport function pgvector(config: PgVectorConfig): VectorMemory {\n const table = config.table ?? 'agentskit_vectors'\n const defaultTopK = Math.max(1, config.topK ?? 10)\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n const values: unknown[] = []\n const placeholders = docs\n .map((doc, i) => {\n const base = i * 4\n values.push(doc.id, doc.content, formatVector(doc.embedding), JSON.stringify(doc.metadata ?? {}))\n return `($${base + 1}, $${base + 2}, $${base + 3}::vector, $${base + 4}::jsonb)`\n })\n .join(', ')\n await config.runner.query(\n `INSERT INTO ${table} (id, content, embedding, metadata) VALUES ${placeholders}\n ON CONFLICT (id) DO UPDATE SET content = EXCLUDED.content, embedding = EXCLUDED.embedding, metadata = EXCLUDED.metadata`,\n values,\n )\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const { rows } = await config.runner.query<{\n id: string\n content: string\n metadata: Record<string, unknown> | null\n distance: number\n }>(\n `SELECT id, content, metadata, (embedding <=> $1::vector) AS distance\n FROM ${table}\n ORDER BY embedding <=> $1::vector\n LIMIT $2`,\n [formatVector(embedding), topK],\n )\n return rows\n .map(r => ({\n id: r.id,\n content: r.content,\n metadata: r.metadata ?? undefined,\n score: 1 - r.distance,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n const placeholders = ids.map((_, i) => `$${i + 1}`).join(',')\n await config.runner.query(`DELETE FROM ${table} WHERE id IN (${placeholders})`, ids)\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface PineconeConfig {\n /** Full index URL, e.g. `https://<idx>-<project>.svc.<region>.pinecone.io`. */\n indexUrl: string\n apiKey: string\n /** Namespace. Default ''. */\n namespace?: string\n /** Default topK for search. Default 10. */\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(config: PineconeConfig, path: string, body: unknown): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.indexUrl}${path}`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n 'api-key': config.apiKey,\n },\n body: JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `pinecone ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.indexUrl}${path}. Check api-key + index URL/namespace.`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function pinecone(config: PineconeConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n const namespace = config.namespace ?? ''\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, '/vectors/upsert', {\n namespace,\n vectors: docs.map(d => ({\n id: d.id,\n values: d.embedding,\n metadata: { content: d.content, ...(d.metadata ?? {}) },\n })),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n matches?: Array<{ id: string; score: number; metadata?: Record<string, unknown> }>\n }>(config, '/query', {\n namespace,\n topK,\n vector: embedding,\n includeMetadata: true,\n })\n return (result.matches ?? [])\n .filter(m => m.score >= threshold)\n .map(m => ({\n id: m.id,\n content: String((m.metadata ?? {}).content ?? ''),\n metadata: m.metadata,\n score: m.score,\n }))\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, '/vectors/delete', { namespace, ids })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface QdrantConfig {\n /** Base URL, e.g. `https://xxx.cluster-qdrant.io`. */\n url: string\n apiKey?: string\n collection: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: QdrantConfig,\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method,\n headers: {\n 'content-type': 'application/json',\n ...(config.apiKey ? { 'api-key': config.apiKey } : {}),\n },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `qdrant ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check api-key + collection \"${config.collection}\".`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function qdrant(config: QdrantConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, 'PUT', `/collections/${config.collection}/points`, {\n points: docs.map(d => ({\n id: d.id,\n vector: d.embedding,\n payload: { content: d.content, ...(d.metadata ?? {}) },\n })),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n result?: Array<{\n id: string | number\n score: number\n payload?: Record<string, unknown>\n }>\n }>(config, 'POST', `/collections/${config.collection}/points/search`, {\n vector: embedding,\n limit: topK,\n with_payload: true,\n })\n return (result.result ?? [])\n .filter(m => m.score >= threshold)\n .map(m => ({\n id: String(m.id),\n content: String((m.payload ?? {}).content ?? ''),\n metadata: m.payload,\n score: m.score,\n }))\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, 'POST', `/collections/${config.collection}/points/delete`, {\n points: ids,\n })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface ChromaConfig {\n /** Base URL of a running Chroma HTTP server. */\n url: string\n collection: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: ChromaConfig,\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method,\n headers: { 'content-type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `chroma ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check Chroma server health + collection name.`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function chroma(config: ChromaConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, 'POST', `/api/v1/collections/${config.collection}/upsert`, {\n ids: docs.map(d => d.id),\n embeddings: docs.map(d => d.embedding),\n documents: docs.map(d => d.content),\n metadatas: docs.map(d => d.metadata ?? {}),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n ids?: string[][]\n documents?: string[][]\n metadatas?: Array<Array<Record<string, unknown>>>\n distances?: number[][]\n }>(config, 'POST', `/api/v1/collections/${config.collection}/query`, {\n query_embeddings: [embedding],\n n_results: topK,\n })\n const ids = result.ids?.[0] ?? []\n const documents = result.documents?.[0] ?? []\n const metadatas = result.metadatas?.[0] ?? []\n const distances = result.distances?.[0] ?? []\n return ids\n .map((id, i) => ({\n id,\n content: documents[i] ?? '',\n metadata: metadatas[i],\n score: distances[i] !== undefined ? 1 - distances[i]! : 0,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, 'POST', `/api/v1/collections/${config.collection}/delete`, { ids })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface UpstashVectorConfig {\n url: string\n token: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: UpstashVectorConfig,\n path: string,\n body: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${config.token}`,\n },\n body: JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `upstash-vector ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check token + index URL.`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\n/**\n * Upstash Vector — HTTP-only serverless vector DB. The REST surface\n * is tiny enough to implement directly without pulling the SDK.\n */\nexport function upstashVector(config: UpstashVectorConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(\n config,\n '/upsert',\n docs.map(d => ({\n id: d.id,\n vector: d.embedding,\n metadata: { content: d.content, ...(d.metadata ?? {}) },\n })),\n )\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n result?: Array<{ id: string; score: number; metadata?: Record<string, unknown> }>\n }>(config, '/query', { vector: embedding, topK, includeMetadata: true })\n return (result.result ?? [])\n .filter(m => m.score >= threshold)\n .map(m => ({\n id: m.id,\n content: String((m.metadata ?? {}).content ?? ''),\n metadata: m.metadata,\n score: m.score,\n }))\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, '/delete', { ids })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { VectorMemory } from '@agentskit/core'\nimport { pgvector, type PgVectorRunner } from './pgvector'\n\nexport interface SupabaseVectorStoreConfig {\n /** Supabase project URL, e.g. `https://xyz.supabase.co`. */\n url: string\n /** Service-role key (server-side only). */\n serviceRoleKey: string\n /** Table name. Default `agentskit_vectors`. */\n table?: string\n /** Default topK for search. Default 10. */\n topK?: number\n}\n\ninterface SupabaseRpcResult<T> {\n data: T | null\n error: { message: string } | null\n}\n\ninterface SupabasePostgrestQuery {\n rpc<T>(fn: string, params?: Record<string, unknown>): Promise<SupabaseRpcResult<T>>\n}\n\ninterface SupabaseClientLike {\n from(table: string): SupabasePostgrestQuery & {\n select(columns?: string): unknown\n insert(rows: unknown[]): unknown\n upsert(rows: unknown[], opts?: { onConflict?: string }): unknown\n delete(): { in(column: string, values: unknown[]): unknown }\n }\n rpc<T>(fn: string, params?: Record<string, unknown>): Promise<SupabaseRpcResult<T>>\n}\n\ninterface SupabaseModule {\n createClient(url: string, key: string): SupabaseClientLike\n}\n\nlet cachedSdk: Promise<SupabaseModule> | null = null\nasync function loadSdk(): Promise<SupabaseModule> {\n if (!cachedSdk) {\n cachedSdk = (async () => {\n try {\n const moduleId = '@supabase/supabase-js'\n return (await import(/* @vite-ignore */ moduleId)) as unknown as SupabaseModule\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install @supabase/supabase-js to use supabaseVectorStore: npm install @supabase/supabase-js',\n hint: 'supabaseVectorStore uses the optional peer \"@supabase/supabase-js\".',\n })\n }\n })()\n }\n return cachedSdk\n}\n\nfunction buildRunner(client: SupabaseClientLike): PgVectorRunner {\n // Supabase has no public raw-SQL API on `supabase-js`. We expose the same\n // shape via a thin wrapper around an `execute_sql` RPC that the user\n // creates server-side; this keeps the pgvector adapter wiring intact.\n return {\n async query<T>(sql: string, params: unknown[]) {\n const result = await client.rpc<T[]>('agentskit_execute_sql', { sql, params })\n if (result.error) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `supabase: ${result.error.message}`,\n hint: 'Check the agentskit_execute_sql RPC + service role key permissions.',\n })\n }\n return { rows: (result.data ?? []) as T[] }\n },\n }\n}\n\n/**\n * Supabase-hosted pgvector. Wraps the existing `pgvector` adapter with a\n * Supabase RPC runner so callers don't need to import a separate pg driver.\n *\n * Server-side setup (run once in Supabase SQL editor):\n * create extension if not exists vector;\n * create table agentskit_vectors (\n * id text primary key, content text, embedding vector(1536),\n * metadata jsonb\n * );\n * create or replace function agentskit_execute_sql(sql text, params jsonb)\n * returns setof json language plpgsql security definer as $$\n * begin\n * return query execute sql using params;\n * end;\n * $$;\n *\n * `@supabase/supabase-js` is an optional peer dependency loaded lazily.\n */\nexport function supabaseVectorStore(config: SupabaseVectorStoreConfig): VectorMemory {\n let runnerPromise: Promise<PgVectorRunner> | null = null\n const getRunner = (): Promise<PgVectorRunner> => {\n if (!runnerPromise) {\n runnerPromise = (async () => {\n const sdk = await loadSdk()\n const client = sdk.createClient(config.url, config.serviceRoleKey)\n return buildRunner(client)\n })()\n }\n return runnerPromise\n }\n\n // Lazy delegate — we don't have a runner until first call.\n let backend: VectorMemory | null = null\n const getBackend = async (): Promise<VectorMemory> => {\n if (!backend) {\n const runner = await getRunner()\n backend = pgvector({\n runner,\n table: config.table,\n topK: config.topK,\n })\n }\n return backend\n }\n\n return {\n async store(docs) {\n const b = await getBackend()\n return b.store(docs)\n },\n async search(embedding, options) {\n const b = await getBackend()\n return b.search(embedding, options)\n },\n async delete(ids) {\n const b = await getBackend()\n return b.delete?.(ids)\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface WeaviateConfig {\n /** Cluster URL, e.g. `https://my-cluster.weaviate.network`. */\n url: string\n /** Optional API key (Weaviate Cloud Services). */\n apiKey?: string\n /** Class name in the Weaviate schema. */\n className: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: WeaviateConfig,\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method,\n headers: {\n 'content-type': 'application/json',\n ...(config.apiKey ? { authorization: `Bearer ${config.apiKey}` } : {}),\n },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `weaviate ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check API key + class name \"${config.className}\".`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function weaviateVectorStore(config: WeaviateConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n const className = config.className\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, 'POST', '/v1/batch/objects', {\n objects: docs.map(d => ({\n class: className,\n id: d.id,\n properties: { content: d.content, ...(d.metadata ?? {}) },\n vector: d.embedding,\n })),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const query = `{\n Get {\n ${className}(nearVector: { vector: [${embedding.join(',')}] }, limit: ${topK}) {\n content\n _additional { id certainty }\n }\n }\n }`\n const result = await call<{\n data?: { Get?: Record<string, Array<{ content?: string; _additional?: { id: string; certainty?: number } } & Record<string, unknown>>> }\n }>(config, 'POST', '/v1/graphql', { query })\n const rows = result.data?.Get?.[className] ?? []\n return rows\n .map(row => ({\n id: String(row._additional?.id ?? ''),\n content: String(row.content ?? ''),\n score: row._additional?.certainty ?? 0,\n metadata: row,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n for (const id of ids) {\n await call(config, 'DELETE', `/v1/objects/${className}/${id}`)\n }\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface MilvusConfig {\n /** Milvus REST endpoint, e.g. `https://in03-xxx.api.gcp-us-west1.zillizcloud.com`. */\n url: string\n /** API key / Zilliz Cloud token (Bearer). */\n token?: string\n collection: string\n /** Vector field name in the schema. Default `vector`. */\n vectorField?: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: MilvusConfig,\n path: string,\n body: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(config.token ? { authorization: `Bearer ${config.token}` } : {}),\n },\n body: JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `milvus ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check token + collection \"${config.collection}\".`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function milvusVectorStore(config: MilvusConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n const vectorField = config.vectorField ?? 'vector'\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, '/v2/vectordb/entities/upsert', {\n collectionName: config.collection,\n data: docs.map(d => ({\n id: d.id,\n [vectorField]: d.embedding,\n content: d.content,\n metadata: d.metadata ?? {},\n })),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n data?: Array<{ id: string; distance: number; content?: string; metadata?: Record<string, unknown> }>\n }>(config, '/v2/vectordb/entities/search', {\n collectionName: config.collection,\n data: [embedding],\n annsField: vectorField,\n limit: topK,\n outputFields: ['content', 'metadata'],\n })\n return (result.data ?? [])\n .map(m => ({\n id: String(m.id),\n content: String(m.content ?? ''),\n score: 1 - m.distance,\n metadata: m.metadata,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, '/v2/vectordb/entities/delete', {\n collectionName: config.collection,\n filter: `id in [${ids.map(id => `\"${id}\"`).join(',')}]`,\n })\n },\n }\n}\n","import type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\n/**\n * MongoDB Atlas Vector Search adapter. Caller injects a typed collection\n * shape (drop-in for the official `mongodb` driver's `Collection` type) so\n * we don't bundle a driver. Atlas' \\`$vectorSearch\\` aggregation runs\n * server-side; we just translate \\`store\\` / \\`search\\` / \\`delete\\` to\n * insertMany + aggregate + deleteMany.\n */\n\nexport interface MongoCollectionLike {\n insertMany(docs: Array<Record<string, unknown>>, options?: unknown): Promise<unknown>\n deleteMany(filter: Record<string, unknown>): Promise<unknown>\n aggregate<T = Record<string, unknown>>(pipeline: Array<Record<string, unknown>>): {\n toArray(): Promise<T[]>\n }\n}\n\nexport interface MongoAtlasVectorConfig {\n collection: MongoCollectionLike\n /** Atlas Search index name on the embedding field. */\n indexName: string\n /** Field that holds the embedding vector. Default `embedding`. */\n vectorField?: string\n /** numCandidates for $vectorSearch. Default `topK * 10`. */\n numCandidates?: number\n topK?: number\n}\n\nexport function mongoAtlasVectorStore(config: MongoAtlasVectorConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n const vectorField = config.vectorField ?? 'embedding'\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await config.collection.insertMany(docs.map(d => ({\n _id: d.id,\n content: d.content,\n [vectorField]: d.embedding,\n metadata: d.metadata ?? {},\n })))\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const numCandidates = config.numCandidates ?? topK * 10\n const cursor = config.collection.aggregate<{\n _id: string; content: string; metadata?: Record<string, unknown>; score: number\n }>([\n {\n $vectorSearch: {\n index: config.indexName,\n path: vectorField,\n queryVector: embedding,\n numCandidates,\n limit: topK,\n },\n },\n { $project: { content: 1, metadata: 1, score: { $meta: 'vectorSearchScore' } } },\n ])\n const rows = await cursor.toArray()\n return rows\n .map(row => ({\n id: String(row._id),\n content: String(row.content ?? ''),\n score: row.score,\n metadata: row.metadata,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await config.collection.deleteMany({ _id: { $in: ids } })\n },\n }\n}\n","import { ConfigError, ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { ChatMemory, Message } from '@agentskit/core'\n\n/**\n * Client-side encrypted ChatMemory wrapper. Keys never leave the\n * caller — the backing store only ever sees an opaque\n * `{ iv, ct }` payload stashed in `metadata.ciphertext` and\n * `metadata.iv`; `content` becomes an empty string so rogue\n * middleware can't peek at it either.\n *\n * Uses Web Crypto (AES-GCM, 256-bit). Available on Node 20+ and all\n * modern browsers. BYO key material — typically generated per-user\n * during onboarding and stored only on their device.\n */\n\nexport interface EncryptedMemoryOptions {\n backing: ChatMemory\n /** 32-byte raw key (e.g. `crypto.getRandomValues(new Uint8Array(32))`). */\n key: Uint8Array | CryptoKey\n /** Override for tests. Defaults to `globalThis.crypto.subtle`. */\n subtle?: SubtleCrypto\n /** Random source. Defaults to `globalThis.crypto.getRandomValues`. */\n getRandomValues?: <T extends ArrayBufferView>(array: T) => T\n /** Optional AAD — content that binds ciphertext to context (user id, room). */\n aad?: Uint8Array\n}\n\nexport interface EncryptedEnvelope {\n ciphertext: string\n iv: string\n /** Plaintext-length marker so the agent sees a non-empty content hint. */\n length: number\n}\n\nfunction toBase64(bytes: Uint8Array): string {\n if (typeof Buffer !== 'undefined') return Buffer.from(bytes).toString('base64')\n let binary = ''\n for (const b of bytes) binary += String.fromCharCode(b)\n return btoa(binary)\n}\n\nfunction fromBase64(value: string): Uint8Array {\n if (typeof Buffer !== 'undefined') return new Uint8Array(Buffer.from(value, 'base64'))\n const binary = atob(value)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i)\n return bytes\n}\n\nasync function resolveKey(\n subtle: SubtleCrypto,\n material: Uint8Array | CryptoKey,\n): Promise<CryptoKey> {\n if ('type' in material && material.type === 'secret') return material\n const raw = material as Uint8Array\n if (raw.byteLength !== 32) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `createEncryptedMemory: key must be 32 bytes (got ${raw.byteLength})`,\n hint: 'Generate a 32-byte key, e.g. crypto.getRandomValues(new Uint8Array(32)).',\n })\n }\n return subtle.importKey('raw', raw as BufferSource, { name: 'AES-GCM' }, false, ['encrypt', 'decrypt'])\n}\n\nexport async function createEncryptedMemory(\n options: EncryptedMemoryOptions,\n): Promise<ChatMemory> {\n const subtle = options.subtle ?? globalThis.crypto?.subtle\n const random = options.getRandomValues ?? (<T extends ArrayBufferView>(v: T) => globalThis.crypto.getRandomValues(v as ArrayBufferView as ArrayBufferView & { buffer: ArrayBuffer }) as T)\n if (!subtle) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_LOAD_FAILED,\n message: 'createEncryptedMemory: SubtleCrypto not available',\n hint: 'Run on Node ≥ 20 / a modern browser, or pass options.subtle explicitly.',\n })\n }\n\n const key = await resolveKey(subtle, options.key)\n const aad = options.aad\n\n const encrypt = async (plain: string): Promise<EncryptedEnvelope> => {\n const iv = random(new Uint8Array(12))\n const data = new TextEncoder().encode(plain)\n const params: AesGcmParams = aad\n ? { name: 'AES-GCM', iv: iv as BufferSource, additionalData: aad as BufferSource }\n : { name: 'AES-GCM', iv: iv as BufferSource }\n const cipher = await subtle.encrypt(params, key, data as BufferSource)\n return {\n ciphertext: toBase64(new Uint8Array(cipher)),\n iv: toBase64(iv as Uint8Array),\n length: plain.length,\n }\n }\n\n const decrypt = async (envelope: EncryptedEnvelope): Promise<string> => {\n const iv = fromBase64(envelope.iv) as BufferSource\n const params: AesGcmParams = aad\n ? { name: 'AES-GCM', iv, additionalData: aad as BufferSource }\n : { name: 'AES-GCM', iv }\n const plain = await subtle.decrypt(params, key, fromBase64(envelope.ciphertext) as BufferSource)\n return new TextDecoder().decode(plain)\n }\n\n const encryptMessage = async (m: Message): Promise<Message> => {\n if (m.metadata?.agentskitEncrypted) return m\n const envelope = await encrypt(m.content ?? '')\n return {\n ...m,\n content: '',\n metadata: {\n ...(m.metadata ?? {}),\n agentskitEncrypted: true,\n ciphertext: envelope.ciphertext,\n iv: envelope.iv,\n length: envelope.length,\n },\n }\n }\n\n const decryptMessage = async (m: Message): Promise<Message> => {\n if (!m.metadata?.agentskitEncrypted) return m\n const envelope: EncryptedEnvelope = {\n ciphertext: String(m.metadata.ciphertext),\n iv: String(m.metadata.iv),\n length: Number(m.metadata.length ?? 0),\n }\n const content = await decrypt(envelope)\n const { agentskitEncrypted: _, ciphertext: __, iv: ___, length: ____, ...rest } = m.metadata\n return { ...m, content, metadata: Object.keys(rest).length > 0 ? rest : undefined }\n }\n\n return {\n async load() {\n const stored = await options.backing.load()\n return Promise.all(stored.map(decryptMessage))\n },\n async save(messages) {\n const encrypted = await Promise.all(messages.map(encryptMessage))\n await options.backing.save(encrypted)\n },\n async clear() {\n await options.backing.clear?.()\n },\n }\n}\n","import type { ChatMemory, Message } from '@agentskit/core'\n\nexport interface HierarchicalRecall {\n /**\n * Index a message for later retrieval. Called once per message as\n * it moves from working → recall (usually: embed + store in a\n * vector DB).\n */\n index: (message: Message) => void | Promise<void>\n /**\n * Given the hot working window, return up to `topK` messages from\n * the recall tier that are relevant to the current turn. The hub\n * splices results chronologically alongside the working window.\n */\n query: (input: { working: Message[]; topK: number }) => Message[] | Promise<Message[]>\n}\n\nexport interface HierarchicalMemoryOptions {\n /** Hot window — the messages always loaded in full. */\n working: ChatMemory\n /** Cold storage — every message ever seen is written here. */\n archival: ChatMemory\n /**\n * Mid-term recall layer (usually a vector store). Optional;\n * without it the hub behaves like virtualized memory with a hard\n * backing store.\n */\n recall?: HierarchicalRecall\n /**\n * Maximum messages to keep in `working`. Older messages spill\n * into recall + archival. Default 50.\n */\n workingLimit?: number\n /**\n * Max recalled messages to splice on each `load()`. Default 5.\n */\n recallTopK?: number\n}\n\nexport interface HierarchicalMemory extends ChatMemory {\n /** Full archival history. Always the source of truth. */\n archival: () => Promise<Message[]>\n /** Current working-window snapshot. */\n working: () => Promise<Message[]>\n}\n\nfunction mergeChronological(a: Message[], b: Message[]): Message[] {\n const out = [...a, ...b]\n out.sort((x, y) => x.createdAt.getTime() - y.createdAt.getTime())\n return out\n}\n\n/**\n * MemGPT-style tiered memory. Three tiers:\n * - working: always-loaded hot window (bounded by `workingLimit`).\n * - recall: mid-term searchable layer (usually a vector store).\n * - archival: cold store that always holds the full conversation.\n *\n * On every `save`, new messages are appended to archival, messages\n * that overflow the working window are indexed into recall, and the\n * working tier is trimmed to `workingLimit`.\n *\n * On every `load`, the hub returns working + up to `recallTopK`\n * messages surfaced by the recall tier, spliced chronologically.\n */\nexport function createHierarchicalMemory(\n options: HierarchicalMemoryOptions,\n): HierarchicalMemory {\n const workingLimit = Math.max(1, options.workingLimit ?? 50)\n const recallTopK = Math.max(0, options.recallTopK ?? 5)\n\n const loadAll = async (source: ChatMemory): Promise<Message[]> => [...(await source.load())]\n\n return {\n async load() {\n const hot = await loadAll(options.working)\n if (!options.recall || recallTopK === 0) return hot\n let recalled: Message[] = []\n try {\n recalled = [...(await options.recall.query({ working: hot, topK: recallTopK }))]\n } catch {\n recalled = []\n }\n const hotIds = new Set(hot.map(m => m.id))\n return mergeChronological(\n recalled.filter(m => !hotIds.has(m.id)),\n hot,\n )\n },\n\n async save(messages) {\n const knownArchival = await loadAll(options.archival)\n const archivalIds = new Set(knownArchival.map(m => m.id))\n const fresh = messages.filter(m => !archivalIds.has(m.id))\n\n // Archival: append everything, preserving full history.\n if (fresh.length > 0) {\n await options.archival.save(mergeChronological(knownArchival, fresh))\n }\n\n // Working: trim to the tail `workingLimit` of the caller's view.\n const tail = messages.slice(Math.max(0, messages.length - workingLimit))\n const overflow = messages.slice(0, Math.max(0, messages.length - workingLimit))\n await options.working.save(tail)\n\n if (options.recall) {\n const knownOverflow = overflow.filter(m => fresh.some(f => f.id === m.id))\n for (const m of knownOverflow) await options.recall.index(m)\n // Also index freshly saved messages that never hit working\n // (e.g. system/tool transcripts).\n const appended = fresh.filter(m => !tail.some(t => t.id === m.id))\n for (const m of appended) await options.recall.index(m)\n }\n },\n\n async clear() {\n await options.working.clear?.()\n await options.archival.clear?.()\n },\n\n async archival() {\n return loadAll(options.archival)\n },\n\n async working() {\n return loadAll(options.working)\n },\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/file-chat.ts","../src/sqlite.ts","../src/turso.ts","../src/redis-client.ts","../src/redis-chat.ts","../src/redis-vector.ts","../src/vector/filter.ts","../src/file-vector.ts","../src/graph.ts","../src/vector/pgvector.ts","../src/vector/pinecone.ts","../src/vector/qdrant.ts","../src/vector/chroma.ts","../src/vector/upstash.ts","../src/vector/supabase.ts","../src/vector/weaviate.ts","../src/vector/milvus.ts","../src/vector/mongo-atlas.ts","../src/encrypted.ts","../src/hierarchical.ts","../src/forget.ts","../src/redaction.ts","../src/kv-store-types.ts","../src/kv-store-basic.ts","../src/kv-store-sqlite.ts","../src/kv-store-redis.ts","../src/kv-store-vector.ts","../src/kv-store-factory.ts"],"names":["serializeMessages","deserializeMessages","MemoryError","ErrorCodes","encodeMessages","decodeMessages","call","cachedSdk","loadSdk","ConfigError"],"mappings":"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","file":"index.js","sourcesContent":["import type { ChatMemory, MemoryRecord } from '@agentskit/core'\nimport { deserializeMessages, serializeMessages } from '@agentskit/core'\n\n/**\n * ChatMemory backed by a JSON file on disk. Node-only.\n *\n * Implements the Memory contract (ADR 0003):\n * - load() returns a snapshot (CM1)\n * - save() is replace-all, not append (CM2)\n * - empty state returns [] (CM5)\n * - clear() is optional but provided here\n */\nexport function fileChatMemory(path: string): ChatMemory {\n return {\n async load() {\n try {\n const fs = await import('node:fs/promises')\n const raw = await fs.readFile(path, 'utf8')\n return deserializeMessages(JSON.parse(raw) as MemoryRecord)\n } catch {\n return []\n }\n },\n async save(messages) {\n const fs = await import('node:fs/promises')\n // Chat history can contain user prompts, API keys passed in messages,\n // and tool outputs. Write with mode 0600 so the file is not readable by\n // other users on shared / multi-tenant hosts (CWE-377/378, CodeQL\n // js/insecure-temporary-file). On Windows the mode is ignored — ACLs\n // inherit from the parent directory, which is the right default.\n await fs.writeFile(\n path,\n JSON.stringify(serializeMessages(messages), null, 2),\n { encoding: 'utf8', mode: 0o600 },\n )\n },\n async clear() {\n try {\n const fs = await import('node:fs/promises')\n await fs.unlink(path)\n } catch {\n // Ignore missing files.\n }\n },\n }\n}\n","import type { ChatMemory, Message, MemoryRecord } from '@agentskit/core'\nimport {\n ErrorCodes,\n MemoryError,\n deserializeMessages,\n serializeMessages,\n} from '@agentskit/core'\n\nexport interface SqliteChatMemoryConfig {\n path: string\n conversationId?: string\n}\n\nfunction encodeMessages(messages: Message[]): string {\n return JSON.stringify(serializeMessages(messages))\n}\n\nfunction decodeMessages(json: string | undefined): Message[] {\n if (!json) return []\n try {\n return deserializeMessages(JSON.parse(json) as MemoryRecord)\n } catch {\n return []\n }\n}\n\ninterface SqliteDb {\n prepare(sql: string): {\n run(...args: unknown[]): void\n get(...args: unknown[]): Record<string, unknown> | undefined\n }\n}\n\nasync function openDatabase(path: string): Promise<SqliteDb> {\n try {\n const mod = await import('better-sqlite3')\n const Database = mod.default ?? mod\n return new (Database as new (p: string) => SqliteDb)(path)\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install better-sqlite3 to use sqliteChatMemory: npm install better-sqlite3',\n hint: 'sqliteChatMemory uses the optional peer \"better-sqlite3\".',\n })\n }\n}\n\nexport function sqliteChatMemory(config: SqliteChatMemoryConfig): ChatMemory {\n const conversationId = config.conversationId ?? 'default'\n let dbPromise: Promise<SqliteDb> | null = null\n\n const getDb = (): Promise<SqliteDb> => {\n if (!dbPromise) {\n dbPromise = openDatabase(config.path).then(db => {\n db.prepare(`\n CREATE TABLE IF NOT EXISTS conversations (\n id TEXT PRIMARY KEY,\n messages TEXT NOT NULL\n )\n `).run()\n return db\n })\n }\n return dbPromise\n }\n\n return {\n async load() {\n const db = await getDb()\n const row = db.prepare('SELECT messages FROM conversations WHERE id = ?').get(conversationId)\n return decodeMessages(row?.messages as string | undefined)\n },\n async save(messages) {\n const db = await getDb()\n const json = encodeMessages(messages)\n db.prepare(`\n INSERT INTO conversations (id, messages) VALUES (?, ?)\n ON CONFLICT(id) DO UPDATE SET messages = ?\n `).run(conversationId, json, json)\n },\n async clear() {\n const db = await getDb()\n db.prepare('DELETE FROM conversations WHERE id = ?').run(conversationId)\n },\n }\n}\n","import type { ChatMemory, Message, MemoryRecord } from '@agentskit/core'\nimport {\n ErrorCodes,\n MemoryError,\n deserializeMessages,\n serializeMessages,\n} from '@agentskit/core'\n\nexport interface TursoChatMemoryConfig {\n /** libSQL URL — file:..., libsql://..., or http://... */\n url: string\n /** Auth token — required for hosted (libsql://) URLs. */\n authToken?: string\n conversationId?: string\n}\n\ninterface LibsqlClient {\n execute(args: { sql: string; args?: unknown[] }): Promise<{ rows: Array<Record<string, unknown>> }>\n}\n\ninterface LibsqlModule {\n createClient(config: { url: string; authToken?: string }): LibsqlClient\n}\n\nlet cachedSdk: Promise<LibsqlModule> | null = null\nasync function loadSdk(): Promise<LibsqlModule> {\n if (!cachedSdk) {\n cachedSdk = (async () => {\n try {\n const moduleId = '@libsql/client'\n return (await import(/* @vite-ignore */ moduleId)) as unknown as LibsqlModule\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install @libsql/client to use tursoChatMemory: npm install @libsql/client',\n hint: 'tursoChatMemory uses the optional peer \"@libsql/client\".',\n })\n }\n })()\n }\n return cachedSdk\n}\n\nfunction encodeMessages(messages: Message[]): string {\n return JSON.stringify(serializeMessages(messages))\n}\n\nfunction decodeMessages(json: string | undefined): Message[] {\n if (!json) return []\n try {\n return deserializeMessages(JSON.parse(json) as MemoryRecord)\n } catch {\n return []\n }\n}\n\n/**\n * libSQL / Turso-backed chat memory. Mirrors the `sqliteChatMemory` shape so\n * code paths can swap between local SQLite and replicated libSQL by changing\n * one import.\n *\n * `@libsql/client` is an optional peer dependency loaded lazily.\n */\nexport function tursoChatMemory(config: TursoChatMemoryConfig): ChatMemory {\n const conversationId = config.conversationId ?? 'default'\n let clientPromise: Promise<LibsqlClient> | null = null\n\n const getClient = async (): Promise<LibsqlClient> => {\n if (!clientPromise) {\n clientPromise = (async () => {\n const sdk = await loadSdk()\n const client = sdk.createClient({ url: config.url, authToken: config.authToken })\n await client.execute({\n sql: 'CREATE TABLE IF NOT EXISTS conversations (id TEXT PRIMARY KEY, messages TEXT NOT NULL)',\n })\n return client\n })()\n }\n return clientPromise\n }\n\n return {\n async load() {\n const client = await getClient()\n const result = await client.execute({\n sql: 'SELECT messages FROM conversations WHERE id = ?',\n args: [conversationId],\n })\n const row = result.rows[0]\n return decodeMessages(row?.messages as string | undefined)\n },\n async save(messages) {\n const client = await getClient()\n const json = encodeMessages(messages)\n await client.execute({\n sql: `INSERT INTO conversations (id, messages) VALUES (?, ?)\n ON CONFLICT(id) DO UPDATE SET messages = excluded.messages`,\n args: [conversationId, json],\n })\n },\n async clear() {\n const client = await getClient()\n await client.execute({\n sql: 'DELETE FROM conversations WHERE id = ?',\n args: [conversationId],\n })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\n\n/**\n * Internal Redis client adapter interface.\n * Abstracts the underlying Redis library so it can be swapped\n * (e.g., from `redis` to `ioredis`) without changing consumers.\n */\nexport interface RedisClientAdapter {\n get(key: string): Promise<string | null>\n set(key: string, value: string): Promise<void>\n del(key: string | string[]): Promise<void>\n keys(pattern: string): Promise<string[]>\n disconnect(): Promise<void>\n call(command: string, ...args: (string | number | Buffer)[]): Promise<unknown>\n}\n\nexport interface RedisConnectionConfig {\n url: string\n client?: RedisClientAdapter\n}\n\nexport async function createRedisClientAdapter(url: string): Promise<RedisClientAdapter> {\n let redis: typeof import('redis')\n try {\n redis = await import('redis')\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install redis to use Redis memory backends: npm install redis',\n hint: 'redisChatMemory and redisVectorMemory use the optional peer \"redis\".',\n })\n }\n\n const client = redis.createClient({ url })\n await client.connect()\n\n return {\n async get(key) {\n return await client.get(key)\n },\n async set(key, value) {\n await client.set(key, value)\n },\n async del(key) {\n const keys = Array.isArray(key) ? key : [key]\n if (keys.length > 0) await client.del(keys)\n },\n async keys(pattern) {\n return await client.keys(pattern)\n },\n async disconnect() {\n // node-redis v6 renamed the graceful close: client.disconnect() (v5) -> client.close().\n await client.close()\n },\n async call(command, ...args) {\n return await client.sendCommand([command, ...args.map(String)])\n },\n }\n}\n","import type { ChatMemory, Message, MemoryRecord } from '@agentskit/core'\nimport { serializeMessages, deserializeMessages } from '@agentskit/core'\nimport type { RedisClientAdapter, RedisConnectionConfig } from './redis-client'\nimport { createRedisClientAdapter } from './redis-client'\n\nexport interface RedisChatMemoryConfig extends RedisConnectionConfig {\n keyPrefix?: string\n conversationId?: string\n}\n\nfunction encodeMessages(messages: Message[]): string {\n return JSON.stringify(serializeMessages(messages))\n}\n\nfunction decodeMessages(json: string | null): Message[] {\n if (!json) return []\n try {\n return deserializeMessages(JSON.parse(json) as MemoryRecord)\n } catch {\n return []\n }\n}\n\nexport function redisChatMemory(config: RedisChatMemoryConfig): ChatMemory {\n const prefix = config.keyPrefix ?? 'agentskit:chat'\n const convId = config.conversationId ?? 'default'\n const key = `${prefix}:${convId}`\n let clientPromise: Promise<RedisClientAdapter> | null = null\n\n const getClient = (): Promise<RedisClientAdapter> => {\n if (config.client) return Promise.resolve(config.client)\n if (!clientPromise) clientPromise = createRedisClientAdapter(config.url)\n return clientPromise\n }\n\n return {\n async load() {\n const client = await getClient()\n const json = await client.get(key)\n return decodeMessages(json)\n },\n async save(messages) {\n const client = await getClient()\n await client.set(key, encodeMessages(messages))\n },\n async clear() {\n const client = await getClient()\n await client.del(key)\n },\n }\n}\n","import type { VectorMemory, VectorDocument, RetrievedDocument } from '@agentskit/core'\nimport type { RedisClientAdapter, RedisConnectionConfig } from './redis-client'\nimport { createRedisClientAdapter } from './redis-client'\n\nexport interface RedisVectorMemoryConfig extends RedisConnectionConfig {\n indexName?: string\n keyPrefix?: string\n dimensions?: number\n}\n\nfunction float32Buffer(vector: number[]): Buffer {\n const buffer = Buffer.alloc(vector.length * 4)\n for (let i = 0; i < vector.length; i++) {\n buffer.writeFloatLE(vector[i], i * 4)\n }\n return buffer\n}\n\nexport function redisVectorMemory(config: RedisVectorMemoryConfig): VectorMemory {\n const indexName = config.indexName ?? 'agentskit:vectors:idx'\n const prefix = config.keyPrefix ?? 'agentskit:vec'\n const dimensions = config.dimensions ?? 0\n let clientPromise: Promise<RedisClientAdapter> | null = null\n let indexCreated = false\n\n const getClient = (): Promise<RedisClientAdapter> => {\n if (config.client) return Promise.resolve(config.client)\n if (!clientPromise) clientPromise = createRedisClientAdapter(config.url)\n return clientPromise\n }\n\n const ensureIndex = async (client: RedisClientAdapter, dims: number) => {\n if (indexCreated) return\n try {\n await client.call(\n 'FT.CREATE', indexName,\n 'ON', 'HASH',\n 'PREFIX', '1', `${prefix}:`,\n 'SCHEMA',\n 'content', 'TEXT',\n 'metadata', 'TEXT',\n 'embedding', 'VECTOR', 'HNSW', '6',\n 'TYPE', 'FLOAT32',\n 'DIM', dims,\n 'DISTANCE_METRIC', 'COSINE',\n )\n } catch (err: unknown) {\n const msg = String(err)\n if (!msg.includes('Index already exists')) throw err\n }\n indexCreated = true\n }\n\n return {\n async store(docs: VectorDocument[]) {\n const client = await getClient()\n const dims = dimensions || docs[0]?.embedding.length || 0\n if (dims > 0) await ensureIndex(client, dims)\n\n for (const doc of docs) {\n const key = `${prefix}:${doc.id}`\n await client.call(\n 'HSET', key,\n 'content', doc.content,\n 'metadata', JSON.stringify(doc.metadata ?? {}),\n 'embedding', float32Buffer(doc.embedding),\n )\n }\n },\n async search(embedding, options) {\n const client = await getClient()\n const topK = options?.topK ?? 5\n const threshold = options?.threshold ?? 0\n\n const result = await client.call(\n 'FT.SEARCH', indexName,\n `*=>[KNN ${topK} @embedding $vec AS score]`,\n 'PARAMS', '2', 'vec', float32Buffer(embedding),\n 'SORTBY', 'score',\n 'RETURN', '3', 'content', 'metadata', 'score',\n 'DIALECT', '2',\n ) as unknown[]\n\n if (!Array.isArray(result) || result.length < 2) return []\n\n const docs: RetrievedDocument[] = []\n // FT.SEARCH returns [total, key1, [field, val, ...], key2, [field, val, ...], ...]\n for (let i = 1; i < result.length; i += 2) {\n const key = String(result[i])\n const fields = result[i + 1] as string[]\n if (!Array.isArray(fields)) continue\n\n const fieldMap: Record<string, string> = {}\n for (let j = 0; j < fields.length; j += 2) {\n fieldMap[fields[j]] = fields[j + 1]\n }\n\n const score = 1 - parseFloat(fieldMap.score ?? '1') // COSINE distance → similarity\n if (score < threshold) continue\n\n docs.push({\n id: key.replace(`${prefix}:`, ''),\n content: fieldMap.content ?? '',\n score,\n metadata: fieldMap.metadata ? JSON.parse(fieldMap.metadata) : undefined,\n })\n }\n\n return docs\n },\n async delete(ids) {\n const client = await getClient()\n await client.del(ids.map(id => `${prefix}:${id}`))\n },\n }\n}\n","import type {\n VectorFilter,\n VectorFilterCompound,\n VectorFilterOperator,\n VectorFilterPredicate,\n VectorFilterPrimitive,\n} from '@agentskit/core'\n\nfunction isPrimitive(value: unknown): value is VectorFilterPrimitive {\n const t = typeof value\n return value === null || t === 'string' || t === 'number' || t === 'boolean'\n}\n\nfunction evalOperator(actual: unknown, op: VectorFilterOperator): boolean {\n if ('$eq' in op) return actual === op.$eq\n if ('$ne' in op) return actual !== op.$ne\n if ('$in' in op) return op.$in.includes(actual as VectorFilterPrimitive)\n if ('$nin' in op) return !op.$nin.includes(actual as VectorFilterPrimitive)\n if ('$gt' in op) return (actual as number | string) > op.$gt\n if ('$gte' in op) return (actual as number | string) >= op.$gte\n if ('$lt' in op) return (actual as number | string) < op.$lt\n if ('$lte' in op) return (actual as number | string) <= op.$lte\n if ('$exists' in op) return (actual !== undefined) === op.$exists\n return false\n}\n\nfunction evalPredicate(actual: unknown, predicate: VectorFilterPredicate): boolean {\n if (isPrimitive(predicate)) return actual === predicate\n return evalOperator(actual, predicate)\n}\n\n/**\n * Evaluate a `VectorFilter` against a metadata record. Used by in-memory /\n * file-backed vector stores. Backends with native filter languages (pgvector,\n * Pinecone, Qdrant, etc.) translate the filter to their own form instead.\n */\nexport function matchesFilter(metadata: Record<string, unknown> | undefined, filter: VectorFilter | undefined): boolean {\n if (!filter) return true\n const meta = metadata ?? {}\n\n const compound = filter as VectorFilterCompound\n if (compound.$and) return compound.$and.every(f => matchesFilter(meta, f))\n if (compound.$or) return compound.$or.some(f => matchesFilter(meta, f))\n\n for (const [field, predicate] of Object.entries(filter)) {\n if (field.startsWith('$')) continue\n if (!evalPredicate(meta[field], predicate as VectorFilterPredicate)) return false\n }\n return true\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { VectorMemory, VectorDocument, RetrievedDocument } from '@agentskit/core'\nimport type { VectorStore } from './vector-store'\nimport { matchesFilter } from './vector/filter'\n\nexport interface FileVectorMemoryConfig {\n path: string\n store?: VectorStore\n}\n\nfunction requireVectra(): { LocalIndex: new (path: string) => VectraIndex } {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n return require('vectra')\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install vectra to use fileVectorMemory: npm install vectra',\n hint: 'fileVectorMemory uses the optional peer \"vectra\" for the on-disk index.',\n })\n }\n}\n\ninterface VectraIndex {\n isIndexCreated(): Promise<boolean>\n createIndex(): Promise<void>\n beginUpdate(): Promise<void>\n endUpdate(): Promise<void>\n cancelUpdate(): void\n insertItem(item: { vector: number[]; metadata: Record<string, unknown> }): Promise<unknown>\n // vectra >=0.15 inserts a BM25 `query` string between vector and topK; pass \"\" for pure vector search.\n queryItems(vector: number[], query: string, topK: number): Promise<Array<{ score: number; item: { metadata: Record<string, unknown> } }>>\n listItems(): Promise<Array<{ id: string; metadata: Record<string, unknown> }>>;\n deleteItem(id: string): Promise<void>\n}\n\nfunction createVectraStore(dirPath: string): VectorStore {\n let index: VectraIndex | null = null\n\n const getIndex = async (): Promise<VectraIndex> => {\n if (index) return index\n const { LocalIndex } = requireVectra()\n index = new LocalIndex(dirPath)\n if (!(await index.isIndexCreated())) {\n await index.createIndex()\n }\n return index\n }\n\n return {\n async upsert(docs) {\n const idx = await getIndex()\n // Batch all inserts into a single atomic update so the on-disk index is\n // written once and is fully durable before any subsequent query. Calling\n // insertItem per-doc writes the index file N times, leaving intermediate\n // partial states a concurrent query can read mid-flush (flaky empty\n // results on slow CI disks).\n await idx.beginUpdate()\n try {\n for (const doc of docs) {\n await idx.insertItem({\n vector: doc.vector,\n metadata: { _id: doc.id, ...doc.metadata },\n })\n }\n await idx.endUpdate()\n } catch (err) {\n idx.cancelUpdate()\n throw err\n }\n },\n async query(vector, topK) {\n const idx = await getIndex()\n const results = await idx.queryItems(vector, '', topK)\n return results.map(r => ({\n id: String(r.item.metadata._id ?? ''),\n score: r.score,\n metadata: r.item.metadata,\n }))\n },\n async delete(ids) {\n const idx = await getIndex()\n const items = await idx.listItems()\n for (const item of items) {\n if (ids.includes(String(item.metadata._id ?? item.id))) {\n await idx.deleteItem(item.id)\n }\n }\n },\n }\n}\n\nexport function fileVectorMemory(config: FileVectorMemoryConfig): VectorMemory {\n const store = config.store ?? createVectraStore(config.path)\n const contentCache = new Map<string, string>()\n\n return {\n async store(docs: VectorDocument[]) {\n for (const doc of docs) {\n contentCache.set(doc.id, doc.content)\n }\n await store.upsert(docs.map(doc => ({\n id: doc.id,\n vector: doc.embedding,\n metadata: { content: doc.content, ...doc.metadata },\n })))\n },\n async search(embedding, options) {\n const topK = options?.topK ?? 5\n const threshold = options?.threshold ?? 0\n // Over-fetch when a filter is set so we can still return ~topK after filtering.\n const fetchK = options?.filter ? Math.max(topK * 4, 50) : topK\n const results = await store.query(embedding, fetchK)\n\n return results\n .filter(r => r.score >= threshold)\n .filter(r => matchesFilter(r.metadata, options?.filter))\n .slice(0, topK)\n .map((r): RetrievedDocument => ({\n id: r.id,\n content: String(r.metadata.content ?? contentCache.get(r.id) ?? ''),\n score: r.score,\n metadata: r.metadata,\n }))\n },\n async delete(ids) {\n for (const id of ids) contentCache.delete(id)\n await store.delete(ids)\n },\n }\n}\n","/**\n * Non-linear memory: a typed knowledge graph. Use for facts the\n * agent should remember beyond a single conversation — entities,\n * relationships, derived beliefs. Designed to be backed by anything\n * from an in-memory Map (tests, demos) to Neo4j / Memgraph / Neptune.\n */\n\nexport interface GraphNode<TProps = Record<string, unknown>> {\n id: string\n /** Type / label — 'person', 'company', 'topic'. */\n kind: string\n properties?: TProps\n /** ISO timestamp when the node was first inserted. */\n createdAt?: string\n /** ISO timestamp of the latest update. */\n updatedAt?: string\n}\n\nexport interface GraphEdge<TProps = Record<string, unknown>> {\n id: string\n /** Verb / relation type — 'knows', 'works-at', 'cites'. */\n label: string\n from: string\n to: string\n /** Optional weight — confidence, recency, or frequency. */\n weight?: number\n properties?: TProps\n}\n\nexport interface GraphQuery {\n kind?: string\n label?: string\n from?: string\n to?: string\n}\n\nexport interface GraphMemory {\n upsertNode: <T>(node: GraphNode<T>) => Promise<GraphNode<T>>\n upsertEdge: <T>(edge: GraphEdge<T>) => Promise<GraphEdge<T>>\n getNode: <T>(id: string) => Promise<GraphNode<T> | null>\n findNodes: <T>(query?: GraphQuery) => Promise<GraphNode<T>[]>\n findEdges: <T>(query?: GraphQuery) => Promise<GraphEdge<T>[]>\n /** Breadth-first neighbors of `id` up to `depth`. Default 1. */\n neighbors: <T>(id: string, options?: { depth?: number; label?: string }) => Promise<GraphNode<T>[]>\n deleteNode: (id: string) => Promise<void>\n deleteEdge: (id: string) => Promise<void>\n clear?: () => Promise<void>\n}\n\n/**\n * In-memory graph — fine for tests, single-process demos, and as\n * reference for what a backing store needs to implement.\n */\nexport function createInMemoryGraph(): GraphMemory {\n const nodes = new Map<string, GraphNode<unknown>>()\n const edges = new Map<string, GraphEdge<unknown>>()\n\n const matchesNode = (node: GraphNode<unknown>, query?: GraphQuery): boolean => {\n if (!query) return true\n if (query.kind && node.kind !== query.kind) return false\n return true\n }\n const matchesEdge = (edge: GraphEdge<unknown>, query?: GraphQuery): boolean => {\n if (!query) return true\n if (query.label && edge.label !== query.label) return false\n if (query.from && edge.from !== query.from) return false\n if (query.to && edge.to !== query.to) return false\n return true\n }\n\n return {\n async upsertNode<T>(node: GraphNode<T>) {\n const now = new Date().toISOString()\n const existing = nodes.get(node.id)\n const merged = {\n ...(existing ?? {}),\n ...node,\n createdAt: existing?.createdAt ?? now,\n updatedAt: now,\n }\n nodes.set(node.id, merged as GraphNode<unknown>)\n return merged as GraphNode<T>\n },\n async upsertEdge(edge) {\n edges.set(edge.id, edge as GraphEdge<unknown>)\n return edge\n },\n async getNode<T>(id: string) {\n const hit = nodes.get(id)\n return hit ? ({ ...hit } as GraphNode<T>) : null\n },\n async findNodes<T>(query?: GraphQuery) {\n return Array.from(nodes.values())\n .filter(n => matchesNode(n, query))\n .map(n => ({ ...n }) as GraphNode<T>)\n },\n async findEdges<T>(query?: GraphQuery) {\n return Array.from(edges.values())\n .filter(e => matchesEdge(e, query))\n .map(e => ({ ...e }) as GraphEdge<T>)\n },\n async neighbors<T>(id: string, options: { depth?: number; label?: string } = {}) {\n const depth = Math.max(1, options.depth ?? 1)\n const visited = new Set<string>([id])\n let frontier = new Set<string>([id])\n for (let i = 0; i < depth; i++) {\n const next = new Set<string>()\n for (const edge of edges.values()) {\n if (options.label && edge.label !== options.label) continue\n if (frontier.has(edge.from) && !visited.has(edge.to)) next.add(edge.to)\n if (frontier.has(edge.to) && !visited.has(edge.from)) next.add(edge.from)\n }\n for (const n of next) visited.add(n)\n frontier = next\n if (next.size === 0) break\n }\n visited.delete(id)\n return Array.from(visited, nid => nodes.get(nid)).filter((n): n is GraphNode<unknown> => Boolean(n)).map(n => ({ ...n }) as GraphNode<T>)\n },\n async deleteNode(id) {\n nodes.delete(id)\n for (const [eid, edge] of edges) {\n if (edge.from === id || edge.to === id) edges.delete(eid)\n }\n },\n async deleteEdge(id) {\n edges.delete(id)\n },\n async clear() {\n nodes.clear()\n edges.clear()\n },\n }\n}\n","import type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\n/**\n * pgvector-backed VectorMemory. We accept a minimal async SQL runner\n * so the caller picks the driver (`pg`, `postgres`, `@neondatabase/serverless`,\n * `@supabase/postgres-js`, ...). Expects a table with columns\n * `id text primary key`, `content text`, `embedding vector(N)`,\n * `metadata jsonb`.\n */\n\nexport interface PgVectorRunner {\n query: <T = Record<string, unknown>>(\n sql: string,\n params: unknown[],\n ) => Promise<{ rows: T[] }>\n}\n\nexport interface PgVectorConfig {\n runner: PgVectorRunner\n /** Table name. Default 'agentskit_vectors'. */\n table?: string\n /** Default topK for search. Default 10. */\n topK?: number\n}\n\nfunction formatVector(embedding: number[]): string {\n return `[${embedding.join(',')}]`\n}\n\nexport function pgvector(config: PgVectorConfig): VectorMemory {\n const table = config.table ?? 'agentskit_vectors'\n const defaultTopK = Math.max(1, config.topK ?? 10)\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n const values: unknown[] = []\n const placeholders = docs\n .map((doc, i) => {\n const base = i * 4\n values.push(doc.id, doc.content, formatVector(doc.embedding), JSON.stringify(doc.metadata ?? {}))\n return `($${base + 1}, $${base + 2}, $${base + 3}::vector, $${base + 4}::jsonb)`\n })\n .join(', ')\n await config.runner.query(\n `INSERT INTO ${table} (id, content, embedding, metadata) VALUES ${placeholders}\n ON CONFLICT (id) DO UPDATE SET content = EXCLUDED.content, embedding = EXCLUDED.embedding, metadata = EXCLUDED.metadata`,\n values,\n )\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const { rows } = await config.runner.query<{\n id: string\n content: string\n metadata: Record<string, unknown> | null\n distance: number\n }>(\n `SELECT id, content, metadata, (embedding <=> $1::vector) AS distance\n FROM ${table}\n ORDER BY embedding <=> $1::vector\n LIMIT $2`,\n [formatVector(embedding), topK],\n )\n return rows\n .map(r => ({\n id: r.id,\n content: r.content,\n metadata: r.metadata ?? undefined,\n score: 1 - r.distance,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n const placeholders = ids.map((_, i) => `$${i + 1}`).join(',')\n await config.runner.query(`DELETE FROM ${table} WHERE id IN (${placeholders})`, ids)\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface PineconeConfig {\n /** Full index URL, e.g. `https://<idx>-<project>.svc.<region>.pinecone.io`. */\n indexUrl: string\n apiKey: string\n /** Namespace. Default ''. */\n namespace?: string\n /** Default topK for search. Default 10. */\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(config: PineconeConfig, path: string, body: unknown): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.indexUrl}${path}`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n 'api-key': config.apiKey,\n },\n body: JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `pinecone ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.indexUrl}${path}. Check api-key + index URL/namespace.`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function pinecone(config: PineconeConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n const namespace = config.namespace ?? ''\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, '/vectors/upsert', {\n namespace,\n vectors: docs.map(d => ({\n id: d.id,\n values: d.embedding,\n metadata: { content: d.content, ...(d.metadata ?? {}) },\n })),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n matches?: Array<{ id: string; score: number; metadata?: Record<string, unknown> }>\n }>(config, '/query', {\n namespace,\n topK,\n vector: embedding,\n includeMetadata: true,\n })\n return (result.matches ?? [])\n .filter(m => m.score >= threshold)\n .map(m => ({\n id: m.id,\n content: String((m.metadata ?? {}).content ?? ''),\n metadata: m.metadata,\n score: m.score,\n }))\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, '/vectors/delete', { namespace, ids })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface QdrantConfig {\n /** Base URL, e.g. `https://xxx.cluster-qdrant.io`. */\n url: string\n apiKey?: string\n collection: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: QdrantConfig,\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method,\n headers: {\n 'content-type': 'application/json',\n ...(config.apiKey ? { 'api-key': config.apiKey } : {}),\n },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `qdrant ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check api-key + collection \"${config.collection}\".`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function qdrant(config: QdrantConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, 'PUT', `/collections/${config.collection}/points`, {\n points: docs.map(d => ({\n id: d.id,\n vector: d.embedding,\n payload: { content: d.content, ...(d.metadata ?? {}) },\n })),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n result?: Array<{\n id: string | number\n score: number\n payload?: Record<string, unknown>\n }>\n }>(config, 'POST', `/collections/${config.collection}/points/search`, {\n vector: embedding,\n limit: topK,\n with_payload: true,\n })\n return (result.result ?? [])\n .filter(m => m.score >= threshold)\n .map(m => ({\n id: String(m.id),\n content: String((m.payload ?? {}).content ?? ''),\n metadata: m.payload,\n score: m.score,\n }))\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, 'POST', `/collections/${config.collection}/points/delete`, {\n points: ids,\n })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface ChromaConfig {\n /** Base URL of a running Chroma HTTP server. */\n url: string\n collection: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: ChromaConfig,\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method,\n headers: { 'content-type': 'application/json' },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `chroma ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check Chroma server health + collection name.`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function chroma(config: ChromaConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, 'POST', `/api/v1/collections/${config.collection}/upsert`, {\n ids: docs.map(d => d.id),\n embeddings: docs.map(d => d.embedding),\n documents: docs.map(d => d.content),\n metadatas: docs.map(d => d.metadata ?? {}),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n ids?: string[][]\n documents?: string[][]\n metadatas?: Array<Array<Record<string, unknown>>>\n distances?: number[][]\n }>(config, 'POST', `/api/v1/collections/${config.collection}/query`, {\n query_embeddings: [embedding],\n n_results: topK,\n })\n const ids = result.ids?.[0] ?? []\n const documents = result.documents?.[0] ?? []\n const metadatas = result.metadatas?.[0] ?? []\n const distances = result.distances?.[0] ?? []\n return ids\n .map((id, i) => ({\n id,\n content: documents[i] ?? '',\n metadata: metadatas[i],\n score: distances[i] !== undefined ? 1 - distances[i]! : 0,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, 'POST', `/api/v1/collections/${config.collection}/delete`, { ids })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface UpstashVectorConfig {\n url: string\n token: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: UpstashVectorConfig,\n path: string,\n body: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n authorization: `Bearer ${config.token}`,\n },\n body: JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `upstash-vector ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check token + index URL.`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\n/**\n * Upstash Vector — HTTP-only serverless vector DB. The REST surface\n * is tiny enough to implement directly without pulling the SDK.\n */\nexport function upstashVector(config: UpstashVectorConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(\n config,\n '/upsert',\n docs.map(d => ({\n id: d.id,\n vector: d.embedding,\n metadata: { content: d.content, ...(d.metadata ?? {}) },\n })),\n )\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n result?: Array<{ id: string; score: number; metadata?: Record<string, unknown> }>\n }>(config, '/query', { vector: embedding, topK, includeMetadata: true })\n return (result.result ?? [])\n .filter(m => m.score >= threshold)\n .map(m => ({\n id: m.id,\n content: String((m.metadata ?? {}).content ?? ''),\n metadata: m.metadata,\n score: m.score,\n }))\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, '/delete', { ids })\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { VectorMemory } from '@agentskit/core'\nimport { pgvector, type PgVectorRunner } from './pgvector'\n\nexport interface SupabaseVectorStoreConfig {\n /** Supabase project URL, e.g. `https://xyz.supabase.co`. */\n url: string\n /** Service-role key (server-side only). */\n serviceRoleKey: string\n /** Table name. Default `agentskit_vectors`. */\n table?: string\n /** Default topK for search. Default 10. */\n topK?: number\n}\n\ninterface SupabaseRpcResult<T> {\n data: T | null\n error: { message: string } | null\n}\n\ninterface SupabasePostgrestQuery {\n rpc<T>(fn: string, params?: Record<string, unknown>): Promise<SupabaseRpcResult<T>>\n}\n\ninterface SupabaseClientLike {\n from(table: string): SupabasePostgrestQuery & {\n select(columns?: string): unknown\n insert(rows: unknown[]): unknown\n upsert(rows: unknown[], opts?: { onConflict?: string }): unknown\n delete(): { in(column: string, values: unknown[]): unknown }\n }\n rpc<T>(fn: string, params?: Record<string, unknown>): Promise<SupabaseRpcResult<T>>\n}\n\ninterface SupabaseModule {\n createClient(url: string, key: string): SupabaseClientLike\n}\n\nlet cachedSdk: Promise<SupabaseModule> | null = null\nasync function loadSdk(): Promise<SupabaseModule> {\n if (!cachedSdk) {\n cachedSdk = (async () => {\n try {\n const moduleId = '@supabase/supabase-js'\n return (await import(/* @vite-ignore */ moduleId)) as unknown as SupabaseModule\n } catch {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_PEER_MISSING,\n message: 'Install @supabase/supabase-js to use supabaseVectorStore: npm install @supabase/supabase-js',\n hint: 'supabaseVectorStore uses the optional peer \"@supabase/supabase-js\".',\n })\n }\n })()\n }\n return cachedSdk\n}\n\nfunction buildRunner(client: SupabaseClientLike): PgVectorRunner {\n // Supabase has no public raw-SQL API on `supabase-js`. We expose the same\n // shape via a thin wrapper around an `execute_sql` RPC that the user\n // creates server-side; this keeps the pgvector adapter wiring intact.\n return {\n async query<T>(sql: string, params: unknown[]) {\n const result = await client.rpc<T[]>('agentskit_execute_sql', { sql, params })\n if (result.error) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `supabase: ${result.error.message}`,\n hint: 'Check the agentskit_execute_sql RPC + service role key permissions.',\n })\n }\n return { rows: (result.data ?? []) as T[] }\n },\n }\n}\n\n/**\n * Supabase-hosted pgvector. Wraps the existing `pgvector` adapter with a\n * Supabase RPC runner so callers don't need to import a separate pg driver.\n *\n * Server-side setup (run once in Supabase SQL editor):\n * create extension if not exists vector;\n * create table agentskit_vectors (\n * id text primary key, content text, embedding vector(1536),\n * metadata jsonb\n * );\n * create or replace function agentskit_execute_sql(sql text, params jsonb)\n * returns setof json language plpgsql security definer as $$\n * begin\n * return query execute sql using params;\n * end;\n * $$;\n *\n * `@supabase/supabase-js` is an optional peer dependency loaded lazily.\n */\nexport function supabaseVectorStore(config: SupabaseVectorStoreConfig): VectorMemory {\n let runnerPromise: Promise<PgVectorRunner> | null = null\n const getRunner = (): Promise<PgVectorRunner> => {\n if (!runnerPromise) {\n runnerPromise = (async () => {\n const sdk = await loadSdk()\n const client = sdk.createClient(config.url, config.serviceRoleKey)\n return buildRunner(client)\n })()\n }\n return runnerPromise\n }\n\n // Lazy delegate — we don't have a runner until first call.\n let backend: VectorMemory | null = null\n const getBackend = async (): Promise<VectorMemory> => {\n if (!backend) {\n const runner = await getRunner()\n backend = pgvector({\n runner,\n table: config.table,\n topK: config.topK,\n })\n }\n return backend\n }\n\n return {\n async store(docs) {\n const b = await getBackend()\n return b.store(docs)\n },\n async search(embedding, options) {\n const b = await getBackend()\n return b.search(embedding, options)\n },\n async delete(ids) {\n const b = await getBackend()\n return b.delete?.(ids)\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface WeaviateConfig {\n /** Cluster URL, e.g. `https://my-cluster.weaviate.network`. */\n url: string\n /** Optional API key (Weaviate Cloud Services). */\n apiKey?: string\n /** Class name in the Weaviate schema. */\n className: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: WeaviateConfig,\n method: 'GET' | 'POST' | 'PUT' | 'DELETE',\n path: string,\n body?: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method,\n headers: {\n 'content-type': 'application/json',\n ...(config.apiKey ? { authorization: `Bearer ${config.apiKey}` } : {}),\n },\n body: body === undefined ? undefined : JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `weaviate ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check API key + class name \"${config.className}\".`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function weaviateVectorStore(config: WeaviateConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n const className = config.className\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, 'POST', '/v1/batch/objects', {\n objects: docs.map(d => ({\n class: className,\n id: d.id,\n properties: { content: d.content, ...(d.metadata ?? {}) },\n vector: d.embedding,\n })),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const query = `{\n Get {\n ${className}(nearVector: { vector: [${embedding.join(',')}] }, limit: ${topK}) {\n content\n _additional { id certainty }\n }\n }\n }`\n const result = await call<{\n data?: { Get?: Record<string, Array<{ content?: string; _additional?: { id: string; certainty?: number } } & Record<string, unknown>>> }\n }>(config, 'POST', '/v1/graphql', { query })\n const rows = result.data?.Get?.[className] ?? []\n return rows\n .map(row => ({\n id: String(row._additional?.id ?? ''),\n content: String(row.content ?? ''),\n score: row._additional?.certainty ?? 0,\n metadata: row,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n for (const id of ids) {\n await call(config, 'DELETE', `/v1/objects/${className}/${id}`)\n }\n },\n }\n}\n","import { ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\nexport interface MilvusConfig {\n /** Milvus REST endpoint, e.g. `https://in03-xxx.api.gcp-us-west1.zillizcloud.com`. */\n url: string\n /** API key / Zilliz Cloud token (Bearer). */\n token?: string\n collection: string\n /** Vector field name in the schema. Default `vector`. */\n vectorField?: string\n topK?: number\n fetch?: typeof globalThis.fetch\n}\n\nasync function call<T>(\n config: MilvusConfig,\n path: string,\n body: unknown,\n): Promise<T> {\n const fetchImpl = config.fetch ?? globalThis.fetch\n const response = await fetchImpl(`${config.url}${path}`, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n ...(config.token ? { authorization: `Bearer ${config.token}` } : {}),\n },\n body: JSON.stringify(body),\n })\n const text = await response.text()\n if (!response.ok) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_REMOTE_HTTP,\n message: `milvus ${response.status}: ${text.slice(0, 200)}`,\n hint: `URL ${config.url}${path}. Check token + collection \"${config.collection}\".`,\n })\n }\n return (text.length > 0 ? JSON.parse(text) : {}) as T\n}\n\nexport function milvusVectorStore(config: MilvusConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n const vectorField = config.vectorField ?? 'vector'\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await call(config, '/v2/vectordb/entities/upsert', {\n collectionName: config.collection,\n data: docs.map(d => ({\n id: d.id,\n [vectorField]: d.embedding,\n content: d.content,\n metadata: d.metadata ?? {},\n })),\n })\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const result = await call<{\n data?: Array<{ id: string; distance: number; content?: string; metadata?: Record<string, unknown> }>\n }>(config, '/v2/vectordb/entities/search', {\n collectionName: config.collection,\n data: [embedding],\n annsField: vectorField,\n limit: topK,\n outputFields: ['content', 'metadata'],\n })\n return (result.data ?? [])\n .map(m => ({\n id: String(m.id),\n content: String(m.content ?? ''),\n score: 1 - m.distance,\n metadata: m.metadata,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await call(config, '/v2/vectordb/entities/delete', {\n collectionName: config.collection,\n filter: `id in [${ids.map(id => `\"${id}\"`).join(',')}]`,\n })\n },\n }\n}\n","import type { RetrievedDocument, VectorDocument, VectorMemory } from '@agentskit/core'\n\n/**\n * MongoDB Atlas Vector Search adapter. Caller injects a typed collection\n * shape (drop-in for the official `mongodb` driver's `Collection` type) so\n * we don't bundle a driver. Atlas' \\`$vectorSearch\\` aggregation runs\n * server-side; we just translate \\`store\\` / \\`search\\` / \\`delete\\` to\n * insertMany + aggregate + deleteMany.\n */\n\nexport interface MongoCollectionLike {\n insertMany(docs: Array<Record<string, unknown>>, options?: unknown): Promise<unknown>\n deleteMany(filter: Record<string, unknown>): Promise<unknown>\n aggregate<T = Record<string, unknown>>(pipeline: Array<Record<string, unknown>>): {\n toArray(): Promise<T[]>\n }\n}\n\nexport interface MongoAtlasVectorConfig {\n collection: MongoCollectionLike\n /** Atlas Search index name on the embedding field. */\n indexName: string\n /** Field that holds the embedding vector. Default `embedding`. */\n vectorField?: string\n /** numCandidates for $vectorSearch. Default `topK * 10`. */\n numCandidates?: number\n topK?: number\n}\n\nexport function mongoAtlasVectorStore(config: MongoAtlasVectorConfig): VectorMemory {\n const defaultTopK = Math.max(1, config.topK ?? 10)\n const vectorField = config.vectorField ?? 'embedding'\n\n return {\n async store(docs: VectorDocument[]) {\n if (docs.length === 0) return\n await config.collection.insertMany(docs.map(d => ({\n _id: d.id,\n content: d.content,\n [vectorField]: d.embedding,\n metadata: d.metadata ?? {},\n })))\n },\n\n async search(embedding: number[], options = {}): Promise<RetrievedDocument[]> {\n const topK = options.topK ?? defaultTopK\n const threshold = options.threshold ?? 0\n const numCandidates = config.numCandidates ?? topK * 10\n const cursor = config.collection.aggregate<{\n _id: string; content: string; metadata?: Record<string, unknown>; score: number\n }>([\n {\n $vectorSearch: {\n index: config.indexName,\n path: vectorField,\n queryVector: embedding,\n numCandidates,\n limit: topK,\n },\n },\n { $project: { content: 1, metadata: 1, score: { $meta: 'vectorSearchScore' } } },\n ])\n const rows = await cursor.toArray()\n return rows\n .map(row => ({\n id: String(row._id),\n content: String(row.content ?? ''),\n score: row.score,\n metadata: row.metadata,\n }))\n .filter(r => (r.score ?? 0) >= threshold)\n },\n\n async delete(ids: string[]) {\n if (ids.length === 0) return\n await config.collection.deleteMany({ _id: { $in: ids } })\n },\n }\n}\n","import { ConfigError, ErrorCodes, MemoryError } from '@agentskit/core'\nimport type { ChatMemory, Message } from '@agentskit/core'\n\n/**\n * Client-side encrypted ChatMemory wrapper. Keys never leave the\n * caller — the backing store only ever sees an opaque\n * `{ iv, ct }` payload stashed in `metadata.ciphertext` and\n * `metadata.iv`; `content` becomes an empty string so rogue\n * middleware can't peek at it either.\n *\n * Uses Web Crypto (AES-GCM, 256-bit). Available on Node 20+ and all\n * modern browsers. BYO key material — typically generated per-user\n * during onboarding and stored only on their device.\n */\n\nexport interface EncryptedMemoryOptions {\n backing: ChatMemory\n /** 32-byte raw key (e.g. `crypto.getRandomValues(new Uint8Array(32))`). */\n key: Uint8Array | CryptoKey\n /** Override for tests. Defaults to `globalThis.crypto.subtle`. */\n subtle?: SubtleCrypto\n /** Random source. Defaults to `globalThis.crypto.getRandomValues`. */\n getRandomValues?: <T extends ArrayBufferView>(array: T) => T\n /** Optional AAD — content that binds ciphertext to context (user id, room). */\n aad?: Uint8Array\n}\n\nexport interface EncryptedEnvelope {\n ciphertext: string\n iv: string\n /** Plaintext-length marker so the agent sees a non-empty content hint. */\n length: number\n}\n\nfunction toBase64(bytes: Uint8Array): string {\n if (typeof Buffer !== 'undefined') return Buffer.from(bytes).toString('base64')\n let binary = ''\n for (const b of bytes) binary += String.fromCharCode(b)\n return btoa(binary)\n}\n\nfunction fromBase64(value: string): Uint8Array {\n if (typeof Buffer !== 'undefined') return new Uint8Array(Buffer.from(value, 'base64'))\n const binary = atob(value)\n const bytes = new Uint8Array(binary.length)\n for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i)\n return bytes\n}\n\nasync function resolveKey(\n subtle: SubtleCrypto,\n material: Uint8Array | CryptoKey,\n): Promise<CryptoKey> {\n if ('type' in material && material.type === 'secret') return material\n const raw = material as Uint8Array\n if (raw.byteLength !== 32) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `createEncryptedMemory: key must be 32 bytes (got ${raw.byteLength})`,\n hint: 'Generate a 32-byte key, e.g. crypto.getRandomValues(new Uint8Array(32)).',\n })\n }\n return subtle.importKey('raw', raw as BufferSource, { name: 'AES-GCM' }, false, ['encrypt', 'decrypt'])\n}\n\nexport async function createEncryptedMemory(\n options: EncryptedMemoryOptions,\n): Promise<ChatMemory> {\n const subtle = options.subtle ?? globalThis.crypto?.subtle\n const random = options.getRandomValues ?? (<T extends ArrayBufferView>(v: T) => globalThis.crypto.getRandomValues(v as ArrayBufferView & { buffer: ArrayBuffer }) as T)\n if (!subtle) {\n throw new MemoryError({\n code: ErrorCodes.AK_MEMORY_LOAD_FAILED,\n message: 'createEncryptedMemory: SubtleCrypto not available',\n hint: 'Run on Node ≥ 20 / a modern browser, or pass options.subtle explicitly.',\n })\n }\n\n const key = await resolveKey(subtle, options.key)\n const aad = options.aad\n\n const encrypt = async (plain: string): Promise<EncryptedEnvelope> => {\n const iv = random(new Uint8Array(12))\n const data = new TextEncoder().encode(plain)\n const params: AesGcmParams = aad\n ? { name: 'AES-GCM', iv: iv as BufferSource, additionalData: aad as BufferSource }\n : { name: 'AES-GCM', iv: iv as BufferSource }\n const cipher = await subtle.encrypt(params, key, data as BufferSource)\n return {\n ciphertext: toBase64(new Uint8Array(cipher)),\n iv: toBase64(iv as Uint8Array),\n length: plain.length,\n }\n }\n\n const decrypt = async (envelope: EncryptedEnvelope): Promise<string> => {\n const iv = fromBase64(envelope.iv) as BufferSource\n const params: AesGcmParams = aad\n ? { name: 'AES-GCM', iv, additionalData: aad as BufferSource }\n : { name: 'AES-GCM', iv }\n const plain = await subtle.decrypt(params, key, fromBase64(envelope.ciphertext) as BufferSource)\n return new TextDecoder().decode(plain)\n }\n\n const encryptMessage = async (m: Message): Promise<Message> => {\n if (m.metadata?.agentskitEncrypted) return m\n const envelope = await encrypt(m.content ?? '')\n return {\n ...m,\n content: '',\n metadata: {\n ...(m.metadata ?? {}),\n agentskitEncrypted: true,\n ciphertext: envelope.ciphertext,\n iv: envelope.iv,\n length: envelope.length,\n },\n }\n }\n\n const decryptMessage = async (m: Message): Promise<Message> => {\n if (!m.metadata?.agentskitEncrypted) return m\n const envelope: EncryptedEnvelope = {\n ciphertext: String(m.metadata.ciphertext),\n iv: String(m.metadata.iv),\n length: Number(m.metadata.length ?? 0),\n }\n const content = await decrypt(envelope)\n const { agentskitEncrypted: _, ciphertext: __, iv: ___, length: ____, ...rest } = m.metadata\n return { ...m, content, metadata: Object.keys(rest).length > 0 ? rest : undefined }\n }\n\n return {\n async load() {\n const stored = await options.backing.load()\n return Promise.all(stored.map(decryptMessage))\n },\n async save(messages) {\n const encrypted = await Promise.all(messages.map(encryptMessage))\n await options.backing.save(encrypted)\n },\n async clear() {\n await options.backing.clear?.()\n },\n }\n}\n","import type { ChatMemory, Message } from '@agentskit/core'\n\nexport interface HierarchicalRecall {\n /**\n * Index a message for later retrieval. Called once per message as\n * it moves from working → recall (usually: embed + store in a\n * vector DB).\n */\n index: (message: Message) => void | Promise<void>\n /**\n * Given the hot working window, return up to `topK` messages from\n * the recall tier that are relevant to the current turn. The hub\n * splices results chronologically alongside the working window.\n */\n query: (input: { working: Message[]; topK: number }) => Message[] | Promise<Message[]>\n}\n\nexport interface HierarchicalMemoryOptions {\n /** Hot window — the messages always loaded in full. */\n working: ChatMemory\n /** Cold storage — every message ever seen is written here. */\n archival: ChatMemory\n /**\n * Mid-term recall layer (usually a vector store). Optional;\n * without it the hub behaves like virtualized memory with a hard\n * backing store.\n */\n recall?: HierarchicalRecall\n /**\n * Maximum messages to keep in `working`. Older messages spill\n * into recall + archival. Default 50.\n */\n workingLimit?: number\n /**\n * Max recalled messages to splice on each `load()`. Default 5.\n */\n recallTopK?: number\n}\n\nexport interface HierarchicalMemory extends ChatMemory {\n /** Full archival history. Always the source of truth. */\n archival: () => Promise<Message[]>\n /** Current working-window snapshot. */\n working: () => Promise<Message[]>\n}\n\nfunction mergeChronological(a: Message[], b: Message[]): Message[] {\n const out = [...a, ...b]\n out.sort((x, y) => x.createdAt.getTime() - y.createdAt.getTime())\n return out\n}\n\n/**\n * MemGPT-style tiered memory. Three tiers:\n * - working: always-loaded hot window (bounded by `workingLimit`).\n * - recall: mid-term searchable layer (usually a vector store).\n * - archival: cold store that always holds the full conversation.\n *\n * On every `save`, new messages are appended to archival, messages\n * that overflow the working window are indexed into recall, and the\n * working tier is trimmed to `workingLimit`.\n *\n * On every `load`, the hub returns working + up to `recallTopK`\n * messages surfaced by the recall tier, spliced chronologically.\n */\nexport function createHierarchicalMemory(\n options: HierarchicalMemoryOptions,\n): HierarchicalMemory {\n const workingLimit = Math.max(1, options.workingLimit ?? 50)\n const recallTopK = Math.max(0, options.recallTopK ?? 5)\n\n const loadAll = async (source: ChatMemory): Promise<Message[]> => [...(await source.load())]\n\n return {\n async load() {\n const hot = await loadAll(options.working)\n if (!options.recall || recallTopK === 0) return hot\n let recalled: Message[] = []\n try {\n recalled = [...(await options.recall.query({ working: hot, topK: recallTopK }))]\n } catch {\n recalled = []\n }\n const hotIds = new Set(hot.map(m => m.id))\n return mergeChronological(\n recalled.filter(m => !hotIds.has(m.id)),\n hot,\n )\n },\n\n async save(messages) {\n const knownArchival = await loadAll(options.archival)\n const archivalIds = new Set(knownArchival.map(m => m.id))\n const fresh = messages.filter(m => !archivalIds.has(m.id))\n\n // Archival: append everything, preserving full history.\n if (fresh.length > 0) {\n await options.archival.save(mergeChronological(knownArchival, fresh))\n }\n\n // Working: trim to the tail `workingLimit` of the caller's view.\n const tail = messages.slice(Math.max(0, messages.length - workingLimit))\n const overflow = messages.slice(0, Math.max(0, messages.length - workingLimit))\n await options.working.save(tail)\n\n if (options.recall) {\n const knownOverflow = overflow.filter(m => fresh.some(f => f.id === m.id))\n for (const m of knownOverflow) await options.recall.index(m)\n // Also index freshly saved messages that never hit working\n // (e.g. system/tool transcripts).\n const appended = fresh.filter(m => !tail.some(t => t.id === m.id))\n for (const m of appended) await options.recall.index(m)\n }\n },\n\n async clear() {\n await options.working.clear?.()\n await options.archival.clear?.()\n },\n\n async archival() {\n return loadAll(options.archival)\n },\n\n async working() {\n return loadAll(options.working)\n },\n }\n}\n","import type { ChatMemory, VectorMemory } from '@agentskit/core'\n\n/**\n * GDPR / LGPD / CCPA data-subject deletion. ADR-0003 deferred\n * retention; this module is the \"forget the user\" half.\n *\n * Design: rather than mutate every memory contract (and break the\n * public API freeze, RFC-0007), we attach `forgetSubject` as a\n * **capability** on a memory instance. Backends that can implement it\n * declare a `subjectFilter` (how to recognise records belonging to a\n * subject) and `deleteFn` (how to remove them). `forgetSubject(memory,\n * subjectId)` walks every backend the runtime is configured with and\n * runs the deletion, returning a per-backend report you can sign into\n * the audit log (#162).\n *\n * Closes issue #798.\n */\n\nexport interface ForgettableMemory {\n /**\n * Backend identifier (`'pgvector'`, `'pinecone'`, `'sqlite'`, etc.).\n * Used for the audit-log entry and for the per-backend report.\n */\n __agentskitBackend: string\n /** Delete every record where `metadata.subjectId === subjectId`. */\n forgetSubject: (subjectId: string) => Promise<ForgetReport>\n}\n\nexport interface ForgetReport {\n backend: string\n deletedCount: number\n /** ISO timestamp of the deletion. */\n at: string\n /** Records the deletion couldn't reach (offline replica, missing index). */\n failures?: Array<{ id: string; reason: string }>\n}\n\nexport interface ForgetSubjectResult {\n subjectId: string\n reports: ForgetReport[]\n totalDeleted: number\n /** Hash you can sign into the audit log to prove the deletion ran. */\n evidenceHash: string\n}\n\nfunction isForgettable(value: unknown): value is ForgettableMemory {\n return (\n !!value &&\n typeof value === 'object' &&\n 'forgetSubject' in value &&\n typeof (value as ForgettableMemory).forgetSubject === 'function'\n )\n}\n\nasync function hash(input: string): Promise<string> {\n const encoded = new TextEncoder().encode(input)\n const digest = await crypto.subtle.digest('SHA-256', encoded)\n return Array.from(new Uint8Array(digest))\n .map(b => b.toString(16).padStart(2, '0'))\n .join('')\n}\n\n/**\n * Walk every memory passed in and run `forgetSubject(subjectId)` on\n * any that implement it. Memories that don't implement it are\n * silently skipped — they hold no subject-scoped data, or you must\n * delete out-of-band (e.g. log retention).\n */\nexport async function forgetSubject(\n memories: Array<ChatMemory | VectorMemory | unknown>,\n subjectId: string,\n): Promise<ForgetSubjectResult> {\n const reports: ForgetReport[] = []\n for (const memory of memories) {\n if (!isForgettable(memory)) continue\n reports.push(await memory.forgetSubject(subjectId))\n }\n const totalDeleted = reports.reduce((sum, r) => sum + r.deletedCount, 0)\n const evidenceHash = await hash(\n JSON.stringify({ subjectId, reports: reports.map(r => ({ b: r.backend, n: r.deletedCount, at: r.at })) }),\n )\n return { subjectId, reports, totalDeleted, evidenceHash }\n}\n\n/**\n * Helper for backends that key records by `metadata.subjectId`. Wraps\n * any `delete(ids)`-style API into a `ForgettableMemory`.\n */\nexport function makeForgettable<M extends object>(\n memory: M,\n options: {\n backend: string\n listIds: (subjectId: string) => Promise<string[]>\n deleteIds: (ids: string[]) => Promise<void>\n },\n): M & ForgettableMemory {\n return Object.assign(memory, {\n __agentskitBackend: options.backend,\n forgetSubject: async (subjectId: string): Promise<ForgetReport> => {\n const ids = await options.listIds(subjectId)\n const failures: Array<{ id: string; reason: string }> = []\n try {\n await options.deleteIds(ids)\n } catch (err) {\n for (const id of ids) failures.push({ id, reason: (err as Error).message })\n }\n return {\n backend: options.backend,\n deletedCount: ids.length - failures.length,\n at: new Date().toISOString(),\n failures: failures.length ? failures : undefined,\n }\n },\n } satisfies ForgettableMemory)\n}\n","import type {\n ChatMemory,\n Message,\n VectorDocument,\n VectorMemory,\n} from '@agentskit/core'\nimport { ConfigError, ErrorCodes } from '@agentskit/core'\nimport {\n createPIIRedactor,\n tokenize,\n type PIIRule,\n type RedactionAuditSink,\n type RedactionVault,\n} from '@agentskit/core/security'\n\n/**\n * Wrap any `ChatMemory` so PII is redacted (or tokenized) on every\n * `save()`. Works with the in-memory, file, sqlite, turso, and redis\n * chat memories. `load()` and `clear()` are passthrough — reveal\n * happens at read time via `@agentskit/core/security` `reveal()`,\n * not inside the memory.\n *\n * `mode: 'redact'` (default) replaces matches with the rules' bracket\n * markers — irreversible. `mode: 'tokenize'` replaces matches with\n * opaque `<<piitoken:…>>` markers and stores originals in the vault\n * so role-gated `reveal()` can recover them.\n *\n * Closes the memory-write half of issue #791.\n */\n\nexport type RedactionMode = 'redact' | 'tokenize'\n\nexport interface ChatMemoryRedactionOptions {\n /**\n * Rules to apply. Pass `DEFAULT_PII_RULES` for the baseline set,\n * `compilePIITaxonomy(json)` for a custom JSON taxonomy, or any\n * hand-rolled `PIIRule[]`. Same shape as `createPIIRedactor`.\n */\n rules: PIIRule[]\n mode?: RedactionMode\n /** Required when `mode === 'tokenize'`. */\n vault?: RedactionVault\n /** Roles allowed to reveal — required when `mode === 'tokenize'`. */\n allowedRoles?: string[]\n /** Optional audit sink threaded into the vault `tokenize()` calls. */\n audit?: RedactionAuditSink\n}\n\nexport interface VectorMemoryRedactionOptions extends ChatMemoryRedactionOptions {}\n\nasync function transform(\n input: string,\n opts: ChatMemoryRedactionOptions,\n): Promise<string> {\n if (opts.mode === 'tokenize') {\n if (!opts.vault) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'wrapMemoryWithRedaction: vault is required when mode is \"tokenize\"',\n })\n }\n if (!opts.allowedRoles) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'wrapMemoryWithRedaction: allowedRoles is required when mode is \"tokenize\"',\n })\n }\n const result = await tokenize(input, {\n rules: opts.rules,\n vault: opts.vault,\n allowedRoles: opts.allowedRoles,\n audit: opts.audit,\n })\n return result.value\n }\n return createPIIRedactor({ rules: opts.rules }).redact(input).value\n}\n\nexport function wrapChatMemoryWithRedaction(\n inner: ChatMemory,\n options: ChatMemoryRedactionOptions,\n): ChatMemory {\n return {\n load: () => inner.load(),\n save: async messages => {\n const redacted: Message[] = await Promise.all(\n messages.map(async m => ({\n ...m,\n content: await transform(m.content ?? '', options),\n })),\n )\n await inner.save(redacted)\n },\n clear: inner.clear ? () => inner.clear!() : undefined,\n }\n}\n\n/**\n * Wrap any `VectorMemory` so each document's `content` is redacted (or\n * tokenized) before `store()`. `search()` and `delete()` pass through.\n *\n * Note: embeddings pass through verbatim. Customers who embed\n * plaintext PII separately (e.g. via a hosted embedding provider)\n * must redact the input to their embedder, not just to this wrapper.\n */\nexport function wrapVectorMemoryWithRedaction(\n inner: VectorMemory,\n options: VectorMemoryRedactionOptions,\n): VectorMemory {\n return {\n store: async docs => {\n const redacted: VectorDocument[] = await Promise.all(\n docs.map(async d => ({\n ...d,\n content: await transform(d.content, options),\n })),\n )\n await inner.store(redacted)\n },\n search: (embedding, opts) => inner.search(embedding, opts),\n delete: inner.delete ? ids => inner.delete!(ids) : undefined,\n }\n}\n","// Key-value memory store (`AgentskitMemoryStore`) — a generic get(key)/set(key,value)\n// store with TTL + max-key eviction, complementing the conversation `ChatMemory`\n// abstraction. Used for agent scratchpad, pipeline state, and arbitrary JSON\n// persistence keyed by string. Backends: in-memory / file / sqlite / localstorage\n// / redis / vector.\n\n/** Minimal KV store contract. */\nexport interface AgentskitMemoryStore {\n readonly id: string | undefined\n get(key: string): Promise<unknown>\n set(key: string, value: unknown): Promise<void>\n}\n\nexport interface KvEntry {\n readonly value: unknown\n readonly insertedAt: number\n}\n\nexport const isExpired = (entry: KvEntry, ttlSeconds: number | undefined, now: number): boolean => {\n if (ttlSeconds === undefined) return false\n return now - entry.insertedAt > ttlSeconds * 1000\n}\n\nexport const enforceMaxMessages = (map: Map<string, KvEntry>, maxMessages: number | undefined): void => {\n if (maxMessages === undefined) return\n while (map.size > maxMessages) {\n const oldest = map.keys().next().value\n if (oldest === undefined) break\n map.delete(oldest)\n }\n}\n\n// --- Config (plain interfaces; a host's Zod-validated config is structurally compatible) ---\n\ninterface CommonKvConfig {\n readonly maxMessages?: number\n readonly ttlSeconds?: number\n}\n\nexport interface InMemoryKvConfig extends CommonKvConfig {\n readonly backend: 'in-memory'\n}\nexport interface FileKvConfig extends CommonKvConfig {\n readonly backend: 'file'\n readonly path: string\n}\nexport interface SqliteKvConfig extends CommonKvConfig {\n readonly backend: 'sqlite'\n readonly path: string\n}\nexport interface RedisKvConfig extends CommonKvConfig {\n readonly backend: 'redis'\n readonly url: string\n readonly prefix: string\n}\nexport interface VectorKvConfig extends CommonKvConfig {\n readonly backend: 'vector'\n readonly provider: string\n readonly collection: string\n}\nexport interface LocalStorageKvConfig extends CommonKvConfig {\n readonly backend: 'localstorage'\n readonly key: string\n}\n\nexport type KvMemoryConfig =\n | InMemoryKvConfig\n | FileKvConfig\n | SqliteKvConfig\n | RedisKvConfig\n | VectorKvConfig\n | LocalStorageKvConfig\n\n// --- Injected-dependency contracts (so the store stays driver-agnostic) ---\n\nexport interface RedisLike {\n get(key: string): Promise<string | null>\n set(key: string, value: string, options?: { readonly EX?: number }): Promise<unknown>\n del(key: string): Promise<unknown>\n keys(pattern: string): Promise<readonly string[]>\n}\n\nexport interface SqliteStmt {\n run(...params: unknown[]): void\n get(...params: unknown[]): unknown\n all(...params: unknown[]): unknown[]\n}\n\nexport interface SqliteLike {\n exec(sql: string): void\n prepare(sql: string): SqliteStmt\n}\n\nexport type SqliteOpener = (path: string) => SqliteLike\n\nexport interface MemoryVectorStoreLike {\n upsert(\n rows: readonly {\n readonly chunkId: string\n readonly vec: readonly number[]\n readonly metadata: Record<string, unknown>\n }[],\n ): Promise<void>\n query(\n vec: readonly number[],\n k: number,\n filter?: Record<string, unknown>,\n ): Promise<readonly { readonly chunkId: string; readonly score: number; readonly metadata: Record<string, unknown> }[]>\n}\n\nexport interface MemoryEmbedderLike {\n embed(texts: readonly string[]): Promise<number[][]>\n}\n\nexport interface LocalStorageLike {\n getItem(key: string): string | null\n setItem(key: string, value: string): void\n}\n","// in-memory / file / localstorage KV backends.\n\nimport { mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\nimport {\n enforceMaxMessages,\n isExpired,\n type AgentskitMemoryStore,\n type FileKvConfig,\n type InMemoryKvConfig,\n type KvEntry,\n type LocalStorageKvConfig,\n type LocalStorageLike,\n} from './kv-store-types'\n\nexport const createInMemoryStore = (config: InMemoryKvConfig): AgentskitMemoryStore => {\n const store = new Map<string, KvEntry>()\n const now = () => Date.now()\n return {\n id: 'in-memory',\n async get(key) {\n const entry = store.get(key)\n if (!entry) return undefined\n if (isExpired(entry, config.ttlSeconds, now())) {\n store.delete(key)\n return undefined\n }\n return entry.value\n },\n async set(key, value) {\n store.set(key, { value, insertedAt: now() })\n enforceMaxMessages(store, config.maxMessages)\n },\n }\n}\n\nexport const createFileStore = (config: FileKvConfig): AgentskitMemoryStore => {\n const path = config.path\n let cache: Map<string, KvEntry> | undefined\n\n const load = async (): Promise<Map<string, KvEntry>> => {\n if (cache) return cache\n try {\n const parsed = JSON.parse(await readFile(path, 'utf8')) as Record<string, KvEntry>\n cache = new Map(Object.entries(parsed))\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') cache = new Map()\n else throw err\n }\n return cache\n }\n\n const persist = async (map: Map<string, KvEntry>): Promise<void> => {\n await mkdir(dirname(path), { recursive: true })\n await writeFile(path, JSON.stringify(Object.fromEntries(map), null, 2), { encoding: 'utf8', mode: 0o600 })\n }\n\n return {\n id: `file:${path}`,\n async get(key) {\n const map = await load()\n const entry = map.get(key)\n if (!entry) return undefined\n if (isExpired(entry, config.ttlSeconds, Date.now())) {\n map.delete(key)\n await persist(map)\n return undefined\n }\n return entry.value\n },\n async set(key, value) {\n const map = await load()\n map.set(key, { value, insertedAt: Date.now() })\n enforceMaxMessages(map, config.maxMessages)\n await persist(map)\n },\n }\n}\n\nexport interface CreateLocalStorageStoreOpts {\n readonly config: LocalStorageKvConfig\n readonly storage?: LocalStorageLike\n readonly filePath?: string\n}\n\nconst resolveLocalStorage = (): LocalStorageLike | undefined => {\n const maybe = (globalThis as { localStorage?: LocalStorageLike }).localStorage\n return maybe && typeof maybe.getItem === 'function' && typeof maybe.setItem === 'function' ? maybe : undefined\n}\n\nconst defaultLocalStoragePath = (): string => `${process.cwd()}/.agentskit/memory-localstorage.json`\n\nexport const createLocalStorageStore = ({\n config,\n storage = resolveLocalStorage(),\n filePath = defaultLocalStoragePath(),\n}: CreateLocalStorageStoreOpts): AgentskitMemoryStore => {\n const key = config.key\n let cache: Map<string, KvEntry> | undefined\n\n const mapFromJson = (raw: string | null): Map<string, KvEntry> =>\n raw ? new Map(Object.entries(JSON.parse(raw) as Record<string, KvEntry>)) : new Map()\n\n const loadFromFile = async (): Promise<Map<string, KvEntry>> => {\n if (cache) return cache\n try {\n cache = mapFromJson(await readFile(filePath, 'utf8'))\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') cache = new Map()\n else throw err\n }\n return cache\n }\n\n const load = async (): Promise<Map<string, KvEntry>> =>\n storage ? mapFromJson(storage.getItem(key)) : loadFromFile()\n\n const persist = async (map: Map<string, KvEntry>): Promise<void> => {\n const raw = JSON.stringify(Object.fromEntries(map), null, 2)\n if (storage) {\n storage.setItem(key, raw)\n return\n }\n await mkdir(dirname(filePath), { recursive: true })\n await writeFile(filePath, raw, { encoding: 'utf8', mode: 0o600 })\n }\n\n return {\n id: storage ? `localstorage:${key}` : `localstorage-file:${filePath}:${key}`,\n async get(itemKey) {\n const map = await load()\n const entry = map.get(itemKey)\n if (!entry) return undefined\n if (isExpired(entry, config.ttlSeconds, Date.now())) {\n map.delete(itemKey)\n await persist(map)\n return undefined\n }\n return entry.value\n },\n async set(itemKey, value) {\n const map = await load()\n map.set(itemKey, { value, insertedAt: Date.now() })\n enforceMaxMessages(map, config.maxMessages)\n await persist(map)\n },\n }\n}\n","// sqlite KV backend (injected opener; lazy default via better-sqlite3).\n\nimport {\n isExpired,\n type AgentskitMemoryStore,\n type SqliteKvConfig,\n type SqliteLike,\n type SqliteOpener,\n} from './kv-store-types'\n\nexport interface CreateSqliteStoreOpts {\n readonly config: SqliteKvConfig\n readonly open: SqliteOpener\n}\n\nexport const createSqliteStore = ({ config, open }: CreateSqliteStoreOpts): AgentskitMemoryStore => {\n const db = open(config.path)\n db.exec(\n `CREATE TABLE IF NOT EXISTS memory (\n key TEXT PRIMARY KEY,\n value TEXT NOT NULL,\n inserted_at INTEGER NOT NULL\n )`,\n )\n\n const getStmt = db.prepare('SELECT value, inserted_at FROM memory WHERE key = ?')\n const setStmt = db.prepare(\n 'INSERT INTO memory(key, value, inserted_at) VALUES(?, ?, ?) ' +\n 'ON CONFLICT(key) DO UPDATE SET value=excluded.value, inserted_at=excluded.inserted_at',\n )\n const delStmt = db.prepare('DELETE FROM memory WHERE key = ?')\n const oldestStmt = db.prepare('SELECT key FROM memory ORDER BY inserted_at ASC LIMIT 1')\n const countStmt = db.prepare('SELECT COUNT(*) as n FROM memory')\n\n const enforce = (): void => {\n if (config.maxMessages === undefined) return\n const countResult = countStmt.get() as { n: number } | undefined\n let count = countResult ? countResult.n : 0\n while (count > config.maxMessages) {\n const oldest = oldestStmt.get() as { key: string } | undefined\n if (!oldest) break\n delStmt.run(oldest.key)\n count -= 1\n }\n }\n\n return {\n id: `sqlite:${config.path}`,\n async get(key) {\n const row = getStmt.get(key) as { value: string; inserted_at: number } | undefined\n if (!row) return undefined\n if (isExpired({ value: '', insertedAt: row.inserted_at }, config.ttlSeconds, Date.now())) {\n delStmt.run(key)\n return undefined\n }\n return JSON.parse(row.value) as unknown\n },\n async set(key, value) {\n setStmt.run(key, JSON.stringify(value), Date.now())\n enforce()\n },\n }\n}\n\n/**\n * Lazy-import `better-sqlite3` and return an opener, or `undefined` when the\n * optional peer dep is absent (caller surfaces AK_MEMORY_PEER_MISSING).\n */\nexport const tryDefaultSqliteOpener = async (): Promise<SqliteOpener | undefined> => {\n try {\n const moduleId = 'better-sqlite3'\n const mod = (await import(/* @vite-ignore */ moduleId)) as unknown as {\n readonly default?: new (path: string) => SqliteLike\n }\n const Ctor = mod.default\n if (typeof Ctor !== 'function') return undefined\n return (path: string) => new Ctor(path)\n } catch {\n return undefined\n }\n}\n","// redis KV backend (injected client; lazy default via node-redis).\n\nimport { MemoryError } from '@agentskit/core'\nimport { isExpired, type AgentskitMemoryStore, type RedisKvConfig, type RedisLike } from './kv-store-types'\n\ninterface RedisEnvelope {\n readonly value: unknown\n readonly insertedAt: number\n}\n\nexport interface CreateRedisStoreOpts {\n readonly config: RedisKvConfig\n readonly client: RedisLike\n}\n\nexport const createRedisStore = ({ config, client }: CreateRedisStoreOpts): AgentskitMemoryStore => {\n const prefix = config.prefix\n const namespaced = (key: string): string => `${prefix}${key}`\n\n const wrap = async <T>(op: string, fn: () => Promise<T>): Promise<T> => {\n try {\n return await fn()\n } catch (cause) {\n throw new MemoryError({\n code: 'AK_MEMORY_REDIS_CONNECTION_FAILED',\n message: `createRedisStore.${op}: redis command failed — ${cause instanceof Error ? cause.message : String(cause)}`,\n cause: cause instanceof Error ? cause : undefined,\n })\n }\n }\n\n const enforce = async (): Promise<void> => {\n if (config.maxMessages === undefined) return\n const keys = await wrap('enforce', () => Promise.resolve(client.keys(`${prefix}*`)))\n if (keys.length <= config.maxMessages) return\n const envelopes: { key: string; insertedAt: number }[] = []\n for (const fullKey of keys) {\n const raw = await wrap('enforce', () => Promise.resolve(client.get(fullKey)))\n if (raw === null) continue\n envelopes.push({ key: fullKey, insertedAt: (JSON.parse(raw) as RedisEnvelope).insertedAt })\n }\n envelopes.sort((a, b) => a.insertedAt - b.insertedAt)\n let excess = envelopes.length - config.maxMessages\n for (const entry of envelopes) {\n if (excess <= 0) break\n await wrap('enforce', () => Promise.resolve(client.del(entry.key)))\n excess -= 1\n }\n }\n\n return {\n id: `redis:${prefix}`,\n async get(key) {\n const raw = await wrap('get', () => Promise.resolve(client.get(namespaced(key))))\n if (raw === null) return undefined\n const envelope = JSON.parse(raw) as RedisEnvelope\n if (isExpired({ value: envelope.value, insertedAt: envelope.insertedAt }, config.ttlSeconds, Date.now())) {\n await wrap('get', () => Promise.resolve(client.del(namespaced(key))))\n return undefined\n }\n return envelope.value\n },\n async set(key, value) {\n const payload = JSON.stringify({ value, insertedAt: Date.now() } satisfies RedisEnvelope)\n const options = config.ttlSeconds === undefined ? undefined : { EX: config.ttlSeconds }\n await wrap('set', () => Promise.resolve(client.set(namespaced(key), payload, options)))\n await enforce()\n },\n }\n}\n\n/** Bridge an `ioredis`-style client to the {@link RedisLike} options-object shape. */\nexport const adaptIoredis = (io: {\n get(key: string): Promise<string | null>\n set(key: string, value: string, mode?: string, ttl?: number): Promise<unknown>\n del(key: string): Promise<unknown>\n keys(pattern: string): Promise<string[]>\n}): RedisLike => ({\n get: (key) => io.get(key),\n set: (key, value, options) =>\n options?.EX === undefined ? io.set(key, value) : io.set(key, value, 'EX', options.EX),\n del: (key) => io.del(key),\n keys: (pattern) => io.keys(pattern),\n})\n\n/** Lazy-import `redis` (node-redis v4), connect, and return a client; `undefined` if absent. */\nexport const tryDefaultRedisClient = async (url: string): Promise<RedisLike | undefined> => {\n try {\n const moduleId = 'redis'\n const mod = (await import(/* @vite-ignore */ moduleId)) as unknown as {\n readonly createClient?: (opts: { url: string }) => RedisLike & { connect(): Promise<unknown> }\n }\n const createClient = mod.createClient\n if (typeof createClient !== 'function') return undefined\n const client = createClient({ url })\n try {\n await client.connect()\n } catch (cause) {\n throw new MemoryError({\n code: 'AK_MEMORY_REDIS_CONNECTION_FAILED',\n message: `tryDefaultRedisClient: redis connect() failed — ${cause instanceof Error ? cause.message : String(cause)}`,\n cause: cause instanceof Error ? cause : undefined,\n })\n }\n return client\n } catch (err) {\n if (err instanceof MemoryError) throw err\n return undefined\n }\n}\n","// vector KV backend — get/set by exact key (round-tripped through metadata),\n// plus a `recall(query, k)` similarity search.\n\nimport { MemoryError } from '@agentskit/core'\nimport {\n isExpired,\n type AgentskitMemoryStore,\n type MemoryEmbedderLike,\n type MemoryVectorStoreLike,\n type VectorKvConfig,\n} from './kv-store-types'\n\nexport interface CreateVectorStoreOpts {\n readonly config: VectorKvConfig\n readonly vectorStore: MemoryVectorStoreLike\n readonly embedder: MemoryEmbedderLike\n}\n\nexport const createVectorStore = ({\n config,\n vectorStore,\n embedder,\n}: CreateVectorStoreOpts): AgentskitMemoryStore & { recall(query: string, k?: number): Promise<readonly unknown[]> } => {\n const collection = config.collection\n\n const embedOne = async (text: string): Promise<number[]> => {\n const [vec] = await embedder.embed([text])\n if (vec === undefined) {\n throw new MemoryError({\n code: 'AK_MEMORY_VECTOR_EMBEDDER_REQUIRED',\n message: 'createVectorStore: embedder returned no vector for the input text.',\n })\n }\n return vec\n }\n\n return {\n id: `vector:${config.provider}:${collection}`,\n async get(key) {\n const vec = await embedOne(key)\n const hits = await vectorStore.query(vec, 1, { __collection: collection, __key: key })\n const hit = hits[0]\n if (hit === undefined) return undefined\n if (hit.metadata['__key'] !== key) return undefined\n const insertedAt = hit.metadata['__insertedAt']\n if (typeof insertedAt === 'number' && isExpired({ value: undefined, insertedAt }, config.ttlSeconds, Date.now())) {\n return undefined\n }\n return hit.metadata['__value']\n },\n async set(key, value) {\n const vec = await embedOne(key)\n await vectorStore.upsert([\n {\n chunkId: `${collection}:${key}`,\n vec,\n metadata: { __collection: collection, __key: key, __value: value, __insertedAt: Date.now() },\n },\n ])\n },\n async recall(query, k = 5) {\n const vec = await embedOne(query)\n const hits = await vectorStore.query(vec, k, { __collection: collection })\n const now = Date.now()\n const results: unknown[] = []\n for (const hit of hits) {\n const insertedAt = hit.metadata['__insertedAt']\n if (typeof insertedAt === 'number' && isExpired({ value: undefined, insertedAt }, config.ttlSeconds, now)) {\n continue\n }\n results.push(hit.metadata['__value'])\n }\n return results\n },\n }\n}\n","// KV memory dispatch factory — maps a `KvMemoryConfig.backend` to its store.\n// Backends with external drivers (sqlite/redis) or external ports (vector) take\n// the dependency injected; `createKvMemoryFromConfigAuto` lazy-loads the optional\n// sqlite/redis drivers.\n\nimport { MemoryError } from '@agentskit/core'\nimport { createFileStore, createInMemoryStore, createLocalStorageStore } from './kv-store-basic'\nimport { createSqliteStore, tryDefaultSqliteOpener } from './kv-store-sqlite'\nimport { createRedisStore, tryDefaultRedisClient } from './kv-store-redis'\nimport { createVectorStore } from './kv-store-vector'\nimport type {\n AgentskitMemoryStore,\n KvMemoryConfig,\n MemoryEmbedderLike,\n MemoryVectorStoreLike,\n RedisLike,\n SqliteOpener,\n} from './kv-store-types'\n\nexport class MemoryBackendNotImplementedError extends Error {\n readonly code = 'MEMORY_BACKEND_NOT_IMPLEMENTED'\n readonly backend: KvMemoryConfig['backend']\n constructor(backend: KvMemoryConfig['backend']) {\n super(\n `Memory backend \"${backend}\" is not implemented. Supported: ` +\n `\"in-memory\", \"file\", \"sqlite\", \"localstorage\", \"redis\", \"vector\".`,\n )\n this.backend = backend\n }\n}\n\nexport type MemoryBackendStatus = 'supported' | 'planned'\n\nexport const MEMORY_BACKEND_SUPPORT: Readonly<Record<KvMemoryConfig['backend'], MemoryBackendStatus>> = {\n 'in-memory': 'supported',\n file: 'supported',\n sqlite: 'supported',\n redis: 'supported',\n vector: 'supported',\n localstorage: 'supported',\n}\n\nexport const isMemoryBackendSupported = (backend: KvMemoryConfig['backend']): boolean =>\n MEMORY_BACKEND_SUPPORT[backend] === 'supported'\n\nexport interface CreateKvMemoryFromConfigOpts {\n readonly config: KvMemoryConfig\n readonly sqlite?: SqliteOpener\n readonly localStorageFilePath?: string\n readonly redis?: RedisLike\n readonly vectorStore?: MemoryVectorStoreLike\n readonly embedder?: MemoryEmbedderLike\n}\n\nexport const createKvMemoryFromConfig = ({\n config,\n sqlite,\n localStorageFilePath,\n redis,\n vectorStore,\n embedder,\n}: CreateKvMemoryFromConfigOpts): AgentskitMemoryStore => {\n if (config.backend === 'in-memory') return createInMemoryStore(config)\n if (config.backend === 'file') return createFileStore(config)\n if (config.backend === 'localstorage') {\n return createLocalStorageStore({\n config,\n ...(localStorageFilePath ? { filePath: localStorageFilePath } : {}),\n })\n }\n if (config.backend === 'sqlite') {\n if (!sqlite) {\n throw new MemoryError({\n code: 'AK_MEMORY_SQLITE_OPENER_REQUIRED',\n message:\n 'createKvMemoryFromConfig: sqlite backend requires an `open` function (better-sqlite3), ' +\n 'or call createKvMemoryFromConfigAuto which lazy-imports it.',\n })\n }\n return createSqliteStore({ config, open: sqlite })\n }\n if (config.backend === 'redis') {\n if (!redis) {\n throw new MemoryError({\n code: 'AK_MEMORY_REDIS_CLIENT_REQUIRED',\n message:\n 'createKvMemoryFromConfig: redis backend requires a `redis` client, ' +\n 'or call createKvMemoryFromConfigAuto which lazy-imports it.',\n })\n }\n return createRedisStore({ config, client: redis })\n }\n if (config.backend === 'vector') {\n if (!vectorStore) {\n throw new MemoryError({\n code: 'AK_MEMORY_VECTOR_STORE_REQUIRED',\n message: 'createKvMemoryFromConfig: vector backend requires a `vectorStore`.',\n })\n }\n if (!embedder) {\n throw new MemoryError({\n code: 'AK_MEMORY_VECTOR_EMBEDDER_REQUIRED',\n message: 'createKvMemoryFromConfig: vector backend requires an `embedder`.',\n })\n }\n return createVectorStore({ config, vectorStore, embedder })\n }\n const exhausted: never = config\n throw new MemoryBackendNotImplementedError((exhausted as { backend: KvMemoryConfig['backend'] }).backend)\n}\n\nexport const createKvMemoryFromConfigAuto = async (config: KvMemoryConfig): Promise<AgentskitMemoryStore> => {\n if (config.backend === 'sqlite') {\n const sqlite = await tryDefaultSqliteOpener()\n if (!sqlite) {\n throw new MemoryError({\n code: 'AK_MEMORY_PEER_MISSING',\n message: 'createKvMemoryFromConfigAuto: sqlite backend needs `better-sqlite3` (pnpm add better-sqlite3).',\n })\n }\n return createKvMemoryFromConfig({ config, sqlite })\n }\n if (config.backend === 'redis') {\n const redis = await tryDefaultRedisClient(config.url)\n if (!redis) {\n throw new MemoryError({\n code: 'AK_MEMORY_PEER_MISSING',\n message: 'createKvMemoryFromConfigAuto: redis backend needs `redis` (pnpm add redis).',\n })\n }\n return createKvMemoryFromConfig({ config, redis })\n }\n if (config.backend === 'vector') {\n throw new MemoryError({\n code: 'AK_MEMORY_VECTOR_STORE_REQUIRED',\n message: 'createKvMemoryFromConfigAuto: vector backend requires an injected vectorStore + embedder.',\n })\n }\n return createKvMemoryFromConfig({ config })\n}\n"]}