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