@easynet/agent-common 1.0.8 → 1.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{chunk-PPKW7AOC.js → chunk-D3XBAOOJ.js} +5 -100
- package/dist/chunk-D3XBAOOJ.js.map +1 -0
- package/dist/chunk-MNH7GH2B.js +1224 -0
- package/dist/chunk-MNH7GH2B.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +26 -418
- package/dist/index.js.map +1 -1
- package/dist/memory/index.d.ts +3 -0
- package/dist/memory/index.js +15 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/provider/factory.d.ts +45 -0
- package/dist/memory/provider/index.d.ts +6 -0
- package/dist/memory/provider/llamaindex-knowledge.d.ts +84 -0
- package/dist/memory/provider/mem0-long-term.d.ts +36 -0
- package/dist/memory/provider/sqlite-vec-long-term.d.ts +17 -0
- package/dist/memory/provider/types.d.ts +53 -0
- package/dist/memory/provider/universal.d.ts +6 -0
- package/dist/memory/store/factory.d.ts +2 -0
- package/dist/memory/store/in-memory-store.d.ts +16 -0
- package/dist/memory/store/index.d.ts +4 -0
- package/dist/memory/store/scoped-store.d.ts +2 -0
- package/dist/memory/store/types.d.ts +27 -0
- package/dist/model/index.d.ts +5 -5
- package/dist/npm/index.d.ts +2 -4
- package/dist/npm/index.js +3 -33
- package/package.json +29 -2
- package/dist/chunk-PPKW7AOC.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/memory/store/in-memory-store.ts","../src/memory/store/factory.ts","../src/memory/store/scoped-store.ts","../src/memory/provider/universal.ts","../src/memory/provider/factory.ts","../src/model/llm/parser.ts","../src/model/chat/index.ts","../src/model/embedding/index.ts","../src/model/hub/index.ts","../src/config/yaml.ts","../src/config/path.ts","../src/memory/provider/llamaindex-knowledge.ts","../src/memory/provider/mem0-long-term.ts","../src/memory/provider/sqlite-vec-long-term.ts"],"sourcesContent":["import type { MemoryEntry, MemoryListOptions, MemorySetOptions, MemoryStore } from \"./types.js\";\n\nexport class InMemoryStore implements MemoryStore {\n private readonly store = new Map<string, MemoryEntry<unknown>>();\n\n async set<T = unknown>(key: string, value: T, options: MemorySetOptions = {}): Promise<MemoryEntry<T>> {\n const now = Date.now();\n const previous = this.store.get(key);\n const next: MemoryEntry<T> = {\n key,\n value,\n createdAt: previous?.createdAt ?? now,\n updatedAt: now,\n expiresAt: options.ttlMs && options.ttlMs > 0 ? now + options.ttlMs : undefined,\n };\n\n this.store.set(key, next as MemoryEntry<unknown>);\n return next;\n }\n\n async get<T = unknown>(key: string): Promise<T | undefined> {\n const entry = this.getValidEntry<T>(key);\n return entry?.value;\n }\n\n async getEntry<T = unknown>(key: string): Promise<MemoryEntry<T> | undefined> {\n return this.getValidEntry<T>(key);\n }\n\n async has(key: string): Promise<boolean> {\n return this.getValidEntry(key) !== undefined;\n }\n\n async delete(key: string): Promise<boolean> {\n return this.store.delete(key);\n }\n\n async clear(prefix?: string): Promise<number> {\n this.pruneExpired();\n\n if (!prefix) {\n const size = this.store.size;\n this.store.clear();\n return size;\n }\n\n let removed = 0;\n for (const key of this.store.keys()) {\n if (!key.startsWith(prefix)) continue;\n if (this.store.delete(key)) removed += 1;\n }\n return removed;\n }\n\n async keys(options: MemoryListOptions = {}): Promise<string[]> {\n this.pruneExpired();\n\n const entries = this.filterEntries(options);\n return entries.map((entry) => entry.key);\n }\n\n async entries<T = unknown>(options: MemoryListOptions = {}): Promise<Array<MemoryEntry<T>>> {\n this.pruneExpired();\n\n return this.filterEntries(options) as Array<MemoryEntry<T>>;\n }\n\n private filterEntries(options: MemoryListOptions): MemoryEntry<unknown>[] {\n const { prefix, limit } = options;\n const normalizedLimit = typeof limit === \"number\" && limit > 0 ? Math.floor(limit) : undefined;\n\n const result: MemoryEntry<unknown>[] = [];\n for (const entry of this.store.values()) {\n if (prefix && !entry.key.startsWith(prefix)) continue;\n result.push(entry);\n if (normalizedLimit && result.length >= normalizedLimit) break;\n }\n\n return result;\n }\n\n private getValidEntry<T = unknown>(key: string): MemoryEntry<T> | undefined {\n const entry = this.store.get(key);\n if (!entry) return undefined;\n\n if (this.isExpired(entry, Date.now())) {\n this.store.delete(key);\n return undefined;\n }\n\n return entry as MemoryEntry<T>;\n }\n\n private pruneExpired(): void {\n const now = Date.now();\n\n for (const [key, entry] of this.store.entries()) {\n if (!this.isExpired(entry, now)) continue;\n this.store.delete(key);\n }\n }\n\n private isExpired(entry: MemoryEntry<unknown>, now: number): boolean {\n return typeof entry.expiresAt === \"number\" && entry.expiresAt <= now;\n }\n}\n","import { InMemoryStore } from \"./in-memory-store.js\";\nimport type { CreateMemoryStoreOptions, MemoryStore } from \"./types.js\";\n\nexport function createMemoryStore(options: CreateMemoryStoreOptions = {}): MemoryStore {\n const type = options.type ?? \"in_memory\";\n\n if (type === \"in_memory\") {\n return new InMemoryStore();\n }\n\n const unsupported: never = type;\n throw new Error(`Unsupported memory store type: ${String(unsupported)}`);\n}\n","import type { MemoryEntry, MemoryListOptions, MemorySetOptions, MemoryStore } from \"./types.js\";\n\nexport function createScopedMemoryStore(namespace: string, memory: MemoryStore): MemoryStore {\n const normalized = normalizeNamespace(namespace);\n\n return {\n async set<T = unknown>(key: string, value: T, options?: MemorySetOptions): Promise<MemoryEntry<T>> {\n return memory.set(prefix(normalized, key), value, options);\n },\n async get<T = unknown>(key: string): Promise<T | undefined> {\n return memory.get<T>(prefix(normalized, key));\n },\n async getEntry<T = unknown>(key: string): Promise<MemoryEntry<T> | undefined> {\n return memory.getEntry<T>(prefix(normalized, key));\n },\n async has(key: string): Promise<boolean> {\n return memory.has(prefix(normalized, key));\n },\n async delete(key: string): Promise<boolean> {\n return memory.delete(prefix(normalized, key));\n },\n async clear(innerPrefix?: string): Promise<number> {\n return memory.clear(prefix(normalized, innerPrefix ?? \"\"));\n },\n async keys(options: MemoryListOptions = {}): Promise<string[]> {\n const scopedPrefix = prefix(normalized, options.prefix ?? \"\");\n const keys = await memory.keys({ ...options, prefix: scopedPrefix });\n return keys.map((key) => stripPrefix(normalized, key));\n },\n async entries<T = unknown>(options: MemoryListOptions = {}): Promise<Array<MemoryEntry<T>>> {\n const scopedPrefix = prefix(normalized, options.prefix ?? \"\");\n const entries = await memory.entries<T>({ ...options, prefix: scopedPrefix });\n return entries.map((entry) => ({\n ...entry,\n key: stripPrefix(normalized, entry.key),\n }));\n },\n };\n}\n\nfunction normalizeNamespace(namespace: string): string {\n const trimmed = namespace.trim();\n if (!trimmed) {\n throw new Error(\"namespace must be a non-empty string\");\n }\n return trimmed.endsWith(\":\") ? trimmed : `${trimmed}:`;\n}\n\nfunction prefix(namespace: string, key: string): string {\n return `${namespace}${key}`;\n}\n\nfunction stripPrefix(namespace: string, key: string): string {\n return key.startsWith(namespace) ? key.slice(namespace.length) : key;\n}\n","import type {\n KnowledgeMemoryProvider,\n LongTermMemoryProvider,\n MemoryForgetRequest,\n MemoryMemorizeRequest,\n MemoryRecallRequest,\n UniversalMemory,\n} from \"./types.js\";\n\nexport interface CreateUniversalMemoryOptions {\n longTerm?: LongTermMemoryProvider;\n knowledge?: KnowledgeMemoryProvider;\n}\n\nexport function createUniversalMemory(options: CreateUniversalMemoryOptions): UniversalMemory {\n return {\n async memorize(req: MemoryMemorizeRequest) {\n if (req.kind === \"long_term\") {\n const provider = assertProvider(\"long_term\", options.longTerm);\n return provider.remember(req);\n }\n\n const provider = assertProvider(\"knowledge\", options.knowledge);\n return provider.remember(req);\n },\n async recall(req: MemoryRecallRequest) {\n if (req.kind === \"long_term\") {\n const provider = assertProvider(\"long_term\", options.longTerm);\n return provider.recall(req);\n }\n\n const provider = assertProvider(\"knowledge\", options.knowledge);\n return provider.recall(req);\n },\n async forget(req: MemoryForgetRequest) {\n if (req.kind === \"long_term\") {\n const provider = assertProvider(\"long_term\", options.longTerm);\n await provider.forget(req);\n return;\n }\n\n const provider = assertProvider(\"knowledge\", options.knowledge);\n await provider.forget(req);\n },\n };\n}\n\nfunction assertProvider<T>(kind: \"long_term\" | \"knowledge\", provider: T | undefined): T {\n if (provider) return provider;\n throw new Error(`No provider configured for memory kind: ${kind}`);\n}\n","import path from \"node:path\";\nimport { createModelHub } from \"../../model/hub/index.js\";\nimport type { LoadYamlOptions } from \"../../config/yaml.js\";\nimport { loadYamlFile } from \"../../config/yaml.js\";\nimport { isPathRef, resolveConfigPath } from \"../../config/path.js\";\nimport { LlamaIndexKnowledgeMemoryProvider } from \"./llamaindex-knowledge.js\";\nimport { Mem0LongTermMemoryProvider, type Mem0MemoryLike } from \"./mem0-long-term.js\";\nimport { SqliteVecLongTermMemoryProvider } from \"./sqlite-vec-long-term.js\";\nimport { createUniversalMemory, type CreateUniversalMemoryOptions } from \"./universal.js\";\nimport type { UniversalMemory } from \"./types.js\";\n\nexport interface Mem0LongTermMemoryConfig {\n type?: \"mem0\";\n}\n\nexport interface SqliteVecLongTermMemoryConfig {\n type: \"sqlite_vec\";\n dbPath?: string;\n dimensions?: number;\n llmSection?: unknown;\n embeddingBaseURL?: string;\n embeddingApiKey?: string;\n embeddingModel?: string;\n embeddingTimeoutMs?: number;\n chatTimeoutMs?: number;\n}\n\nexport interface LlamaIndexKnowledgeMemoryConfig {\n type?: \"llamaindex\";\n llmSection?: unknown;\n embeddingBaseURL?: string;\n embeddingApiKey?: string;\n embeddingModel?: string;\n embeddingTimeoutMs?: number;\n chatTimeoutMs?: number;\n}\n\nexport interface UniversalMemoryProviderConfig {\n longTerm?: Mem0LongTermMemoryConfig | SqliteVecLongTermMemoryConfig;\n knowledge?: LlamaIndexKnowledgeMemoryConfig;\n}\n\nexport interface LoadUniversalMemoryProviderConfigOptions {\n configDir?: string;\n yaml?: LoadYamlOptions;\n}\n\nexport interface CreateUniversalMemoryFromConfigOptions extends LoadUniversalMemoryProviderConfigOptions {\n config: UniversalMemoryProviderConfig | string;\n overrides?: {\n longTerm?: CreateUniversalMemoryOptions[\"longTerm\"];\n knowledge?: CreateUniversalMemoryOptions[\"knowledge\"];\n mem0Memory?: Mem0MemoryLike;\n };\n}\n\ninterface LoadedConfig<T> {\n value: T;\n baseDir: string;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new Error(\"Invalid memory provider config: expected object\");\n }\n return value as Record<string, unknown>;\n}\n\nasync function loadConfigRef(\n input: unknown,\n baseDir: string,\n options: LoadUniversalMemoryProviderConfigOptions,\n): Promise<LoadedConfig<Record<string, unknown>>> {\n if (!isPathRef(input)) {\n return { value: asRecord(input), baseDir };\n }\n\n const filePath = resolveConfigPath(input, baseDir);\n const loaded = await loadYamlFile<Record<string, unknown>>(filePath, options.yaml);\n return { value: asRecord(loaded ?? {}), baseDir: path.dirname(filePath) };\n}\n\nasync function loadKnowledgeConfig(\n input: unknown,\n baseDir: string,\n options: LoadUniversalMemoryProviderConfigOptions,\n): Promise<LlamaIndexKnowledgeMemoryConfig | undefined> {\n if (!input) return undefined;\n const loaded = await loadConfigRef(input, baseDir, options);\n const cfg = loaded.value;\n const type = cfg.type;\n if (type !== undefined && type !== \"llamaindex\") {\n throw new Error(`Unsupported knowledge provider type: ${String(type)}`);\n }\n\n let llmSection = cfg.llmSection;\n if (isPathRef(llmSection)) {\n const llmPath = resolveConfigPath(llmSection, loaded.baseDir);\n llmSection = await loadYamlFile(llmPath, options.yaml);\n }\n\n return {\n type: \"llamaindex\",\n llmSection,\n embeddingBaseURL: asOptionalString(cfg.embeddingBaseURL),\n embeddingApiKey: asOptionalString(cfg.embeddingApiKey),\n embeddingModel: asOptionalString(cfg.embeddingModel),\n embeddingTimeoutMs: asOptionalNumber(cfg.embeddingTimeoutMs),\n chatTimeoutMs: asOptionalNumber(cfg.chatTimeoutMs),\n };\n}\n\nasync function loadLongTermConfig(\n input: unknown,\n baseDir: string,\n options: LoadUniversalMemoryProviderConfigOptions,\n): Promise<Mem0LongTermMemoryConfig | SqliteVecLongTermMemoryConfig | undefined> {\n if (!input) return undefined;\n const loaded = await loadConfigRef(input, baseDir, options);\n const cfg = loaded.value;\n const type = cfg.type;\n\n if (type === undefined || type === \"mem0\") {\n return { type: \"mem0\" };\n }\n\n if (type !== \"sqlite_vec\") {\n throw new Error(`Unsupported long_term provider type: ${String(type)}`);\n }\n\n let llmSection = cfg.llmSection;\n if (isPathRef(llmSection)) {\n const llmPath = resolveConfigPath(llmSection, loaded.baseDir);\n llmSection = await loadYamlFile(llmPath, options.yaml);\n }\n\n return {\n type: \"sqlite_vec\",\n dbPath: asOptionalString(cfg.dbPath),\n dimensions: asOptionalNumber(cfg.dimensions),\n llmSection,\n embeddingBaseURL: asOptionalString(cfg.embeddingBaseURL),\n embeddingApiKey: asOptionalString(cfg.embeddingApiKey),\n embeddingModel: asOptionalString(cfg.embeddingModel),\n embeddingTimeoutMs: asOptionalNumber(cfg.embeddingTimeoutMs),\n chatTimeoutMs: asOptionalNumber(cfg.chatTimeoutMs),\n };\n}\n\nfunction asOptionalString(value: unknown): string | undefined {\n return typeof value === \"string\" && value.trim() !== \"\" ? value : undefined;\n}\n\nfunction asOptionalNumber(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nexport async function loadUniversalMemoryProviderConfig(\n config: UniversalMemoryProviderConfig | string,\n options: LoadUniversalMemoryProviderConfigOptions = {},\n): Promise<UniversalMemoryProviderConfig> {\n const startDir = options.configDir ?? process.cwd();\n const root = await loadConfigRef(config, startDir, options);\n const knowledge = await loadKnowledgeConfig(root.value.knowledge, root.baseDir, options);\n const longTerm = await loadLongTermConfig(root.value.longTerm, root.baseDir, options);\n return { knowledge, longTerm };\n}\n\nexport async function createUniversalMemoryFromConfig(\n options: CreateUniversalMemoryFromConfigOptions,\n): Promise<UniversalMemory> {\n const config = await loadUniversalMemoryProviderConfig(options.config, options);\n const providers: CreateUniversalMemoryOptions = {\n longTerm: options.overrides?.longTerm,\n knowledge: options.overrides?.knowledge,\n };\n\n if (!providers.longTerm && config.longTerm) {\n if (config.longTerm.type === \"sqlite_vec\") {\n const hub = createModelHub({\n llmSection: config.longTerm.llmSection,\n embeddingBaseURL: config.longTerm.embeddingBaseURL,\n embeddingApiKey: config.longTerm.embeddingApiKey,\n embeddingModel: config.longTerm.embeddingModel,\n embeddingTimeoutMs: config.longTerm.embeddingTimeoutMs,\n chatTimeoutMs: config.longTerm.chatTimeoutMs,\n });\n providers.longTerm = new SqliteVecLongTermMemoryProvider({\n dbPath: config.longTerm.dbPath ?? \"./.data/long-term.sqlite\",\n dimensions: config.longTerm.dimensions ?? 1024,\n embed: async (texts) => (await hub.embed({ input: texts })).vectors,\n });\n } else {\n if (!options.overrides?.mem0Memory) {\n throw new Error(\"mem0Memory override is required when longTerm.type is mem0\");\n }\n providers.longTerm = new Mem0LongTermMemoryProvider({ memory: options.overrides.mem0Memory });\n }\n }\n\n if (!providers.knowledge && config.knowledge) {\n const hub = createModelHub({\n llmSection: config.knowledge.llmSection,\n embeddingBaseURL: config.knowledge.embeddingBaseURL,\n embeddingApiKey: config.knowledge.embeddingApiKey,\n embeddingModel: config.knowledge.embeddingModel,\n embeddingTimeoutMs: config.knowledge.embeddingTimeoutMs,\n chatTimeoutMs: config.knowledge.chatTimeoutMs,\n });\n providers.knowledge = new LlamaIndexKnowledgeMemoryProvider({\n embed: async (texts) => (await hub.embed({ input: texts })).vectors,\n });\n }\n\n return createUniversalMemory(providers);\n}\n","/**\n * Parse agent.yaml llm section into normalized LLMConfig[] and default id.\n * Supports: flat (each model keyed by name), instances[], or single object.\n */\n\nimport type { LLMConfig } from \"./types.js\";\n\nconst DEFAULT_LLM_ID = \"default\";\n\nconst RESERVED_KEYS = new Set([\n \"default\",\n \"instances\",\n \"catalog\",\n \"provider\",\n \"model\",\n \"temperature\",\n \"apiKey\",\n \"baseURL\",\n \"base_url\",\n \"type\",\n \"id\",\n]);\n\nexport function parseLlmSection(section: unknown): { defaultId: string; configs: LLMConfig[] } {\n if (section == null || typeof section !== \"object\") {\n return { defaultId: DEFAULT_LLM_ID, configs: [] };\n }\n\n if (Array.isArray(section)) {\n const configs = section\n .filter((i): i is Record<string, unknown> => i != null && typeof i === \"object\")\n .map((item, i) => normalizeLlmConfig({ ...item, id: item.id ?? item.name ?? String(i) }))\n .filter((c): c is LLMConfig => c != null);\n const defaultId = configs.length > 0 ? configs[0]!.id : DEFAULT_LLM_ID;\n return { defaultId, configs };\n }\n\n const s = section as Record<string, unknown>;\n\n const flatEntries = Object.entries(s).filter(\n ([k, v]) => !RESERVED_KEYS.has(k) && v != null && typeof v === \"object\" && !Array.isArray(v)\n );\n if (flatEntries.length > 0) {\n const configs: LLMConfig[] = [];\n for (const [id, entry] of flatEntries) {\n const c = entryToLlmConfig(id, entry as Record<string, unknown>);\n if (c) configs.push(c);\n }\n const defaultId =\n typeof s.default === \"string\" && s.default && flatEntries.some(([k]) => k === s.default)\n ? s.default\n : configs.length > 0\n ? configs[0]!.id\n : DEFAULT_LLM_ID;\n return { defaultId, configs };\n }\n\n if (Array.isArray(s.instances)) {\n const configs = (s.instances as unknown[])\n .filter((i): i is Record<string, unknown> => i != null && typeof i === \"object\")\n .map((i) => normalizeLlmConfig(i))\n .filter((c): c is LLMConfig => c != null);\n const defaultId =\n typeof s.default === \"string\" && s.default\n ? s.default\n : configs.length > 0\n ? configs[0]!.id\n : DEFAULT_LLM_ID;\n return { defaultId, configs };\n }\n\n if (typeof s.provider === \"string\" || typeof s.model === \"string\" || typeof (s as { name?: string }).name === \"string\") {\n const one = singleObjectToLlmConfig(s);\n return { defaultId: one.id, configs: [one] };\n }\n\n return { defaultId: DEFAULT_LLM_ID, configs: [] };\n}\n\nconst EXTENSION_OPTION_KEYS = [\"featureKey\", \"tenant\", \"authToken\", \"verifySSL\", \"bypassAuth\", \"host\", \"resolveHost\", \"timeoutMs\", \"options\"];\n\nfunction entryToLlmConfig(id: string, entry: Record<string, unknown>): LLMConfig | null {\n const opts = entry.options as Record<string, unknown> | undefined;\n const baseURL =\n typeof entry.base_url === \"string\"\n ? entry.base_url\n : typeof entry.baseURL === \"string\"\n ? entry.baseURL\n : undefined;\n const model = typeof entry.name === \"string\" ? entry.name : typeof entry.model === \"string\" ? entry.model : undefined;\n const provider = typeof entry.provider === \"string\" && entry.provider ? entry.provider : \"openai\";\n const config: LLMConfig = {\n id,\n type: \"chat\",\n provider,\n model,\n temperature: typeof opts?.temperature === \"number\" ? opts.temperature : typeof entry.temperature === \"number\" ? entry.temperature : undefined,\n apiKey: typeof opts?.apiKey === \"string\" ? opts.apiKey : typeof entry.apiKey === \"string\" ? entry.apiKey : undefined,\n baseURL,\n };\n if (typeof entry.type === \"string\" && entry.type === \"image\") config.type = \"image\";\n if (opts && typeof opts === \"object\") (config as Record<string, unknown>).options = opts;\n for (const k of EXTENSION_OPTION_KEYS) {\n if (entry[k] !== undefined) (config as Record<string, unknown>)[k] = entry[k];\n else if (opts && opts[k] !== undefined) (config as Record<string, unknown>)[k] = opts[k];\n }\n return config;\n}\n\nfunction singleObjectToLlmConfig(s: Record<string, unknown>): LLMConfig {\n const one: LLMConfig = {\n id: DEFAULT_LLM_ID,\n type: \"chat\",\n provider: typeof s.provider === \"string\" ? s.provider : \"openai\",\n model: typeof s.model === \"string\" ? s.model : (typeof (s as { name?: string }).name === \"string\" ? (s as { name: string }).name : undefined),\n temperature: typeof s.temperature === \"number\" ? s.temperature : undefined,\n apiKey: typeof s.apiKey === \"string\" ? s.apiKey : undefined,\n baseURL:\n typeof s.baseURL === \"string\" ? s.baseURL : typeof s.base_url === \"string\" ? s.base_url : undefined,\n };\n Object.keys(s).forEach((k) => {\n if (![\"id\", \"type\", \"provider\", \"model\", \"name\", \"temperature\", \"apiKey\", \"baseURL\", \"base_url\", \"default\", \"instances\"].includes(k)) {\n (one as Record<string, unknown>)[k] = s[k];\n }\n });\n return one;\n}\n\nfunction normalizeLlmConfig(o: Record<string, unknown>): LLMConfig | null {\n const id = typeof o.id === \"string\" && o.id ? o.id : DEFAULT_LLM_ID;\n const type = o.type === \"image\" ? \"image\" : \"chat\";\n const provider = typeof o.provider === \"string\" && o.provider ? o.provider : \"openai\";\n const opts = o.options as Record<string, unknown> | undefined;\n const config: LLMConfig = {\n id,\n type,\n provider,\n model: typeof o.model === \"string\" ? o.model : (typeof o.name === \"string\" ? o.name : undefined),\n temperature:\n typeof o.temperature === \"number\"\n ? o.temperature\n : typeof opts?.temperature === \"number\"\n ? opts.temperature\n : undefined,\n apiKey:\n typeof o.apiKey === \"string\"\n ? o.apiKey\n : typeof opts?.apiKey === \"string\"\n ? opts.apiKey\n : undefined,\n baseURL: typeof o.baseURL === \"string\" ? o.baseURL : (typeof o.base_url === \"string\" ? o.base_url : undefined),\n };\n Object.keys(o).forEach((k) => {\n if (![\"id\", \"type\", \"provider\", \"model\", \"name\", \"temperature\", \"apiKey\", \"baseURL\", \"base_url\"].includes(k)) {\n (config as Record<string, unknown>)[k] = o[k];\n }\n });\n return config;\n}\n","/**\n * OpenAI-compatible chat completion API: POST /chat/completions.\n * No LangChain dependency; for use by any module that needs LLM text generation.\n */\n\nconst DEFAULT_CHAT_TIMEOUT_MS = 60_000;\n\nexport interface ChatCompletionOptions {\n baseURL: string;\n apiKey?: string;\n model?: string;\n timeoutMs?: number;\n}\n\nexport interface ChatCompletionMessage {\n role: \"system\" | \"user\" | \"assistant\";\n content: string;\n}\n\nexport interface ChatCompletionRequest {\n messages: ChatCompletionMessage[];\n model?: string;\n temperature?: number;\n maxTokens?: number;\n}\n\nexport interface ChatCompletionResult {\n text: string;\n model?: string;\n}\n\nfunction isLocalBaseUrl(url: string): boolean {\n try {\n const u = new URL(url);\n const host = u.hostname.toLowerCase();\n return host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\";\n } catch {\n return false;\n }\n}\n\nfunction normalizeContent(content: unknown): string {\n if (typeof content === \"string\") return content;\n if (!Array.isArray(content)) return String(content ?? \"\");\n const parts: string[] = [];\n for (const p of content) {\n if (typeof p === \"string\") parts.push(p);\n else if (p && typeof p === \"object\" && typeof (p as { text?: unknown }).text === \"string\")\n parts.push((p as { text: string }).text);\n }\n return parts.join(\"\\n\").trim();\n}\n\n/**\n * Call OpenAI-compatible /chat/completions endpoint.\n * baseURL should be the API root (e.g. https://api.openai.com/v1); trailing slash is stripped.\n */\nexport async function chatCompletionViaOpenAICompatibleApi(\n options: ChatCompletionOptions,\n request: ChatCompletionRequest\n): Promise<ChatCompletionResult> {\n const baseUrl = options.baseURL.replace(/\\/$/, \"\");\n const apiKey = options.apiKey?.trim();\n const timeoutMs = options.timeoutMs ?? DEFAULT_CHAT_TIMEOUT_MS;\n const modelName =\n typeof request.model === \"string\" && request.model.trim() !== \"\"\n ? request.model.trim()\n : options.model ?? \"gpt-4o-mini\";\n\n if (!apiKey && !isLocalBaseUrl(baseUrl)) {\n throw new Error(\"Chat completion API key is required for non-local baseURL\");\n }\n\n const body: Record<string, unknown> = {\n model: modelName,\n messages: request.messages.map((m) => ({ role: m.role, content: m.content })),\n temperature: typeof request.temperature === \"number\" ? request.temperature : 0,\n };\n if (typeof request.maxTokens === \"number\") body.max_tokens = request.maxTokens;\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const response = await fetch(`${baseUrl}/chat/completions`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n },\n body: JSON.stringify(body),\n signal: controller.signal,\n });\n if (!response.ok) {\n const text = await response.text();\n throw new Error(`Chat completion API error ${response.status}: ${text.slice(0, 500)}`);\n }\n const data = (await response.json()) as {\n choices?: Array<{ message?: { content?: unknown }; text?: unknown }>;\n model?: string;\n };\n const raw =\n data.choices?.[0]?.message?.content ?? data.choices?.[0]?.text ?? \"\";\n return {\n text: normalizeContent(raw),\n model: data.model ?? modelName,\n };\n } finally {\n clearTimeout(timer);\n }\n}\n","/**\n * OpenAI-compatible embedding API: POST /embeddings.\n * No LangChain dependency; for use by any module that needs embeddings.\n */\n\nconst DEFAULT_EMBEDDING_TIMEOUT_MS = 30_000;\n\nexport interface EmbeddingOptions {\n baseURL: string;\n apiKey?: string;\n model?: string;\n timeoutMs?: number;\n}\n\nexport interface EmbedRequest {\n input: string | string[];\n model?: string;\n}\n\nexport interface EmbedResult {\n vectors: number[][];\n dimensions?: number;\n model?: string;\n}\n\nfunction isLocalBaseUrl(url: string): boolean {\n try {\n const u = new URL(url);\n const host = u.hostname.toLowerCase();\n return host === \"localhost\" || host === \"127.0.0.1\" || host === \"::1\";\n } catch {\n return false;\n }\n}\n\n/**\n * Call OpenAI-compatible /embeddings endpoint.\n * baseURL should be the API root (e.g. https://api.openai.com/v1); trailing slash is stripped.\n */\nexport async function embedViaOpenAICompatibleApi(\n options: EmbeddingOptions,\n input: EmbedRequest\n): Promise<EmbedResult> {\n const baseUrl = options.baseURL.replace(/\\/$/, \"\");\n const apiKey = options.apiKey?.trim();\n const timeoutMs = options.timeoutMs ?? DEFAULT_EMBEDDING_TIMEOUT_MS;\n const modelName =\n typeof input.model === \"string\" && input.model.trim() !== \"\"\n ? input.model.trim()\n : options.model ?? \"text-embedding-3-small\";\n\n if (!apiKey && !isLocalBaseUrl(baseUrl)) {\n throw new Error(\"Embedding API key is required for non-local baseURL\");\n }\n\n const controller = new AbortController();\n const timer = setTimeout(() => controller.abort(), timeoutMs);\n try {\n const response = await fetch(`${baseUrl}/embeddings`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(apiKey ? { Authorization: `Bearer ${apiKey}` } : {}),\n },\n body: JSON.stringify({ model: modelName, input: input.input }),\n signal: controller.signal,\n });\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Embedding API error ${response.status}: ${body.slice(0, 500)}`);\n }\n const data = (await response.json()) as {\n data?: Array<{ embedding?: number[]; index?: number }>;\n model?: string;\n };\n const vectors = (data.data ?? [])\n .slice()\n .sort((a, b) => (a.index ?? 0) - (b.index ?? 0))\n .map((v) => v.embedding)\n .filter((v): v is number[] => Array.isArray(v));\n return {\n vectors,\n dimensions: vectors[0]?.length,\n model: data.model ?? modelName,\n };\n } finally {\n clearTimeout(timer);\n }\n}\n","/**\n * Model hub: generate (chat completion) + embed, driven by llm section config.\n * No LangChain; uses OpenAI-compatible HTTP APIs so any package can use it via agent-common.\n */\n\nimport { parseLlmSection } from \"../llm/parser.js\";\nimport type { LLMConfig } from \"../llm/types.js\";\nimport { chatCompletionViaOpenAICompatibleApi } from \"../chat/index.js\";\nimport { embedViaOpenAICompatibleApi } from \"../embedding/index.js\";\nimport type { EmbedRequest, EmbedResult } from \"../embedding/index.js\";\n\nconst DEFAULT_EMBEDDING_MODEL = \"text-embedding-3-small\";\nconst DEFAULT_CHAT_MODEL = \"gpt-4o-mini\";\nconst DEFAULT_BASE_URL = \"https://api.openai.com/v1\";\n\nexport interface CreateModelHubOptions {\n llmSection?: unknown;\n embeddingBaseURL?: string;\n embeddingApiKey?: string;\n embeddingModel?: string;\n embeddingTimeoutMs?: number;\n chatTimeoutMs?: number;\n}\n\nexport interface ChatGenerateRequest {\n input: string;\n systemPrompt?: string;\n model?: string;\n temperature?: number;\n}\n\nexport interface ChatGenerateResult {\n text: string;\n model?: string;\n}\n\nexport interface ModelHub {\n generate(input: ChatGenerateRequest): Promise<ChatGenerateResult>;\n embed(input: EmbedRequest): Promise<EmbedResult>;\n}\n\nfunction getDefaultLlmConfig(llmSection: unknown): LLMConfig | null {\n const parsed = parseLlmSection(llmSection ?? null);\n const config =\n parsed.configs.find((c: LLMConfig) => c.id === parsed.defaultId) ??\n parsed.configs[0] ??\n null;\n return config;\n}\n\nexport function createModelHub(options: CreateModelHubOptions = {}): ModelHub {\n const baseCfg = getDefaultLlmConfig(options.llmSection);\n const defaultBaseUrl = (\n options.embeddingBaseURL ??\n baseCfg?.baseURL ??\n DEFAULT_BASE_URL\n ).replace(/\\/$/, \"\");\n const defaultApiKey =\n options.embeddingApiKey ??\n baseCfg?.apiKey ??\n process.env.OPENAI_API_KEY;\n const defaultEmbeddingModel =\n options.embeddingModel ??\n (baseCfg?.options && typeof baseCfg.options.embeddingModel === \"string\"\n ? baseCfg.options.embeddingModel\n : undefined) ??\n baseCfg?.model ??\n process.env.OPENAI_EMBEDDING_MODEL ??\n DEFAULT_EMBEDDING_MODEL;\n const defaultChatModel =\n baseCfg?.model ??\n process.env.OPENAI_MODEL ??\n DEFAULT_CHAT_MODEL;\n const embeddingTimeoutMs = options.embeddingTimeoutMs;\n const chatTimeoutMs = options.chatTimeoutMs;\n\n return {\n async generate(input: ChatGenerateRequest): Promise<ChatGenerateResult> {\n const messages: Array<{ role: \"system\" | \"user\" | \"assistant\"; content: string }> = [];\n if (typeof input.systemPrompt === \"string\" && input.systemPrompt.trim() !== \"\") {\n messages.push({ role: \"system\", content: input.systemPrompt.trim() });\n }\n messages.push({ role: \"user\", content: input.input });\n const result = await chatCompletionViaOpenAICompatibleApi(\n {\n baseURL: defaultBaseUrl,\n apiKey: defaultApiKey,\n model: defaultChatModel,\n timeoutMs: chatTimeoutMs,\n },\n {\n messages,\n model: input.model,\n temperature: input.temperature,\n }\n );\n return {\n text: result.text,\n model:\n typeof input.model === \"string\" && input.model.trim() !== \"\"\n ? input.model\n : result.model ?? baseCfg?.model,\n };\n },\n async embed(input: EmbedRequest): Promise<EmbedResult> {\n const result = await embedViaOpenAICompatibleApi(\n {\n baseURL: defaultBaseUrl,\n apiKey: defaultApiKey,\n model: defaultEmbeddingModel,\n timeoutMs: embeddingTimeoutMs,\n },\n { input: input.input, model: input.model }\n );\n return {\n vectors: result.vectors,\n dimensions: result.dimensions,\n model: result.model,\n };\n },\n };\n}\n","import { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { readFile, stat } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\n\nexport interface YamlEnvOptions {\n substituteEnv?: boolean;\n missingEnv?: \"keep\" | \"empty\";\n env?: NodeJS.ProcessEnv;\n}\n\nexport interface LoadYamlOptions extends YamlEnvOptions {\n cache?: boolean;\n}\n\ninterface CacheEntry {\n mtimeMs: number;\n value: unknown;\n}\n\nconst YAML_CACHE = new Map<string, CacheEntry>();\n\nexport function clearYamlFileCache(): void {\n YAML_CACHE.clear();\n}\n\nfunction substituteEnvInString(\n input: string,\n env: NodeJS.ProcessEnv,\n missingEnv: \"keep\" | \"empty\",\n): string {\n return input.replace(/\\$\\{(\\w+)\\}/g, (_, name: string) => {\n const value = env[name];\n if (value !== undefined) return value;\n return missingEnv === \"empty\" ? \"\" : `\\${${name}}`;\n });\n}\n\nfunction substituteEnvInValue(\n input: unknown,\n options: { env: NodeJS.ProcessEnv; missingEnv: \"keep\" | \"empty\" },\n): unknown {\n if (typeof input === \"string\") {\n return substituteEnvInString(input, options.env, options.missingEnv);\n }\n if (Array.isArray(input)) {\n return input.map((item) => substituteEnvInValue(item, options));\n }\n if (input && typeof input === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(input)) {\n out[k] = substituteEnvInValue(v, options);\n }\n return out;\n }\n return input;\n}\n\nexport function parseYamlContent<T = unknown>(\n content: string,\n options: YamlEnvOptions = {},\n): T {\n const parsed = parseYaml(content) as unknown;\n if (options.substituteEnv === false) return parsed as T;\n return substituteEnvInValue(parsed, {\n env: options.env ?? process.env,\n missingEnv: options.missingEnv ?? \"keep\",\n }) as T;\n}\n\nfunction readFromCache(filePath: string, mtimeMs: number): unknown | undefined {\n const cached = YAML_CACHE.get(filePath);\n if (!cached) return undefined;\n if (cached.mtimeMs !== mtimeMs) return undefined;\n return cached.value;\n}\n\nfunction writeCache(filePath: string, mtimeMs: number, value: unknown): void {\n YAML_CACHE.set(filePath, { mtimeMs, value });\n}\n\nexport function loadYamlFileSync<T = unknown>(\n filePath: string,\n options: LoadYamlOptions = {},\n): T | undefined {\n const absPath = path.resolve(filePath);\n if (!existsSync(absPath)) return undefined;\n const useCache = options.cache === true;\n const fileStat = statSync(absPath);\n if (useCache) {\n const cached = readFromCache(absPath, fileStat.mtimeMs);\n if (cached !== undefined) return cached as T;\n }\n const content = readFileSync(absPath, \"utf-8\");\n const parsed = parseYamlContent<T>(content, options);\n if (useCache) writeCache(absPath, fileStat.mtimeMs, parsed);\n return parsed;\n}\n\nexport async function loadYamlFile<T = unknown>(\n filePath: string,\n options: LoadYamlOptions = {},\n): Promise<T | undefined> {\n const absPath = path.resolve(filePath);\n let fileStat;\n try {\n fileStat = await stat(absPath);\n } catch (err) {\n if ((err as NodeJS.ErrnoException)?.code === \"ENOENT\") return undefined;\n throw err;\n }\n const useCache = options.cache === true;\n if (useCache) {\n const cached = readFromCache(absPath, fileStat.mtimeMs);\n if (cached !== undefined) return cached as T;\n }\n const content = await readFile(absPath, \"utf-8\");\n const parsed = parseYamlContent<T>(content, options);\n if (useCache) writeCache(absPath, fileStat.mtimeMs, parsed);\n return parsed;\n}\n","import path from \"node:path\";\nimport { homedir } from \"node:os\";\n\nexport interface ResolveConfigPathOptions {\n expandHome?: boolean;\n homeDir?: string;\n}\n\nexport function isPathRef(value: unknown): value is string {\n return (\n typeof value === \"string\" &&\n value.length > 0 &&\n (value.endsWith(\".yaml\") || value.endsWith(\".yml\"))\n );\n}\n\nexport function expandHomePath(inputPath: string, options: { homeDir?: string } = {}): string {\n const home = options.homeDir ?? homedir();\n if (inputPath === \"~\") return home;\n if (inputPath.startsWith(\"~/\")) return path.join(home, inputPath.slice(2));\n return inputPath;\n}\n\nexport function resolveConfigPath(\n pathRef: string,\n configDir: string,\n options: ResolveConfigPathOptions = {},\n): string {\n const expanded = options.expandHome === false ? pathRef : expandHomePath(pathRef, { homeDir: options.homeDir });\n return path.resolve(configDir, expanded);\n}\n","import { extname } from \"node:path\";\nimport { readFile } from \"node:fs/promises\";\nimport type {\n KnowledgeMemorizeRequest,\n KnowledgeMemoryProvider,\n MemoryForgetRequest,\n MemoryRecallRequest,\n MemoryRecord,\n} from \"./types.js\";\n\nexport interface LlamaIndexKnowledgeHit {\n id: string;\n content: string;\n score?: number;\n metadata?: Record<string, unknown>;\n}\n\nexport interface LlamaIndexKnowledgeProviderOptions {\n /**\n * Optional embedding function. When provided, used as the embedding model for\n * LlamaIndex vector indexing instead of LlamaIndex's default.\n * Accepts an array of texts and returns their embedding vectors.\n *\n * Example with ModelHub from agent-common/model:\n * ```ts\n * const hub = createModelHub({ llmSection });\n * new LlamaIndexKnowledgeMemoryProvider({\n * embed: async (texts) => (await hub.embed({ input: texts })).vectors,\n * });\n * ```\n */\n embed?: (input: string[]) => Promise<number[][]>;\n /**\n * Custom mode callbacks. If `query` is provided, provider uses these callbacks\n * instead of built-in LlamaIndex ingestion/retrieval.\n */\n ingestText?: (req: {\n namespace: string;\n content: string;\n metadata?: Record<string, unknown>;\n }) => Promise<{ id?: string; content?: string; metadata?: Record<string, unknown> }>;\n ingestFile?: (req: {\n namespace: string;\n filePath: string;\n metadata?: Record<string, unknown>;\n }) => Promise<{ id?: string; content?: string; metadata?: Record<string, unknown> }>;\n ingestUrl?: (req: {\n namespace: string;\n url: string;\n metadata?: Record<string, unknown>;\n }) => Promise<{ id?: string; content?: string; metadata?: Record<string, unknown> }>;\n query?: (req: {\n namespace: string;\n query: string;\n topK: number;\n filters?: Record<string, unknown>;\n }) => Promise<LlamaIndexKnowledgeHit[]>;\n remove?: (req: { namespace: string; id: string }) => Promise<void>;\n}\n\ntype CustomIngestResult = { id?: string; content?: string; metadata?: Record<string, unknown> };\ntype CustomIngestPlan = {\n run: () => Promise<CustomIngestResult>;\n fallbackContent: string;\n};\n\ntype LlamaDocumentLike = {\n text?: string;\n metadata?: Record<string, unknown>;\n id_?: string;\n getContent?: () => string;\n};\n\ntype LlamaNodeWithScore = {\n node?: LlamaDocumentLike;\n score?: number;\n};\n\ntype LlamaRetriever = {\n retrieve: (query: string) => Promise<LlamaNodeWithScore[]>;\n};\n\ntype LlamaVectorStoreIndex = {\n asRetriever: (options?: { similarityTopK?: number }) => LlamaRetriever;\n};\n\ntype LlamaDocumentCtor = new (init?: { text?: string; metadata?: Record<string, unknown> }) => LlamaDocumentLike;\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype LlamaBaseEmbeddingCtor = new (...args: any[]) => { getTextEmbedding(text: string): Promise<number[]>; getTextEmbeddings(texts: string[]): Promise<number[][]> };\n\ntype LlamaSettings = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n embedModel: any;\n};\n\ntype LlamaIndexRuntime = {\n Document: LlamaDocumentCtor;\n VectorStoreIndex: {\n fromDocuments: (documents: LlamaDocumentLike[]) => Promise<LlamaVectorStoreIndex>;\n };\n Settings: LlamaSettings;\n BaseEmbedding: LlamaBaseEmbeddingCtor;\n PDFReader?: new () => { loadData: (filePath: string) => Promise<LlamaDocumentLike[]>; loadDataAsContent: (content: Uint8Array) => Promise<LlamaDocumentLike[]> };\n HTMLReader?: new () => { loadData: (filePath: string) => Promise<LlamaDocumentLike[]>; loadDataAsContent: (content: Uint8Array) => Promise<LlamaDocumentLike[]> };\n};\n\ntype NamespaceIndex = {\n documents: LlamaDocumentLike[];\n index?: LlamaVectorStoreIndex;\n};\n\nexport class LlamaIndexKnowledgeMemoryProvider implements KnowledgeMemoryProvider {\n private readonly options: LlamaIndexKnowledgeProviderOptions;\n private readonly namespaceIndex = new Map<string, NamespaceIndex>();\n private runtimePromise?: Promise<LlamaIndexRuntime>;\n\n constructor(options: LlamaIndexKnowledgeProviderOptions = {}) {\n this.options = options;\n }\n\n async remember(req: KnowledgeMemorizeRequest): Promise<MemoryRecord> {\n if (this.usesCustomCallbacks()) {\n return this.rememberWithCustomCallbacks(req);\n }\n\n const runtime = await this.getRuntime();\n const now = Date.now();\n const bucket = this.getBucket(req.namespace);\n\n const docs = await this.buildDocumentsFromRequest(runtime, req);\n if (docs.length === 0) {\n throw new Error(\"LlamaIndex ingest produced no documents\");\n }\n\n const records: MemoryRecord[] = [];\n for (const doc of docs) {\n const id = newKnowledgeId(now);\n const normalized = this.attachMetadata(doc, {\n ...(req.metadata ?? {}),\n memory_id: id,\n });\n bucket.documents.push(normalized);\n records.push(toRecord(req.namespace, id, extractContent(normalized), normalized.metadata, now));\n }\n\n await this.rebuildNamespaceIndex(runtime, req.namespace);\n return records[0];\n }\n\n async recall(req: MemoryRecallRequest): Promise<MemoryRecord[]> {\n const topK = req.topK ?? 8;\n\n if (this.usesCustomCallbacks() && this.options.query) {\n const now = Date.now();\n const hits = await this.options.query({\n namespace: req.namespace,\n query: req.query,\n topK,\n filters: req.filters,\n });\n return hits.map((hit) => ({\n id: hit.id,\n kind: \"knowledge\",\n namespace: req.namespace,\n content: hit.content,\n score: hit.score,\n metadata: hit.metadata,\n createdAt: now,\n updatedAt: now,\n }));\n }\n\n const runtime = await this.getRuntime();\n const bucket = this.getBucket(req.namespace);\n if (bucket.documents.length === 0) return [];\n\n if (!bucket.index) {\n await this.rebuildNamespaceIndex(runtime, req.namespace);\n }\n if (!bucket.index) return [];\n\n const retriever = bucket.index.asRetriever({ similarityTopK: topK });\n const nodes = await retriever.retrieve(req.query);\n const now = Date.now();\n\n const result: MemoryRecord[] = [];\n for (const hit of nodes) {\n const node: LlamaDocumentLike = hit.node ?? (hit as unknown as LlamaDocumentLike);\n const metadata = normalizeMetadata(node.metadata);\n if (!matchesFilters(metadata, req.filters)) continue;\n\n const id = String(metadata.memory_id ?? node.id_ ?? newKnowledgeId(now));\n result.push({\n id,\n kind: \"knowledge\",\n namespace: req.namespace,\n content: extractContent(node),\n score: typeof hit.score === \"number\" ? hit.score : undefined,\n metadata,\n createdAt: now,\n updatedAt: now,\n });\n\n if (topK > 0 && result.length >= topK) break;\n }\n\n return result;\n }\n\n async forget(req: MemoryForgetRequest): Promise<void> {\n if (this.options.remove) {\n await this.options.remove({ namespace: req.namespace, id: req.id });\n return;\n }\n\n const runtime = await this.getRuntime();\n const bucket = this.getBucket(req.namespace);\n const before = bucket.documents.length;\n bucket.documents = bucket.documents.filter((doc) => String(doc.metadata?.memory_id ?? \"\") !== req.id);\n if (bucket.documents.length === before) return;\n\n await this.rebuildNamespaceIndex(runtime, req.namespace);\n }\n\n private usesCustomCallbacks(): boolean {\n return typeof this.options.query === \"function\";\n }\n\n private async rememberWithCustomCallbacks(req: KnowledgeMemorizeRequest): Promise<MemoryRecord> {\n const now = Date.now();\n const plan = this.resolveCustomIngestPlan(req);\n const result = await plan.run();\n return toRecord(\n req.namespace,\n result.id ?? newKnowledgeId(now),\n result.content ?? plan.fallbackContent,\n result.metadata,\n now,\n );\n }\n\n private getBucket(namespace: string): NamespaceIndex {\n const existing = this.namespaceIndex.get(namespace);\n if (existing) return existing;\n\n const created: NamespaceIndex = { documents: [] };\n this.namespaceIndex.set(namespace, created);\n return created;\n }\n\n private async rebuildNamespaceIndex(runtime: LlamaIndexRuntime, namespace: string): Promise<void> {\n const bucket = this.getBucket(namespace);\n if (bucket.documents.length === 0) {\n bucket.index = undefined;\n return;\n }\n bucket.index = await runtime.VectorStoreIndex.fromDocuments(bucket.documents);\n }\n\n private attachMetadata(document: LlamaDocumentLike, metadata: Record<string, unknown>): LlamaDocumentLike {\n document.metadata = {\n ...(document.metadata ?? {}),\n ...metadata,\n };\n return document;\n }\n\n private async buildDocumentsFromRequest(\n runtime: LlamaIndexRuntime,\n req: KnowledgeMemorizeRequest,\n ): Promise<LlamaDocumentLike[]> {\n if (req.content) {\n return [new runtime.Document({ text: req.content, metadata: { ...(req.metadata ?? {}) } })];\n }\n\n if (req.filePath) {\n return this.loadFromFile(runtime, req.filePath, req.metadata);\n }\n\n if (req.url) {\n return this.loadFromUrl(runtime, req.url, req.metadata);\n }\n\n throw new Error(\"Knowledge memorize requires one of content/filePath/url\");\n }\n\n private async loadFromFile(\n runtime: LlamaIndexRuntime,\n filePath: string,\n metadata?: Record<string, unknown>,\n ): Promise<LlamaDocumentLike[]> {\n const ext = extname(filePath).toLowerCase();\n if (ext === \".pdf\") {\n if (!runtime.PDFReader) {\n throw new Error(\"@llamaindex/readers PDFReader is not available\");\n }\n const docs = await new runtime.PDFReader().loadData(filePath);\n return this.withSourceMetadata(docs, metadata, \"source_path\", filePath);\n }\n\n if (ext === \".html\" || ext === \".htm\") {\n if (!runtime.HTMLReader) {\n throw new Error(\"@llamaindex/readers HTMLReader is not available\");\n }\n const docs = await new runtime.HTMLReader().loadData(filePath);\n return this.withSourceMetadata(docs, metadata, \"source_path\", filePath);\n }\n\n const content = await readFile(filePath, \"utf8\");\n return [new runtime.Document({ text: content, metadata: { ...(metadata ?? {}), source_path: filePath } })];\n }\n\n private async loadFromUrl(\n runtime: LlamaIndexRuntime,\n url: string,\n metadata?: Record<string, unknown>,\n ): Promise<LlamaDocumentLike[]> {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Failed to fetch URL: ${url} (status ${response.status})`);\n }\n\n const contentType = response.headers.get(\"content-type\")?.toLowerCase() ?? \"\";\n const bytes = new Uint8Array(await response.arrayBuffer());\n\n if (contentType.includes(\"application/pdf\") && runtime.PDFReader) {\n const docs = await new runtime.PDFReader().loadDataAsContent(bytes);\n return this.withSourceMetadata(docs, metadata, \"source_url\", url);\n }\n\n if (contentType.includes(\"text/html\") && runtime.HTMLReader) {\n const docs = await new runtime.HTMLReader().loadDataAsContent(bytes);\n return this.withSourceMetadata(docs, metadata, \"source_url\", url);\n }\n\n const content = new TextDecoder().decode(bytes);\n return [new runtime.Document({ text: content, metadata: { ...(metadata ?? {}), source_url: url } })];\n }\n\n private resolveCustomIngestPlan(req: KnowledgeMemorizeRequest): CustomIngestPlan {\n if (req.content) {\n if (!this.options.ingestText) {\n throw new Error(\"LlamaIndex knowledge provider missing ingestText handler\");\n }\n return {\n run: () => this.options.ingestText!({ namespace: req.namespace, content: req.content!, metadata: req.metadata }),\n fallbackContent: req.content,\n };\n }\n if (req.filePath) {\n if (!this.options.ingestFile) {\n throw new Error(\"LlamaIndex knowledge provider missing ingestFile handler\");\n }\n return {\n run: () => this.options.ingestFile!({ namespace: req.namespace, filePath: req.filePath!, metadata: req.metadata }),\n fallbackContent: `(file:${req.filePath})`,\n };\n }\n if (req.url) {\n if (!this.options.ingestUrl) {\n throw new Error(\"LlamaIndex knowledge provider missing ingestUrl handler\");\n }\n return {\n run: () => this.options.ingestUrl!({ namespace: req.namespace, url: req.url!, metadata: req.metadata }),\n fallbackContent: `(url:${req.url})`,\n };\n }\n throw new Error(\"Knowledge memorize requires one of content/filePath/url\");\n }\n\n private withSourceMetadata(\n docs: LlamaDocumentLike[],\n metadata: Record<string, unknown> | undefined,\n key: \"source_path\" | \"source_url\",\n value: string,\n ): LlamaDocumentLike[] {\n return docs.map((doc) => this.attachMetadata(doc, { ...(metadata ?? {}), [key]: value }));\n }\n\n private async getRuntime(): Promise<LlamaIndexRuntime> {\n if (this.runtimePromise) return this.runtimePromise;\n\n this.runtimePromise = (async () => {\n ensureNode20ForLlamaIndex();\n\n let base: unknown;\n try {\n base = await import(\"llamaindex\");\n } catch (error) {\n throw new Error(\n `llamaindex is required for LlamaIndexKnowledgeMemoryProvider. Install: npm i llamaindex@^0.12.1. ${(error as Error).message}`,\n );\n }\n\n const baseModule = base as {\n Document: LlamaDocumentCtor;\n VectorStoreIndex: LlamaIndexRuntime[\"VectorStoreIndex\"];\n Settings: LlamaSettings;\n BaseEmbedding: LlamaBaseEmbeddingCtor;\n };\n\n const runtime: LlamaIndexRuntime = {\n Document: baseModule.Document,\n VectorStoreIndex: baseModule.VectorStoreIndex,\n Settings: baseModule.Settings,\n BaseEmbedding: baseModule.BaseEmbedding,\n };\n\n if (!runtime.Document || !runtime.VectorStoreIndex) {\n throw new Error(\"llamaindex runtime missing Document/VectorStoreIndex exports\");\n }\n\n try {\n const pdf = await import(\"@llamaindex/readers/pdf\");\n runtime.PDFReader = (pdf as { PDFReader?: LlamaIndexRuntime[\"PDFReader\"] }).PDFReader;\n } catch {\n runtime.PDFReader = undefined;\n }\n\n try {\n const html = await import(\"@llamaindex/readers/html\");\n runtime.HTMLReader = (html as { HTMLReader?: LlamaIndexRuntime[\"HTMLReader\"] }).HTMLReader;\n } catch {\n runtime.HTMLReader = undefined;\n }\n\n if (this.options.embed) {\n const embedFn = this.options.embed;\n const AdapterEmbedding = class extends runtime.BaseEmbedding {\n async getTextEmbedding(text: string): Promise<number[]> {\n return (await embedFn([text]))[0];\n }\n async getTextEmbeddings(texts: string[]): Promise<number[][]> {\n return embedFn(texts);\n }\n };\n runtime.Settings.embedModel = new AdapterEmbedding();\n }\n\n return runtime;\n })();\n\n return this.runtimePromise;\n }\n}\n\nfunction ensureNode20ForLlamaIndex(): void {\n const major = Number.parseInt(process.versions.node.split(\".\")[0] ?? \"0\", 10);\n if (Number.isFinite(major) && major < 20) {\n throw new Error(\n `llamaindex@0.12.x requires Node.js >= 20. Current runtime: ${process.versions.node}.`,\n );\n }\n}\n\nfunction normalizeMetadata(metadata: unknown): Record<string, unknown> {\n if (!metadata || typeof metadata !== \"object\" || Array.isArray(metadata)) return {};\n return metadata as Record<string, unknown>;\n}\n\nfunction matchesFilters(metadata: Record<string, unknown>, filters?: Record<string, unknown>): boolean {\n if (!filters) return true;\n for (const [key, value] of Object.entries(filters)) {\n if (metadata[key] !== value) return false;\n }\n return true;\n}\n\nfunction extractContent(doc: LlamaDocumentLike): string {\n if (typeof doc.getContent === \"function\") {\n try {\n const value = doc.getContent();\n if (typeof value === \"string\" && value.trim().length > 0) return value;\n } catch {\n // Fallback to text field below.\n }\n }\n\n if (typeof doc.text === \"string\" && doc.text.trim().length > 0) {\n return doc.text;\n }\n\n return \"\";\n}\n\nfunction newKnowledgeId(now: number): string {\n return `llamaindex-${now}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction toRecord(\n namespace: string,\n id: string,\n content: string,\n metadata: Record<string, unknown> | undefined,\n now: number,\n): MemoryRecord {\n return {\n id,\n kind: \"knowledge\",\n namespace,\n content,\n metadata,\n createdAt: now,\n updatedAt: now,\n };\n}\n","import type {\n LongTermMemorizeRequest,\n MemoryForgetRequest,\n MemoryRecallRequest,\n MemoryRecord,\n LongTermMemoryProvider,\n} from \"./types.js\";\n\nexport interface Mem0MemoryLike {\n add(\n messages: Array<{ role: string; content: string }>,\n options?: { userId?: string; metadata?: Record<string, unknown> },\n ): Promise<unknown>;\n search(\n query: string,\n options?: { userId?: string; limit?: number; metadata?: Record<string, unknown> },\n ): Promise<{\n results: Array<{\n id: string;\n memory: string;\n score?: number;\n metadata?: Record<string, unknown>;\n userId?: string;\n }>;\n }>;\n delete(memoryId: string): Promise<unknown>;\n}\n\nexport interface Mem0LongTermMemoryProviderOptions {\n memory: Mem0MemoryLike;\n namespaceToUserId?: (namespace: string) => string;\n}\n\nconst defaultNamespaceToUserId = (namespace: string): string => namespace;\n\nexport class Mem0LongTermMemoryProvider implements LongTermMemoryProvider {\n private readonly memory: Mem0MemoryLike;\n private readonly namespaceToUserId: (namespace: string) => string;\n\n constructor(options: Mem0LongTermMemoryProviderOptions) {\n this.memory = options.memory;\n this.namespaceToUserId = options.namespaceToUserId ?? defaultNamespaceToUserId;\n }\n\n async remember(req: LongTermMemorizeRequest): Promise<MemoryRecord> {\n const now = Date.now();\n const userId = this.namespaceToUserId(req.namespace);\n\n await this.memory.add([{ role: \"user\", content: req.content }], {\n userId,\n metadata: req.metadata,\n });\n\n const searchResult = await this.memory.search(req.content, { userId, limit: 1 });\n const first = searchResult.results?.[0];\n\n return {\n id: first?.id ?? `mem0-${now}-${Math.random().toString(36).slice(2, 10)}`,\n kind: \"long_term\",\n namespace: req.namespace,\n content: first?.memory ?? req.content,\n score: first?.score,\n metadata: {\n ...req.metadata,\n ...first?.metadata,\n },\n createdAt: now,\n updatedAt: now,\n };\n }\n\n async recall(req: MemoryRecallRequest): Promise<MemoryRecord[]> {\n const now = Date.now();\n const userId = this.namespaceToUserId(req.namespace);\n const result = await this.memory.search(req.query, {\n userId,\n limit: req.topK ?? 8,\n metadata: req.filters,\n });\n\n return (result.results ?? []).map((item) => ({\n id: item.id,\n kind: \"long_term\",\n namespace: req.namespace,\n content: item.memory,\n score: item.score,\n metadata: item.metadata,\n createdAt: now,\n updatedAt: now,\n }));\n }\n\n async forget(req: MemoryForgetRequest): Promise<void> {\n await this.memory.delete(req.id);\n }\n}\n","import { mkdirSync } from \"node:fs\";\nimport path from \"node:path\";\nimport { createRequire } from \"node:module\";\nimport type {\n LongTermMemorizeRequest,\n LongTermMemoryProvider,\n MemoryForgetRequest,\n MemoryRecallRequest,\n MemoryRecord,\n} from \"./types.js\";\n\nexport interface SqliteVecLongTermMemoryProviderOptions {\n dbPath: string;\n dimensions: number;\n embed: (input: string[]) => Promise<number[][]>;\n}\n\ninterface SqliteVecMetaRow {\n vec_rowid: number;\n id: string;\n namespace: string;\n content: string;\n metadata_json: string;\n created_at: number;\n updated_at: number;\n distance?: number;\n}\n\ninterface SqliteLikeDb {\n pragma(source: string): void;\n exec(sql: string): void;\n prepare(sql: string): {\n run(...params: unknown[]): { lastInsertRowid: number | bigint };\n get<T = unknown>(...params: unknown[]): T | undefined;\n all<T = unknown>(...params: unknown[]): T[];\n };\n transaction<T extends (...args: never[]) => unknown>(fn: T): T;\n}\n\nconst require = createRequire(import.meta.url);\n\nfunction randomId(prefix: string): string {\n return `${prefix}-${Date.now()}-${Math.random().toString(36).slice(2, 10)}`;\n}\n\nfunction asFiniteNumber(value: unknown, fallback: number): number {\n return typeof value === \"number\" && Number.isFinite(value) ? value : fallback;\n}\n\nfunction distanceToScore(distance: number | undefined): number | undefined {\n if (typeof distance !== \"number\" || !Number.isFinite(distance)) return undefined;\n return 1 / (1 + distance);\n}\n\nfunction parseMetadata(json: string): Record<string, unknown> {\n try {\n const parsed = JSON.parse(json) as unknown;\n return parsed && typeof parsed === \"object\" && !Array.isArray(parsed)\n ? (parsed as Record<string, unknown>)\n : {};\n } catch {\n return {};\n }\n}\n\nfunction matchesFilters(\n metadata: Record<string, unknown>,\n filters?: Record<string, unknown>,\n): boolean {\n if (!filters || Object.keys(filters).length === 0) return true;\n for (const [k, v] of Object.entries(filters)) {\n if (metadata[k] !== v) return false;\n }\n return true;\n}\n\nexport class SqliteVecLongTermMemoryProvider implements LongTermMemoryProvider {\n private readonly db: SqliteLikeDb;\n private readonly dimensions: number;\n private readonly embed: (input: string[]) => Promise<number[][]>;\n\n constructor(options: SqliteVecLongTermMemoryProviderOptions) {\n const dbPath = path.resolve(options.dbPath);\n mkdirSync(path.dirname(dbPath), { recursive: true });\n\n const BetterSqlite3 = require(\"better-sqlite3\") as new (file: string) => SqliteLikeDb;\n const sqliteVec = require(\"sqlite-vec\") as { load: (db: SqliteLikeDb) => void };\n const db = new BetterSqlite3(dbPath);\n db.pragma(\"journal_mode = WAL\");\n sqliteVec.load(db);\n\n this.db = db;\n this.dimensions = asFiniteNumber(options.dimensions, 1024);\n this.embed = options.embed;\n this.initSchema();\n }\n\n async remember(req: LongTermMemorizeRequest): Promise<MemoryRecord> {\n const now = Date.now();\n const id = randomId(\"sqlite-vec\");\n const [vector] = await this.embed([req.content]);\n this.assertVector(vector);\n\n const writeTx = this.db.transaction((rowId: string, namespace: string, content: string, metadataJson: string, ts: number, vecJson: string) => {\n const vecInsert = this.db\n .prepare(\"INSERT INTO long_term_vec(embedding) VALUES (?)\")\n .run(vecJson);\n const vecRowId = Number(vecInsert.lastInsertRowid);\n this.db\n .prepare(\n `INSERT INTO long_term_meta(vec_rowid, id, namespace, content, metadata_json, created_at, updated_at)\n VALUES (?, ?, ?, ?, ?, ?, ?)`,\n )\n .run(vecRowId, rowId, namespace, content, metadataJson, ts, ts);\n });\n\n writeTx(\n id,\n req.namespace,\n req.content,\n JSON.stringify(req.metadata ?? {}),\n now,\n JSON.stringify(vector),\n );\n\n return {\n id,\n kind: \"long_term\",\n namespace: req.namespace,\n content: req.content,\n metadata: req.metadata,\n createdAt: now,\n updatedAt: now,\n };\n }\n\n async recall(req: MemoryRecallRequest): Promise<MemoryRecord[]> {\n const [queryVector] = await this.embed([req.query]);\n this.assertVector(queryVector);\n const topK = req.topK ?? 8;\n if (topK <= 0) return [];\n\n const rows = this.db\n .prepare(\n `SELECT m.vec_rowid, m.id, m.namespace, m.content, m.metadata_json, m.created_at, m.updated_at, v.distance\n FROM long_term_vec v\n JOIN long_term_meta m ON m.vec_rowid = v.rowid\n WHERE v.embedding MATCH ? AND v.k = ? AND m.namespace = ?`,\n )\n .all<SqliteVecMetaRow>(JSON.stringify(queryVector), topK, req.namespace);\n\n const out: MemoryRecord[] = [];\n for (const row of rows) {\n const metadata = parseMetadata(row.metadata_json);\n if (!matchesFilters(metadata, req.filters)) continue;\n out.push({\n id: row.id,\n kind: \"long_term\",\n namespace: row.namespace,\n content: row.content,\n score: distanceToScore(row.distance),\n metadata,\n createdAt: row.created_at,\n updatedAt: row.updated_at,\n });\n }\n return out;\n }\n\n async forget(req: MemoryForgetRequest): Promise<void> {\n const found = this.db\n .prepare(\n \"SELECT vec_rowid FROM long_term_meta WHERE id = ? AND namespace = ? LIMIT 1\",\n )\n .get<{ vec_rowid: number }>(req.id, req.namespace);\n if (!found) return;\n\n const deleteTx = this.db.transaction((vecRowId: number, id: string, namespace: string) => {\n this.db.prepare(\"DELETE FROM long_term_meta WHERE id = ? AND namespace = ?\").run(id, namespace);\n this.db.prepare(\"DELETE FROM long_term_vec WHERE rowid = ?\").run(vecRowId);\n });\n deleteTx(found.vec_rowid, req.id, req.namespace);\n }\n\n private initSchema(): void {\n this.db.exec(`\n CREATE VIRTUAL TABLE IF NOT EXISTS long_term_vec\n USING vec0(embedding float[${this.dimensions}]);\n `);\n\n this.db.exec(`\n CREATE TABLE IF NOT EXISTS long_term_meta (\n vec_rowid INTEGER PRIMARY KEY,\n id TEXT NOT NULL UNIQUE,\n namespace TEXT NOT NULL,\n content TEXT NOT NULL,\n metadata_json TEXT NOT NULL,\n created_at INTEGER NOT NULL,\n updated_at INTEGER NOT NULL\n );\n `);\n this.db.exec(`\n CREATE INDEX IF NOT EXISTS idx_long_term_meta_namespace\n ON long_term_meta(namespace);\n `);\n }\n\n private assertVector(vector: number[] | undefined): void {\n if (!Array.isArray(vector)) {\n throw new Error(\"Embedding returned no vector\");\n }\n if (vector.length !== this.dimensions) {\n throw new Error(\n `Embedding dimensions mismatch: expected ${this.dimensions}, got ${vector.length}`,\n );\n }\n }\n}\n"],"mappings":"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","names":["prefix","provider","path","isLocalBaseUrl","path","readFile","now","path","require","prefix","matchesFilters","path"]}
|