@agentskit/memory 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +164 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +52 -1
- package/dist/index.d.ts +52 -1
- package/dist/index.js +162 -1
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.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/encrypted.ts","../src/hierarchical.ts"],"names":["deserializeMessages","serializeMessages","encodeMessages","decodeMessages","call","cachedSdk","loadSdk"],"mappings":"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","file":"index.cjs","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 { serializeMessages, deserializeMessages } 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 Error('Install better-sqlite3 to use sqliteChatMemory: npm install better-sqlite3')\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 { serializeMessages, deserializeMessages } 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 Error('Install @libsql/client to use tursoChatMemory: npm install @libsql/client')\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","/**\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 Error('Install redis to use Redis memory backends: npm install redis')\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 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 Error(\n 'Install vectra to use fileVectorMemory: npm install vectra'\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 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) throw new Error(`pinecone ${response.status}: ${text.slice(0, 200)}`)\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 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) throw new Error(`qdrant ${response.status}: ${text.slice(0, 200)}`)\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 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) throw new Error(`chroma ${response.status}: ${text.slice(0, 200)}`)\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 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) throw new Error(`upstash-vector ${response.status}: ${text.slice(0, 200)}`)\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 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 Error(\n 'Install @supabase/supabase-js to use supabaseVectorStore: npm install @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) throw new Error(`supabase: ${result.error.message}`)\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 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 Error(`createEncryptedMemory: key must be 32 bytes (got ${raw.byteLength})`)\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) throw new Error('createEncryptedMemory: SubtleCrypto not available')\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/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":["deserializeMessages","serializeMessages","encodeMessages","decodeMessages","call","cachedSdk","loadSdk"],"mappings":"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","file":"index.cjs","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 { serializeMessages, deserializeMessages } 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 Error('Install better-sqlite3 to use sqliteChatMemory: npm install better-sqlite3')\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 { serializeMessages, deserializeMessages } 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 Error('Install @libsql/client to use tursoChatMemory: npm install @libsql/client')\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","/**\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 Error('Install redis to use Redis memory backends: npm install redis')\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 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 Error(\n 'Install vectra to use fileVectorMemory: npm install vectra'\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 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) throw new Error(`pinecone ${response.status}: ${text.slice(0, 200)}`)\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 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) throw new Error(`qdrant ${response.status}: ${text.slice(0, 200)}`)\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 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) throw new Error(`chroma ${response.status}: ${text.slice(0, 200)}`)\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 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) throw new Error(`upstash-vector ${response.status}: ${text.slice(0, 200)}`)\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 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 Error(\n 'Install @supabase/supabase-js to use supabaseVectorStore: npm install @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) throw new Error(`supabase: ${result.error.message}`)\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 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) throw new Error(`weaviate ${response.status}: ${text.slice(0, 200)}`)\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 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) throw new Error(`milvus ${response.status}: ${text.slice(0, 200)}`)\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 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 Error(`createEncryptedMemory: key must be 32 bytes (got ${raw.byteLength})`)\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) throw new Error('createEncryptedMemory: SubtleCrypto not available')\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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -265,6 +265,57 @@ interface SupabaseVectorStoreConfig {
|
|
|
265
265
|
*/
|
|
266
266
|
declare function supabaseVectorStore(config: SupabaseVectorStoreConfig): VectorMemory;
|
|
267
267
|
|
|
268
|
+
interface WeaviateConfig {
|
|
269
|
+
/** Cluster URL, e.g. `https://my-cluster.weaviate.network`. */
|
|
270
|
+
url: string;
|
|
271
|
+
/** Optional API key (Weaviate Cloud Services). */
|
|
272
|
+
apiKey?: string;
|
|
273
|
+
/** Class name in the Weaviate schema. */
|
|
274
|
+
className: string;
|
|
275
|
+
topK?: number;
|
|
276
|
+
fetch?: typeof globalThis.fetch;
|
|
277
|
+
}
|
|
278
|
+
declare function weaviateVectorStore(config: WeaviateConfig): VectorMemory;
|
|
279
|
+
|
|
280
|
+
interface MilvusConfig {
|
|
281
|
+
/** Milvus REST endpoint, e.g. `https://in03-xxx.api.gcp-us-west1.zillizcloud.com`. */
|
|
282
|
+
url: string;
|
|
283
|
+
/** API key / Zilliz Cloud token (Bearer). */
|
|
284
|
+
token?: string;
|
|
285
|
+
collection: string;
|
|
286
|
+
/** Vector field name in the schema. Default `vector`. */
|
|
287
|
+
vectorField?: string;
|
|
288
|
+
topK?: number;
|
|
289
|
+
fetch?: typeof globalThis.fetch;
|
|
290
|
+
}
|
|
291
|
+
declare function milvusVectorStore(config: MilvusConfig): VectorMemory;
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* MongoDB Atlas Vector Search adapter. Caller injects a typed collection
|
|
295
|
+
* shape (drop-in for the official `mongodb` driver's `Collection` type) so
|
|
296
|
+
* we don't bundle a driver. Atlas' \`$vectorSearch\` aggregation runs
|
|
297
|
+
* server-side; we just translate \`store\` / \`search\` / \`delete\` to
|
|
298
|
+
* insertMany + aggregate + deleteMany.
|
|
299
|
+
*/
|
|
300
|
+
interface MongoCollectionLike {
|
|
301
|
+
insertMany(docs: Array<Record<string, unknown>>, options?: unknown): Promise<unknown>;
|
|
302
|
+
deleteMany(filter: Record<string, unknown>): Promise<unknown>;
|
|
303
|
+
aggregate<T = Record<string, unknown>>(pipeline: Array<Record<string, unknown>>): {
|
|
304
|
+
toArray(): Promise<T[]>;
|
|
305
|
+
};
|
|
306
|
+
}
|
|
307
|
+
interface MongoAtlasVectorConfig {
|
|
308
|
+
collection: MongoCollectionLike;
|
|
309
|
+
/** Atlas Search index name on the embedding field. */
|
|
310
|
+
indexName: string;
|
|
311
|
+
/** Field that holds the embedding vector. Default `embedding`. */
|
|
312
|
+
vectorField?: string;
|
|
313
|
+
/** numCandidates for $vectorSearch. Default `topK * 10`. */
|
|
314
|
+
numCandidates?: number;
|
|
315
|
+
topK?: number;
|
|
316
|
+
}
|
|
317
|
+
declare function mongoAtlasVectorStore(config: MongoAtlasVectorConfig): VectorMemory;
|
|
318
|
+
|
|
268
319
|
/**
|
|
269
320
|
* Evaluate a `VectorFilter` against a metadata record. Used by in-memory /
|
|
270
321
|
* file-backed vector stores. Backends with native filter languages (pgvector,
|
|
@@ -361,4 +412,4 @@ interface HierarchicalMemory extends ChatMemory {
|
|
|
361
412
|
*/
|
|
362
413
|
declare function createHierarchicalMemory(options: HierarchicalMemoryOptions): HierarchicalMemory;
|
|
363
414
|
|
|
364
|
-
export { type ChromaConfig, type EncryptedEnvelope, type EncryptedMemoryOptions, type FileVectorMemoryConfig, type GraphEdge, type GraphMemory, type GraphNode, type GraphQuery, type HierarchicalMemory, type HierarchicalMemoryOptions, type HierarchicalRecall, type PersonalizationProfile, type PersonalizationStore, type PgVectorConfig, type PgVectorRunner, type PineconeConfig, type QdrantConfig, type RedisChatMemoryConfig, type RedisClientAdapter, type RedisConnectionConfig, type RedisVectorMemoryConfig, type SqliteChatMemoryConfig, type SupabaseVectorStoreConfig, type TursoChatMemoryConfig, type UpstashVectorConfig, type VectorStore, type VectorStoreDocument, type VectorStoreResult, chroma, createEncryptedMemory, createHierarchicalMemory, createInMemoryGraph, createInMemoryPersonalization, fileChatMemory, fileVectorMemory, matchesFilter, pgvector, pinecone, qdrant, redisChatMemory, redisVectorMemory, renderProfileContext, sqliteChatMemory, supabaseVectorStore, tursoChatMemory, upstashVector };
|
|
415
|
+
export { type ChromaConfig, type EncryptedEnvelope, type EncryptedMemoryOptions, type FileVectorMemoryConfig, type GraphEdge, type GraphMemory, type GraphNode, type GraphQuery, type HierarchicalMemory, type HierarchicalMemoryOptions, type HierarchicalRecall, type MilvusConfig, type MongoAtlasVectorConfig, type MongoCollectionLike, type PersonalizationProfile, type PersonalizationStore, type PgVectorConfig, type PgVectorRunner, type PineconeConfig, type QdrantConfig, type RedisChatMemoryConfig, type RedisClientAdapter, type RedisConnectionConfig, type RedisVectorMemoryConfig, type SqliteChatMemoryConfig, type SupabaseVectorStoreConfig, type TursoChatMemoryConfig, type UpstashVectorConfig, type VectorStore, type VectorStoreDocument, type VectorStoreResult, type WeaviateConfig, chroma, createEncryptedMemory, createHierarchicalMemory, createInMemoryGraph, createInMemoryPersonalization, fileChatMemory, fileVectorMemory, matchesFilter, milvusVectorStore, mongoAtlasVectorStore, pgvector, pinecone, qdrant, redisChatMemory, redisVectorMemory, renderProfileContext, sqliteChatMemory, supabaseVectorStore, tursoChatMemory, upstashVector, weaviateVectorStore };
|