@theokit/memory-mem0 1.0.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/index.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +0 -9
- package/dist/index.d.ts +0 -9
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
package/dist/index.cjs
CHANGED
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/circuit-breaker.ts","../src/translate.ts","../src/adapter.ts","../src/index.ts"],"names":["MemoryAdapterError","ADAPTER_ID","mkMemoryId","extractRawId","MemoryClient","definePlugin"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * In-memory circuit breaker for Mem0Adapter (T5.1, EC-K).\n *\n * Trips after `threshold` consecutive 5xx-class failures. 429 / 401 /\n * 404 / invalid_input do NOT count toward the threshold — rate limits\n * are a caller-pace signal, not a provider-down signal (EC-K).\n *\n * @internal\n */\n\nimport { MemoryAdapterError } from \"@theokit/sdk\";\n\nconst ADAPTER_ID = \"mem0\";\n\nexport interface CircuitBreakerOptions {\n threshold?: number;\n cooldownMs?: number;\n}\n\nexport class CircuitBreaker {\n readonly threshold: number;\n readonly cooldownMs: number;\n #failures = 0;\n #openUntil = 0;\n\n constructor(opts: CircuitBreakerOptions = {}) {\n this.threshold = opts.threshold ?? 5;\n this.cooldownMs = opts.cooldownMs ?? 2 * 60 * 1000;\n }\n\n /** Throws `MemoryAdapterError(code: \"rate_limited\")` if breaker is open. */\n ensureClosed(op: string): void {\n if (Date.now() < this.#openUntil) {\n const secondsLeft = Math.ceil((this.#openUntil - Date.now()) / 1000);\n throw new MemoryAdapterError(\n `Mem0 circuit breaker open (${op}): ${secondsLeft}s cooldown remaining.`,\n { adapterId: ADAPTER_ID, code: \"rate_limited\" },\n );\n }\n }\n\n /** Increment failure counter. Trips when threshold reached. Only call for 5xx-class errors. */\n recordFailure(): void {\n this.#failures += 1;\n if (this.#failures >= this.threshold) {\n this.#openUntil = Date.now() + this.cooldownMs;\n }\n }\n\n /** Reset on first success — closes the breaker (EC-K). */\n recordSuccess(): void {\n this.#failures = 0;\n this.#openUntil = 0;\n }\n\n /** Test-only inspector. @internal */\n state(): { failures: number; isOpen: boolean; openUntil: number } {\n return {\n failures: this.#failures,\n isOpen: Date.now() < this.#openUntil,\n openUntil: this.#openUntil,\n };\n }\n}\n","/**\n * `MemoryContext` → Mem0 add/search options translation (T5.1).\n *\n * Mem0 keeps `user_id`, `agent_id`, `app_id`, `run_id` orthogonal —\n * we map each `MemoryContext` field onto its native primitive.\n *\n * @internal\n */\n\nimport type { MemoryContext } from \"@theokit/sdk\";\n\ninterface Mem0Options {\n user_id?: string;\n agent_id?: string;\n run_id?: string;\n app_id?: string;\n categories?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport function toMem0Options(ctx: MemoryContext): Mem0Options {\n const out: Mem0Options = { user_id: ctx.userId };\n if (ctx.agentId !== undefined) out.agent_id = ctx.agentId;\n if (ctx.sessionId !== undefined) out.run_id = ctx.sessionId;\n if (ctx.tenantId !== undefined) out.app_id = ctx.tenantId;\n if (ctx.tags !== undefined) out.categories = ctx.tags;\n if (ctx.metadata !== undefined) out.metadata = ctx.metadata;\n return out;\n}\n","/**\n * Mem0Adapter — `@theokit/memory-mem0` core (T5.1, ADR D141 / D148).\n *\n * Wraps `mem0ai` `MemoryClient` (cloud-only per D148). Implements\n * `MemoryAdapter` with the unique `history(id)` capability — the only\n * adapter today that exposes per-memory versioning.\n *\n * Includes a circuit breaker (EC-K: 5xx counts; 429 does NOT trip).\n *\n * @public\n */\n\nimport {\n extractRawId,\n type MemoryAdapter,\n type MemoryAdapterCapabilities,\n MemoryAdapterError,\n type MemoryContext,\n type MemoryFact,\n type MemoryId,\n type MemoryRevision,\n type MemoryToolSchema,\n type MemoryTurnMessage,\n mkMemoryId,\n} from \"@theokit/sdk\";\nimport MemoryClient from \"mem0ai\";\n\nimport { CircuitBreaker, type CircuitBreakerOptions } from \"./circuit-breaker.js\";\nimport { toMem0Options } from \"./translate.js\";\n\n/** Configuration accepted by the `mem0Memory(...)` factory. @public */\nexport interface Mem0AdapterOptions {\n /** Mem0 API key. Required. */\n apiKey: string;\n /** Override host (default mem0 cloud). */\n host?: string;\n organizationId?: string;\n projectId?: string;\n /** Circuit breaker tuning (EC-K). */\n breaker?: CircuitBreakerOptions;\n}\n\nconst ADAPTER_ID = \"mem0\";\n\nconst CAPS: MemoryAdapterCapabilities = {\n history: true, // ← unique to Mem0\n sessions: true,\n tenancy: true,\n reasoning: false,\n toolSchemas: true,\n prefetch: false,\n};\n\n/** @internal */\nexport class Mem0Adapter implements MemoryAdapter {\n readonly id = ADAPTER_ID;\n readonly capabilities = CAPS;\n readonly #opts: Mem0AdapterOptions;\n readonly #breaker: CircuitBreaker;\n #client?: MemoryClient;\n\n constructor(opts: Mem0AdapterOptions) {\n this.#opts = opts;\n this.#breaker = new CircuitBreaker(opts.breaker);\n }\n\n isAvailable(): boolean {\n return typeof this.#opts.apiKey === \"string\" && this.#opts.apiKey.length > 0;\n }\n\n async initialize(): Promise<void> {\n // Lazy: client constructed on first call.\n }\n\n async write(content: string | MemoryTurnMessage[], ctx: MemoryContext): Promise<MemoryId> {\n this.#breaker.ensureClosed(\"write\");\n const messages = this.#toMessages(content);\n if (messages.length === 0) {\n throw new MemoryAdapterError(\"write: empty messages\", {\n adapterId: ADAPTER_ID,\n code: \"invalid_input\",\n });\n }\n try {\n const opts = toMem0Options(ctx);\n const resp = await this.#sdk().add(messages, opts);\n this.#breaker.recordSuccess();\n const first = resp[0];\n const rawId = first?.id ?? `mem0-${Date.now()}`;\n return mkMemoryId(ADAPTER_ID, rawId);\n } catch (err) {\n throw this.#translateError(err, \"write\");\n }\n }\n\n async recall(query: string, ctx: MemoryContext, k = 10): Promise<MemoryFact[]> {\n if (k <= 0) return [];\n this.#breaker.ensureClosed(\"recall\");\n try {\n const opts = toMem0Options(ctx);\n const resp = await this.#sdk().search(query, {\n // Read filter: cross-session recall keyed by user_id (Hermes pattern).\n ...(opts.user_id !== undefined ? { filters: { user_id: opts.user_id } } : {}),\n topK: k,\n rerank: true,\n });\n this.#breaker.recordSuccess();\n const list = Array.isArray(resp) ? resp : ((resp as { results?: unknown[] }).results ?? []);\n return (list as Array<Record<string, unknown>>).map((r) => ({\n id: mkMemoryId(ADAPTER_ID, String(r.id ?? \"\")),\n content: String(r.memory ?? r.content ?? \"\"),\n ...(typeof r.score === \"number\" ? { score: r.score as number } : {}),\n ...(r.createdAt !== undefined ? { createdAt: String(r.createdAt) } : {}),\n ...(r.metadata !== undefined ? { metadata: r.metadata as Record<string, unknown> } : {}),\n }));\n } catch (err) {\n throw this.#translateError(err, \"recall\");\n }\n }\n\n async delete(id: MemoryId): Promise<void> {\n this.#breaker.ensureClosed(\"delete\");\n const rawId = extractRawId(id, ADAPTER_ID);\n try {\n await this.#sdk().delete(rawId);\n this.#breaker.recordSuccess();\n } catch (err) {\n throw this.#translateError(err, \"delete\");\n }\n }\n\n async history(id: MemoryId): Promise<MemoryRevision[]> {\n this.#breaker.ensureClosed(\"history\");\n const rawId = extractRawId(id, ADAPTER_ID);\n try {\n const rows = await this.#sdk().history(rawId);\n this.#breaker.recordSuccess();\n return rows.map((r, i) => {\n const u = (r as unknown as { updatedAt?: unknown }).updatedAt;\n const changedAt =\n u instanceof Date\n ? u.toISOString()\n : typeof u === \"string\"\n ? u\n : new Date().toISOString();\n return {\n id: mkMemoryId(ADAPTER_ID, r.memoryId ?? rawId),\n content: String(r.newMemory ?? r.oldMemory ?? \"\"),\n version: i + 1,\n changedAt,\n };\n });\n } catch (err) {\n throw this.#translateError(err, \"history\");\n }\n }\n\n getToolSchemas(): MemoryToolSchema[] {\n return [\n {\n name: \"memory_write\",\n description:\n \"Persist a turn to Mem0 long-term memory. Server-side extraction populates facts.\",\n parameters: {\n type: \"object\",\n properties: {\n content: { type: \"string\", description: \"Turn text to persist.\" },\n },\n required: [\"content\"],\n },\n },\n {\n name: \"memory_recall\",\n description: \"Retrieve up to k semantically relevant facts from Mem0 (server-side rerank).\",\n parameters: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n k: { type: \"integer\", minimum: 1, maximum: 50 },\n },\n required: [\"query\"],\n },\n },\n {\n name: \"memory_history\",\n description:\n \"Retrieve the version history of a specific memory by id. Mem0-unique capability — \" +\n \"shows how a fact has evolved over time (e.g., user changed preferences).\",\n parameters: {\n type: \"object\",\n properties: { memoryId: { type: \"string\" } },\n required: [\"memoryId\"],\n },\n },\n ];\n }\n\n async handleToolCall(\n name: string,\n args: Record<string, unknown>,\n ctx: MemoryContext,\n ): Promise<string> {\n if (name === \"memory_write\") {\n const id = await this.write(String(args.content ?? \"\"), ctx);\n return JSON.stringify({ ok: true, id });\n }\n if (name === \"memory_recall\") {\n const k = typeof args.k === \"number\" ? args.k : 10;\n const facts = await this.recall(String(args.query ?? \"\"), ctx, k);\n return JSON.stringify({ ok: true, facts });\n }\n if (name === \"memory_history\") {\n const rawId = String(args.memoryId ?? \"\");\n const wrapped = rawId.startsWith(`${ADAPTER_ID}:`)\n ? (rawId as MemoryId)\n : mkMemoryId(ADAPTER_ID, rawId);\n const revisions = await this.history(wrapped);\n return JSON.stringify({ ok: true, revisions });\n }\n throw new MemoryAdapterError(`Unknown tool name: ${name}`, {\n adapterId: ADAPTER_ID,\n code: \"invalid_input\",\n });\n }\n\n async shutdown(): Promise<void> {\n this.#client = undefined;\n }\n\n /** Test-only: inspect breaker state. @internal */\n _breakerState(): { failures: number; isOpen: boolean; openUntil: number } {\n return this.#breaker.state();\n }\n\n // ── helpers ────────────────────────────────────────────────────────\n\n #toMessages(\n content: string | MemoryTurnMessage[],\n ): Array<{ role: \"user\" | \"assistant\"; content: string }> {\n if (typeof content === \"string\") {\n return content.trim().length === 0 ? [] : [{ role: \"user\", content }];\n }\n // Mem0 SDK accepts only user/assistant roles. System turns are merged\n // into user content with a \"[system] \" prefix.\n return content\n .filter((m) => m.content.trim().length > 0)\n .map((m) =>\n m.role === \"system\"\n ? { role: \"user\" as const, content: `[system] ${m.content}` }\n : { role: m.role, content: m.content },\n );\n }\n\n #sdk(): MemoryClient {\n if (this.#client === undefined) {\n this.#client = new MemoryClient({\n apiKey: this.#opts.apiKey,\n ...(this.#opts.host !== undefined ? { host: this.#opts.host } : {}),\n ...(this.#opts.organizationId !== undefined\n ? { organizationId: this.#opts.organizationId }\n : {}),\n ...(this.#opts.projectId !== undefined ? { projectId: this.#opts.projectId } : {}),\n });\n }\n return this.#client;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: error-translation ladder maps provider error classes to typed codes + breaker policy (EC-K: 429 does NOT trip); inlining keeps the policy decisions in one place.\n #translateError(err: unknown, op: string): MemoryAdapterError {\n if (err instanceof MemoryAdapterError) {\n if (err.code === \"rate_limited\") {\n // EC-K: do NOT trip breaker on rate limit.\n } else if (\n err.code === \"auth_failed\" ||\n err.code === \"not_found\" ||\n err.code === \"invalid_input\"\n ) {\n // No trip — these are caller-side or stateful conditions.\n } else {\n this.#breaker.recordFailure();\n }\n return err;\n }\n const status =\n (err as { status?: number; statusCode?: number; response?: { status?: number } })?.status ??\n (err as { statusCode?: number })?.statusCode ??\n (err as { response?: { status?: number } })?.response?.status;\n const message = (err as Error)?.message ?? String(err);\n if (status === 401 || status === 403) {\n return new MemoryAdapterError(`Mem0 auth failed (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"auth_failed\",\n cause: err,\n });\n }\n if (status === 429) {\n // EC-K: rate-limited; do NOT increment breaker.\n return new MemoryAdapterError(`Mem0 rate limited (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"rate_limited\",\n cause: err,\n });\n }\n if (status === 404) {\n return new MemoryAdapterError(`Mem0 not found (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"not_found\",\n cause: err,\n });\n }\n if (typeof status === \"number\" && status >= 500) {\n this.#breaker.recordFailure();\n return new MemoryAdapterError(`Mem0 server error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"network\",\n cause: err,\n });\n }\n if (status === undefined && message.toLowerCase().includes(\"network\")) {\n this.#breaker.recordFailure();\n return new MemoryAdapterError(`Mem0 network error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"network\",\n cause: err,\n });\n }\n return new MemoryAdapterError(`Mem0 error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"unknown\",\n cause: err,\n });\n }\n}\n","/**\n * `@theokit/memory-mem0` — Mem0 cloud memory adapter for @theokit/sdk.\n *\n * Cloud-only per ADR D148. Wraps `mem0ai` `MemoryClient`. Unique\n * capability among `@theokit/memory-*` adapters: `history(id)`.\n *\n * @public\n */\n\nimport type { Plugin } from \"@theokit/sdk\";\nimport { definePlugin } from \"@theokit/sdk\";\n\nimport { Mem0Adapter, type Mem0AdapterOptions } from \"./adapter.js\";\n\nexport type { Mem0AdapterOptions } from \"./adapter.js\";\n\n/** Build a `Plugin { kind: \"memory\" }`. @public */\nexport function mem0Memory(options: Mem0AdapterOptions): Plugin {\n return definePlugin({\n name: \"@theokit/memory-mem0\",\n version: \"0.1.0\",\n kind: \"memory\",\n createProvider: () => new Mem0Adapter(options),\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/circuit-breaker.ts","../src/translate.ts","../src/adapter.ts","../src/index.ts"],"names":["MemoryAdapterError","ADAPTER_ID","mkMemoryId","extractRawId","MemoryClient","Plugin"],"mappings":"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","file":"index.cjs","sourcesContent":["/**\n * In-memory circuit breaker for Mem0Adapter (T5.1, EC-K).\n *\n * Trips after `threshold` consecutive 5xx-class failures. 429 / 401 /\n * 404 / invalid_input do NOT count toward the threshold — rate limits\n * are a caller-pace signal, not a provider-down signal (EC-K).\n *\n * @internal\n */\n\nimport { MemoryAdapterError } from \"@theokit/sdk\";\n\nconst ADAPTER_ID = \"mem0\";\n\nexport interface CircuitBreakerOptions {\n threshold?: number;\n cooldownMs?: number;\n}\n\nexport class CircuitBreaker {\n readonly threshold: number;\n readonly cooldownMs: number;\n #failures = 0;\n #openUntil = 0;\n\n constructor(opts: CircuitBreakerOptions = {}) {\n this.threshold = opts.threshold ?? 5;\n this.cooldownMs = opts.cooldownMs ?? 2 * 60 * 1000;\n }\n\n /** Throws `MemoryAdapterError(code: \"rate_limited\")` if breaker is open. */\n ensureClosed(op: string): void {\n if (Date.now() < this.#openUntil) {\n const secondsLeft = Math.ceil((this.#openUntil - Date.now()) / 1000);\n throw new MemoryAdapterError(\n `Mem0 circuit breaker open (${op}): ${secondsLeft}s cooldown remaining.`,\n { adapterId: ADAPTER_ID, code: \"rate_limited\" },\n );\n }\n }\n\n /** Increment failure counter. Trips when threshold reached. Only call for 5xx-class errors. */\n recordFailure(): void {\n this.#failures += 1;\n if (this.#failures >= this.threshold) {\n this.#openUntil = Date.now() + this.cooldownMs;\n }\n }\n\n /** Reset on first success — closes the breaker (EC-K). */\n recordSuccess(): void {\n this.#failures = 0;\n this.#openUntil = 0;\n }\n\n /** Test-only inspector. @internal */\n state(): { failures: number; isOpen: boolean; openUntil: number } {\n return {\n failures: this.#failures,\n isOpen: Date.now() < this.#openUntil,\n openUntil: this.#openUntil,\n };\n }\n}\n","/**\n * `MemoryContext` → Mem0 add/search options translation (T5.1).\n *\n * Mem0 keeps `user_id`, `agent_id`, `app_id`, `run_id` orthogonal —\n * we map each `MemoryContext` field onto its native primitive.\n *\n * @internal\n */\n\nimport type { MemoryContext } from \"@theokit/sdk\";\n\ninterface Mem0Options {\n user_id?: string;\n agent_id?: string;\n run_id?: string;\n app_id?: string;\n categories?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport function toMem0Options(ctx: MemoryContext): Mem0Options {\n const out: Mem0Options = { user_id: ctx.userId };\n if (ctx.agentId !== undefined) out.agent_id = ctx.agentId;\n if (ctx.sessionId !== undefined) out.run_id = ctx.sessionId;\n if (ctx.tenantId !== undefined) out.app_id = ctx.tenantId;\n if (ctx.tags !== undefined) out.categories = ctx.tags;\n if (ctx.metadata !== undefined) out.metadata = ctx.metadata;\n return out;\n}\n","/**\n * Mem0Adapter — `@theokit/memory-mem0` core (T5.1, ADR D141 / D148).\n *\n * Wraps `mem0ai` `MemoryClient` (cloud-only per D148). Implements\n * `MemoryAdapter` with the unique `history(id)` capability — the only\n * adapter today that exposes per-memory versioning.\n *\n * Includes a circuit breaker (EC-K: 5xx counts; 429 does NOT trip).\n *\n * @public\n */\n\nimport {\n extractRawId,\n type MemoryAdapter,\n type MemoryAdapterCapabilities,\n MemoryAdapterError,\n type MemoryContext,\n type MemoryFact,\n type MemoryId,\n type MemoryRevision,\n type MemoryToolSchema,\n type MemoryTurnMessage,\n mkMemoryId,\n} from \"@theokit/sdk\";\nimport MemoryClient from \"mem0ai\";\n\nimport { CircuitBreaker, type CircuitBreakerOptions } from \"./circuit-breaker.js\";\nimport { toMem0Options } from \"./translate.js\";\n\n/** Configuration accepted by the `mem0Memory(...)` factory. @public */\nexport interface Mem0AdapterOptions {\n /** Mem0 API key. Required. */\n apiKey: string;\n /** Override host (default mem0 cloud). */\n host?: string;\n organizationId?: string;\n projectId?: string;\n /** Circuit breaker tuning (EC-K). */\n breaker?: CircuitBreakerOptions;\n}\n\nconst ADAPTER_ID = \"mem0\";\n\nconst CAPS: MemoryAdapterCapabilities = {\n history: true, // ← unique to Mem0\n sessions: true,\n tenancy: true,\n reasoning: false,\n toolSchemas: true,\n prefetch: false,\n};\n\n/** @internal */\nexport class Mem0Adapter implements MemoryAdapter {\n readonly id = ADAPTER_ID;\n readonly capabilities = CAPS;\n readonly #opts: Mem0AdapterOptions;\n readonly #breaker: CircuitBreaker;\n #client?: MemoryClient;\n\n constructor(opts: Mem0AdapterOptions) {\n this.#opts = opts;\n this.#breaker = new CircuitBreaker(opts.breaker);\n }\n\n isAvailable(): boolean {\n return typeof this.#opts.apiKey === \"string\" && this.#opts.apiKey.length > 0;\n }\n\n async initialize(): Promise<void> {\n // Lazy: client constructed on first call.\n }\n\n async write(content: string | MemoryTurnMessage[], ctx: MemoryContext): Promise<MemoryId> {\n this.#breaker.ensureClosed(\"write\");\n const messages = this.#toMessages(content);\n if (messages.length === 0) {\n throw new MemoryAdapterError(\"write: empty messages\", {\n adapterId: ADAPTER_ID,\n code: \"invalid_input\",\n });\n }\n try {\n const opts = toMem0Options(ctx);\n const resp = await this.#sdk().add(messages, opts);\n this.#breaker.recordSuccess();\n const first = resp[0];\n const rawId = first?.id ?? `mem0-${Date.now()}`;\n return mkMemoryId(ADAPTER_ID, rawId);\n } catch (err) {\n throw this.#translateError(err, \"write\");\n }\n }\n\n async recall(query: string, ctx: MemoryContext, k = 10): Promise<MemoryFact[]> {\n if (k <= 0) return [];\n this.#breaker.ensureClosed(\"recall\");\n try {\n const opts = toMem0Options(ctx);\n const resp = await this.#sdk().search(query, {\n // Read filter: cross-session recall keyed by user_id (Hermes pattern).\n ...(opts.user_id !== undefined ? { filters: { user_id: opts.user_id } } : {}),\n topK: k,\n rerank: true,\n });\n this.#breaker.recordSuccess();\n const list = Array.isArray(resp) ? resp : ((resp as { results?: unknown[] }).results ?? []);\n return (list as Array<Record<string, unknown>>).map((r) => ({\n id: mkMemoryId(ADAPTER_ID, String(r.id ?? \"\")),\n content: String(r.memory ?? r.content ?? \"\"),\n ...(typeof r.score === \"number\" ? { score: r.score as number } : {}),\n ...(r.createdAt !== undefined ? { createdAt: String(r.createdAt) } : {}),\n ...(r.metadata !== undefined ? { metadata: r.metadata as Record<string, unknown> } : {}),\n }));\n } catch (err) {\n throw this.#translateError(err, \"recall\");\n }\n }\n\n async delete(id: MemoryId): Promise<void> {\n this.#breaker.ensureClosed(\"delete\");\n const rawId = extractRawId(id, ADAPTER_ID);\n try {\n await this.#sdk().delete(rawId);\n this.#breaker.recordSuccess();\n } catch (err) {\n throw this.#translateError(err, \"delete\");\n }\n }\n\n async history(id: MemoryId): Promise<MemoryRevision[]> {\n this.#breaker.ensureClosed(\"history\");\n const rawId = extractRawId(id, ADAPTER_ID);\n try {\n const rows = await this.#sdk().history(rawId);\n this.#breaker.recordSuccess();\n return rows.map((r, i) => {\n const u = (r as unknown as { updatedAt?: unknown }).updatedAt;\n const changedAt =\n u instanceof Date\n ? u.toISOString()\n : typeof u === \"string\"\n ? u\n : new Date().toISOString();\n return {\n id: mkMemoryId(ADAPTER_ID, r.memoryId ?? rawId),\n content: String(r.newMemory ?? r.oldMemory ?? \"\"),\n version: i + 1,\n changedAt,\n };\n });\n } catch (err) {\n throw this.#translateError(err, \"history\");\n }\n }\n\n getToolSchemas(): MemoryToolSchema[] {\n return [\n {\n name: \"memory_write\",\n description:\n \"Persist a turn to Mem0 long-term memory. Server-side extraction populates facts.\",\n parameters: {\n type: \"object\",\n properties: {\n content: { type: \"string\", description: \"Turn text to persist.\" },\n },\n required: [\"content\"],\n },\n },\n {\n name: \"memory_recall\",\n description: \"Retrieve up to k semantically relevant facts from Mem0 (server-side rerank).\",\n parameters: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n k: { type: \"integer\", minimum: 1, maximum: 50 },\n },\n required: [\"query\"],\n },\n },\n {\n name: \"memory_history\",\n description:\n \"Retrieve the version history of a specific memory by id. Mem0-unique capability — \" +\n \"shows how a fact has evolved over time (e.g., user changed preferences).\",\n parameters: {\n type: \"object\",\n properties: { memoryId: { type: \"string\" } },\n required: [\"memoryId\"],\n },\n },\n ];\n }\n\n async handleToolCall(\n name: string,\n args: Record<string, unknown>,\n ctx: MemoryContext,\n ): Promise<string> {\n if (name === \"memory_write\") {\n const id = await this.write(String(args.content ?? \"\"), ctx);\n return JSON.stringify({ ok: true, id });\n }\n if (name === \"memory_recall\") {\n const k = typeof args.k === \"number\" ? args.k : 10;\n const facts = await this.recall(String(args.query ?? \"\"), ctx, k);\n return JSON.stringify({ ok: true, facts });\n }\n if (name === \"memory_history\") {\n const rawId = String(args.memoryId ?? \"\");\n const wrapped = rawId.startsWith(`${ADAPTER_ID}:`)\n ? (rawId as MemoryId)\n : mkMemoryId(ADAPTER_ID, rawId);\n const revisions = await this.history(wrapped);\n return JSON.stringify({ ok: true, revisions });\n }\n throw new MemoryAdapterError(`Unknown tool name: ${name}`, {\n adapterId: ADAPTER_ID,\n code: \"invalid_input\",\n });\n }\n\n async shutdown(): Promise<void> {\n this.#client = undefined;\n }\n\n /** Test-only: inspect breaker state. @internal */\n _breakerState(): { failures: number; isOpen: boolean; openUntil: number } {\n return this.#breaker.state();\n }\n\n // ── helpers ────────────────────────────────────────────────────────\n\n #toMessages(\n content: string | MemoryTurnMessage[],\n ): Array<{ role: \"user\" | \"assistant\"; content: string }> {\n if (typeof content === \"string\") {\n return content.trim().length === 0 ? [] : [{ role: \"user\", content }];\n }\n // Mem0 SDK accepts only user/assistant roles. System turns are merged\n // into user content with a \"[system] \" prefix.\n return content\n .filter((m) => m.content.trim().length > 0)\n .map((m) =>\n m.role === \"system\"\n ? { role: \"user\" as const, content: `[system] ${m.content}` }\n : { role: m.role, content: m.content },\n );\n }\n\n #sdk(): MemoryClient {\n if (this.#client === undefined) {\n this.#client = new MemoryClient({\n apiKey: this.#opts.apiKey,\n ...(this.#opts.host !== undefined ? { host: this.#opts.host } : {}),\n ...(this.#opts.organizationId !== undefined\n ? { organizationId: this.#opts.organizationId }\n : {}),\n ...(this.#opts.projectId !== undefined ? { projectId: this.#opts.projectId } : {}),\n });\n }\n return this.#client;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: error-translation ladder maps provider error classes to typed codes + breaker policy (EC-K: 429 does NOT trip); inlining keeps the policy decisions in one place.\n #translateError(err: unknown, op: string): MemoryAdapterError {\n if (err instanceof MemoryAdapterError) {\n if (err.code === \"rate_limited\") {\n // EC-K: do NOT trip breaker on rate limit.\n } else if (\n err.code === \"auth_failed\" ||\n err.code === \"not_found\" ||\n err.code === \"invalid_input\"\n ) {\n // No trip — these are caller-side or stateful conditions.\n } else {\n this.#breaker.recordFailure();\n }\n return err;\n }\n const status =\n (err as { status?: number; statusCode?: number; response?: { status?: number } })?.status ??\n (err as { statusCode?: number })?.statusCode ??\n (err as { response?: { status?: number } })?.response?.status;\n const message = (err as Error)?.message ?? String(err);\n if (status === 401 || status === 403) {\n return new MemoryAdapterError(`Mem0 auth failed (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"auth_failed\",\n cause: err,\n });\n }\n if (status === 429) {\n // EC-K: rate-limited; do NOT increment breaker.\n return new MemoryAdapterError(`Mem0 rate limited (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"rate_limited\",\n cause: err,\n });\n }\n if (status === 404) {\n return new MemoryAdapterError(`Mem0 not found (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"not_found\",\n cause: err,\n });\n }\n if (typeof status === \"number\" && status >= 500) {\n this.#breaker.recordFailure();\n return new MemoryAdapterError(`Mem0 server error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"network\",\n cause: err,\n });\n }\n if (status === undefined && message.toLowerCase().includes(\"network\")) {\n this.#breaker.recordFailure();\n return new MemoryAdapterError(`Mem0 network error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"network\",\n cause: err,\n });\n }\n return new MemoryAdapterError(`Mem0 error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"unknown\",\n cause: err,\n });\n }\n}\n","import { Plugin } from \"@theokit/sdk\";\n\nimport { Mem0Adapter, type Mem0AdapterOptions } from \"./adapter.js\";\n\nexport type { Mem0AdapterOptions } from \"./adapter.js\";\n\n/** Build a `Plugin { kind: \"memory\" }`. @public */\nexport function mem0Memory(options: Mem0AdapterOptions): Plugin {\n return Plugin.create({\n name: \"@theokit/memory-mem0\",\n version: \"0.1.0\",\n kind: \"memory\",\n createProvider: () => new Mem0Adapter(options),\n });\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -38,15 +38,6 @@ interface Mem0AdapterOptions {
|
|
|
38
38
|
breaker?: CircuitBreakerOptions;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
/**
|
|
42
|
-
* `@theokit/memory-mem0` — Mem0 cloud memory adapter for @theokit/sdk.
|
|
43
|
-
*
|
|
44
|
-
* Cloud-only per ADR D148. Wraps `mem0ai` `MemoryClient`. Unique
|
|
45
|
-
* capability among `@theokit/memory-*` adapters: `history(id)`.
|
|
46
|
-
*
|
|
47
|
-
* @public
|
|
48
|
-
*/
|
|
49
|
-
|
|
50
41
|
/** Build a `Plugin { kind: "memory" }`. @public */
|
|
51
42
|
declare function mem0Memory(options: Mem0AdapterOptions): Plugin;
|
|
52
43
|
|
package/dist/index.d.ts
CHANGED
|
@@ -38,15 +38,6 @@ interface Mem0AdapterOptions {
|
|
|
38
38
|
breaker?: CircuitBreakerOptions;
|
|
39
39
|
}
|
|
40
40
|
|
|
41
|
-
/**
|
|
42
|
-
* `@theokit/memory-mem0` — Mem0 cloud memory adapter for @theokit/sdk.
|
|
43
|
-
*
|
|
44
|
-
* Cloud-only per ADR D148. Wraps `mem0ai` `MemoryClient`. Unique
|
|
45
|
-
* capability among `@theokit/memory-*` adapters: `history(id)`.
|
|
46
|
-
*
|
|
47
|
-
* @public
|
|
48
|
-
*/
|
|
49
|
-
|
|
50
41
|
/** Build a `Plugin { kind: "memory" }`. @public */
|
|
51
42
|
declare function mem0Memory(options: Mem0AdapterOptions): Plugin;
|
|
52
43
|
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Plugin, MemoryAdapterError, mkMemoryId, extractRawId } from '@theokit/sdk';
|
|
2
2
|
import MemoryClient from 'mem0ai';
|
|
3
3
|
|
|
4
4
|
// src/index.ts
|
|
@@ -296,7 +296,7 @@ var Mem0Adapter = class {
|
|
|
296
296
|
|
|
297
297
|
// src/index.ts
|
|
298
298
|
function mem0Memory(options) {
|
|
299
|
-
return
|
|
299
|
+
return Plugin.create({
|
|
300
300
|
name: "@theokit/memory-mem0",
|
|
301
301
|
version: "0.1.0",
|
|
302
302
|
kind: "memory",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/circuit-breaker.ts","../src/translate.ts","../src/adapter.ts","../src/index.ts"],"names":["ADAPTER_ID","MemoryAdapterError"],"mappings":";;;;AAYA,IAAM,UAAA,GAAa,MAAA;AAOZ,IAAM,iBAAN,MAAqB;AAAA,EACjB,SAAA;AAAA,EACA,UAAA;AAAA,EACT,SAAA,GAAY,CAAA;AAAA,EACZ,UAAA,GAAa,CAAA;AAAA,EAEb,WAAA,CAAY,IAAA,GAA8B,EAAC,EAAG;AAC5C,IAAA,IAAA,CAAK,SAAA,GAAY,KAAK,SAAA,IAAa,CAAA;AACnC,IAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,UAAA,IAAc,CAAA,GAAI,EAAA,GAAK,GAAA;AAAA,EAChD;AAAA;AAAA,EAGA,aAAa,EAAA,EAAkB;AAC7B,IAAA,IAAI,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,UAAA,EAAY;AAChC,MAAA,MAAM,WAAA,GAAc,KAAK,IAAA,CAAA,CAAM,IAAA,CAAK,aAAa,IAAA,CAAK,GAAA,MAAS,GAAI,CAAA;AACnE,MAAA,MAAM,IAAI,kBAAA;AAAA,QACR,CAAA,2BAAA,EAA8B,EAAE,CAAA,GAAA,EAAM,WAAW,CAAA,qBAAA,CAAA;AAAA,QACjD,EAAE,SAAA,EAAW,UAAA,EAAY,IAAA,EAAM,cAAA;AAAe,OAChD;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGA,aAAA,GAAsB;AACpB,IAAA,IAAA,CAAK,SAAA,IAAa,CAAA;AAClB,IAAA,IAAI,IAAA,CAAK,SAAA,IAAa,IAAA,CAAK,SAAA,EAAW;AACpC,MAAA,IAAA,CAAK,UAAA,GAAa,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,UAAA;AAAA,IACtC;AAAA,EACF;AAAA;AAAA,EAGA,aAAA,GAAsB;AACpB,IAAA,IAAA,CAAK,SAAA,GAAY,CAAA;AACjB,IAAA,IAAA,CAAK,UAAA,GAAa,CAAA;AAAA,EACpB;AAAA;AAAA,EAGA,KAAA,GAAkE;AAChE,IAAA,OAAO;AAAA,MACL,UAAU,IAAA,CAAK,SAAA;AAAA,MACf,MAAA,EAAQ,IAAA,CAAK,GAAA,EAAI,GAAI,IAAA,CAAK,UAAA;AAAA,MAC1B,WAAW,IAAA,CAAK;AAAA,KAClB;AAAA,EACF;AACF,CAAA;;;AC3CO,SAAS,cAAc,GAAA,EAAiC;AAC7D,EAAA,MAAM,GAAA,GAAmB,EAAE,OAAA,EAAS,GAAA,CAAI,MAAA,EAAO;AAC/C,EAAA,IAAI,GAAA,CAAI,OAAA,KAAY,MAAA,EAAW,GAAA,CAAI,WAAW,GAAA,CAAI,OAAA;AAClD,EAAA,IAAI,GAAA,CAAI,SAAA,KAAc,MAAA,EAAW,GAAA,CAAI,SAAS,GAAA,CAAI,SAAA;AAClD,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAW,GAAA,CAAI,SAAS,GAAA,CAAI,QAAA;AACjD,EAAA,IAAI,GAAA,CAAI,IAAA,KAAS,MAAA,EAAW,GAAA,CAAI,aAAa,GAAA,CAAI,IAAA;AACjD,EAAA,IAAI,GAAA,CAAI,QAAA,KAAa,MAAA,EAAW,GAAA,CAAI,WAAW,GAAA,CAAI,QAAA;AACnD,EAAA,OAAO,GAAA;AACT;;;ACcA,IAAMA,WAAAA,GAAa,MAAA;AAEnB,IAAM,IAAA,GAAkC;AAAA,EACtC,OAAA,EAAS,IAAA;AAAA;AAAA,EACT,QAAA,EAAU,IAAA;AAAA,EACV,OAAA,EAAS,IAAA;AAAA,EACT,SAAA,EAAW,KAAA;AAAA,EACX,WAAA,EAAa,IAAA;AAAA,EACb,QAAA,EAAU;AACZ,CAAA;AAGO,IAAM,cAAN,MAA2C;AAAA,EACvC,EAAA,GAAKA,WAAAA;AAAA,EACL,YAAA,GAAe,IAAA;AAAA,EACf,KAAA;AAAA,EACA,QAAA;AAAA,EACT,OAAA;AAAA,EAEA,YAAY,IAAA,EAA0B;AACpC,IAAA,IAAA,CAAK,KAAA,GAAQ,IAAA;AACb,IAAA,IAAA,CAAK,QAAA,GAAW,IAAI,cAAA,CAAe,IAAA,CAAK,OAAO,CAAA;AAAA,EACjD;AAAA,EAEA,WAAA,GAAuB;AACrB,IAAA,OAAO,OAAO,KAAK,KAAA,CAAM,MAAA,KAAW,YAAY,IAAA,CAAK,KAAA,CAAM,OAAO,MAAA,GAAS,CAAA;AAAA,EAC7E;AAAA,EAEA,MAAM,UAAA,GAA4B;AAAA,EAElC;AAAA,EAEA,MAAM,KAAA,CAAM,OAAA,EAAuC,GAAA,EAAuC;AACxF,IAAA,IAAA,CAAK,QAAA,CAAS,aAAa,OAAO,CAAA;AAClC,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,OAAO,CAAA;AACzC,IAAA,IAAI,QAAA,CAAS,WAAW,CAAA,EAAG;AACzB,MAAA,MAAM,IAAIC,mBAAmB,uBAAA,EAAyB;AAAA,QACpD,SAAA,EAAWD,WAAAA;AAAA,QACX,IAAA,EAAM;AAAA,OACP,CAAA;AAAA,IACH;AACA,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,cAAc,GAAG,CAAA;AAC9B,MAAA,MAAM,OAAO,MAAM,IAAA,CAAK,MAAK,CAAE,GAAA,CAAI,UAAU,IAAI,CAAA;AACjD,MAAA,IAAA,CAAK,SAAS,aAAA,EAAc;AAC5B,MAAA,MAAM,KAAA,GAAQ,KAAK,CAAC,CAAA;AACpB,MAAA,MAAM,QAAQ,KAAA,EAAO,EAAA,IAAM,CAAA,KAAA,EAAQ,IAAA,CAAK,KAAK,CAAA,CAAA;AAC7C,MAAA,OAAO,UAAA,CAAWA,aAAY,KAAK,CAAA;AAAA,IACrC,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,GAAA,EAAK,OAAO,CAAA;AAAA,IACzC;AAAA,EACF;AAAA,EAEA,MAAM,MAAA,CAAO,KAAA,EAAe,GAAA,EAAoB,IAAI,EAAA,EAA2B;AAC7E,IAAA,IAAI,CAAA,IAAK,CAAA,EAAG,OAAO,EAAC;AACpB,IAAA,IAAA,CAAK,QAAA,CAAS,aAAa,QAAQ,CAAA;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,GAAO,cAAc,GAAG,CAAA;AAC9B,MAAA,MAAM,OAAO,MAAM,IAAA,CAAK,IAAA,EAAK,CAAE,OAAO,KAAA,EAAO;AAAA;AAAA,QAE3C,GAAI,IAAA,CAAK,OAAA,KAAY,KAAA,CAAA,GAAY,EAAE,OAAA,EAAS,EAAE,OAAA,EAAS,IAAA,CAAK,OAAA,EAAQ,EAAE,GAAI,EAAC;AAAA,QAC3E,IAAA,EAAM,CAAA;AAAA,QACN,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,IAAA,CAAK,SAAS,aAAA,EAAc;AAC5B,MAAA,MAAM,IAAA,GAAO,MAAM,OAAA,CAAQ,IAAI,IAAI,IAAA,GAAS,IAAA,CAAiC,WAAW,EAAC;AACzF,MAAA,OAAQ,IAAA,CAAwC,GAAA,CAAI,CAAC,CAAA,MAAO;AAAA,QAC1D,IAAI,UAAA,CAAWA,WAAAA,EAAY,OAAO,CAAA,CAAE,EAAA,IAAM,EAAE,CAAC,CAAA;AAAA,QAC7C,SAAS,MAAA,CAAO,CAAA,CAAE,MAAA,IAAU,CAAA,CAAE,WAAW,EAAE,CAAA;AAAA,QAC3C,GAAI,OAAO,CAAA,CAAE,KAAA,KAAU,QAAA,GAAW,EAAE,KAAA,EAAO,CAAA,CAAE,KAAA,EAAgB,GAAI,EAAC;AAAA,QAClE,GAAI,CAAA,CAAE,SAAA,KAAc,KAAA,CAAA,GAAY,EAAE,SAAA,EAAW,MAAA,CAAO,CAAA,CAAE,SAAS,CAAA,EAAE,GAAI,EAAC;AAAA,QACtE,GAAI,EAAE,QAAA,KAAa,KAAA,CAAA,GAAY,EAAE,QAAA,EAAU,CAAA,CAAE,QAAA,EAAoC,GAAI;AAAC,OACxF,CAAE,CAAA;AAAA,IACJ,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,GAAA,EAAK,QAAQ,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,MAAM,OAAO,EAAA,EAA6B;AACxC,IAAA,IAAA,CAAK,QAAA,CAAS,aAAa,QAAQ,CAAA;AACnC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,EAAA,EAAIA,WAAU,CAAA;AACzC,IAAA,IAAI;AACF,MAAA,MAAM,IAAA,CAAK,IAAA,EAAK,CAAE,MAAA,CAAO,KAAK,CAAA;AAC9B,MAAA,IAAA,CAAK,SAAS,aAAA,EAAc;AAAA,IAC9B,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,GAAA,EAAK,QAAQ,CAAA;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,MAAM,QAAQ,EAAA,EAAyC;AACrD,IAAA,IAAA,CAAK,QAAA,CAAS,aAAa,SAAS,CAAA;AACpC,IAAA,MAAM,KAAA,GAAQ,YAAA,CAAa,EAAA,EAAIA,WAAU,CAAA;AACzC,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,MAAM,IAAA,CAAK,IAAA,EAAK,CAAE,QAAQ,KAAK,CAAA;AAC5C,MAAA,IAAA,CAAK,SAAS,aAAA,EAAc;AAC5B,MAAA,OAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACxB,QAAA,MAAM,IAAK,CAAA,CAAyC,SAAA;AACpD,QAAA,MAAM,SAAA,GACJ,CAAA,YAAa,IAAA,GACT,CAAA,CAAE,WAAA,EAAY,GACd,OAAO,CAAA,KAAM,QAAA,GACX,CAAA,GAAA,iBACA,IAAI,IAAA,IAAO,WAAA,EAAY;AAC/B,QAAA,OAAO;AAAA,UACL,EAAA,EAAI,UAAA,CAAWA,WAAAA,EAAY,CAAA,CAAE,YAAY,KAAK,CAAA;AAAA,UAC9C,SAAS,MAAA,CAAO,CAAA,CAAE,SAAA,IAAa,CAAA,CAAE,aAAa,EAAE,CAAA;AAAA,UAChD,SAAS,CAAA,GAAI,CAAA;AAAA,UACb;AAAA,SACF;AAAA,MACF,CAAC,CAAA;AAAA,IACH,SAAS,GAAA,EAAK;AACZ,MAAA,MAAM,IAAA,CAAK,eAAA,CAAgB,GAAA,EAAK,SAAS,CAAA;AAAA,IAC3C;AAAA,EACF;AAAA,EAEA,cAAA,GAAqC;AACnC,IAAA,OAAO;AAAA,MACL;AAAA,QACE,IAAA,EAAM,cAAA;AAAA,QACN,WAAA,EACE,kFAAA;AAAA,QACF,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,aAAa,uBAAA;AAAwB,WAClE;AAAA,UACA,QAAA,EAAU,CAAC,SAAS;AAAA;AACtB,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,eAAA;AAAA,QACN,WAAA,EAAa,8EAAA;AAAA,QACb,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,UAAA,EAAY;AAAA,YACV,KAAA,EAAO,EAAE,IAAA,EAAM,QAAA,EAAS;AAAA,YACxB,GAAG,EAAE,IAAA,EAAM,WAAW,OAAA,EAAS,CAAA,EAAG,SAAS,EAAA;AAAG,WAChD;AAAA,UACA,QAAA,EAAU,CAAC,OAAO;AAAA;AACpB,OACF;AAAA,MACA;AAAA,QACE,IAAA,EAAM,gBAAA;AAAA,QACN,WAAA,EACE,iKAAA;AAAA,QAEF,UAAA,EAAY;AAAA,UACV,IAAA,EAAM,QAAA;AAAA,UACN,YAAY,EAAE,QAAA,EAAU,EAAE,IAAA,EAAM,UAAS,EAAE;AAAA,UAC3C,QAAA,EAAU,CAAC,UAAU;AAAA;AACvB;AACF,KACF;AAAA,EACF;AAAA,EAEA,MAAM,cAAA,CACJ,IAAA,EACA,IAAA,EACA,GAAA,EACiB;AACjB,IAAA,IAAI,SAAS,cAAA,EAAgB;AAC3B,MAAA,MAAM,EAAA,GAAK,MAAM,IAAA,CAAK,KAAA,CAAM,OAAO,IAAA,CAAK,OAAA,IAAW,EAAE,CAAA,EAAG,GAAG,CAAA;AAC3D,MAAA,OAAO,KAAK,SAAA,CAAU,EAAE,EAAA,EAAI,IAAA,EAAM,IAAI,CAAA;AAAA,IACxC;AACA,IAAA,IAAI,SAAS,eAAA,EAAiB;AAC5B,MAAA,MAAM,IAAI,OAAO,IAAA,CAAK,CAAA,KAAM,QAAA,GAAW,KAAK,CAAA,GAAI,EAAA;AAChD,MAAA,MAAM,KAAA,GAAQ,MAAM,IAAA,CAAK,MAAA,CAAO,MAAA,CAAO,KAAK,KAAA,IAAS,EAAE,CAAA,EAAG,GAAA,EAAK,CAAC,CAAA;AAChE,MAAA,OAAO,KAAK,SAAA,CAAU,EAAE,EAAA,EAAI,IAAA,EAAM,OAAO,CAAA;AAAA,IAC3C;AACA,IAAA,IAAI,SAAS,gBAAA,EAAkB;AAC7B,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,IAAA,CAAK,QAAA,IAAY,EAAE,CAAA;AACxC,MAAA,MAAM,OAAA,GAAU,KAAA,CAAM,UAAA,CAAW,CAAA,EAAGA,WAAU,GAAG,CAAA,GAC5C,KAAA,GACD,UAAA,CAAWA,WAAAA,EAAY,KAAK,CAAA;AAChC,MAAA,MAAM,SAAA,GAAY,MAAM,IAAA,CAAK,OAAA,CAAQ,OAAO,CAAA;AAC5C,MAAA,OAAO,KAAK,SAAA,CAAU,EAAE,EAAA,EAAI,IAAA,EAAM,WAAW,CAAA;AAAA,IAC/C;AACA,IAAA,MAAM,IAAIC,kBAAAA,CAAmB,CAAA,mBAAA,EAAsB,IAAI,CAAA,CAAA,EAAI;AAAA,MACzD,SAAA,EAAWD,WAAAA;AAAA,MACX,IAAA,EAAM;AAAA,KACP,CAAA;AAAA,EACH;AAAA,EAEA,MAAM,QAAA,GAA0B;AAC9B,IAAA,IAAA,CAAK,OAAA,GAAU,MAAA;AAAA,EACjB;AAAA;AAAA,EAGA,aAAA,GAA0E;AACxE,IAAA,OAAO,IAAA,CAAK,SAAS,KAAA,EAAM;AAAA,EAC7B;AAAA;AAAA,EAIA,YACE,OAAA,EACwD;AACxD,IAAA,IAAI,OAAO,YAAY,QAAA,EAAU;AAC/B,MAAA,OAAO,OAAA,CAAQ,IAAA,EAAK,CAAE,MAAA,KAAW,CAAA,GAAI,EAAC,GAAI,CAAC,EAAE,IAAA,EAAM,MAAA,EAAQ,OAAA,EAAS,CAAA;AAAA,IACtE;AAGA,IAAA,OAAO,OAAA,CACJ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,IAAA,EAAK,CAAE,MAAA,GAAS,CAAC,CAAA,CACzC,GAAA;AAAA,MAAI,CAAC,MACJ,CAAA,CAAE,IAAA,KAAS,WACP,EAAE,IAAA,EAAM,QAAiB,OAAA,EAAS,CAAA,SAAA,EAAY,EAAE,OAAO,CAAA,CAAA,KACvD,EAAE,IAAA,EAAM,EAAE,IAAA,EAAM,OAAA,EAAS,EAAE,OAAA;AAAQ,KACzC;AAAA,EACJ;AAAA,EAEA,IAAA,GAAqB;AACnB,IAAA,IAAI,IAAA,CAAK,YAAY,MAAA,EAAW;AAC9B,MAAA,IAAA,CAAK,OAAA,GAAU,IAAI,YAAA,CAAa;AAAA,QAC9B,MAAA,EAAQ,KAAK,KAAA,CAAM,MAAA;AAAA,QACnB,GAAI,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,IAAA,CAAK,KAAA,CAAM,IAAA,EAAK,GAAI,EAAC;AAAA,QACjE,GAAI,IAAA,CAAK,KAAA,CAAM,cAAA,KAAmB,MAAA,GAC9B,EAAE,cAAA,EAAgB,IAAA,CAAK,KAAA,CAAM,cAAA,EAAe,GAC5C,EAAC;AAAA,QACL,GAAI,IAAA,CAAK,KAAA,CAAM,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,IAAA,CAAK,KAAA,CAAM,SAAA,EAAU,GAAI;AAAC,OACjF,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAA,CAAK,OAAA;AAAA,EACd;AAAA;AAAA,EAGA,eAAA,CAAgB,KAAc,EAAA,EAAgC;AAC5D,IAAA,IAAI,eAAeC,kBAAAA,EAAoB;AACrC,MAAA,IAAI,GAAA,CAAI,SAAS,cAAA,EAAgB,CAEjC,MAAA,IACE,IAAI,IAAA,KAAS,aAAA,IACb,IAAI,IAAA,KAAS,WAAA,IACb,GAAA,CAAI,IAAA,KAAS,eAAA,EACb,CAEF,MAAO;AACL,QAAA,IAAA,CAAK,SAAS,aAAA,EAAc;AAAA,MAC9B;AACA,MAAA,OAAO,GAAA;AAAA,IACT;AACA,IAAA,MAAM,SACH,GAAA,EAAkF,MAAA,IAClF,GAAA,EAAiC,UAAA,IACjC,KAA4C,QAAA,EAAU,MAAA;AACzD,IAAA,MAAM,OAAA,GAAW,GAAA,EAAe,OAAA,IAAW,MAAA,CAAO,GAAG,CAAA;AACrD,IAAA,IAAI,MAAA,KAAW,GAAA,IAAO,MAAA,KAAW,GAAA,EAAK;AACpC,MAAA,OAAO,IAAIA,kBAAAA,CAAmB,CAAA,kBAAA,EAAqB,EAAE,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI;AAAA,QACpE,SAAA,EAAWD,WAAAA;AAAA,QACX,IAAA,EAAM,aAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AACA,IAAA,IAAI,WAAW,GAAA,EAAK;AAElB,MAAA,OAAO,IAAIC,kBAAAA,CAAmB,CAAA,mBAAA,EAAsB,EAAE,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI;AAAA,QACrE,SAAA,EAAWD,WAAAA;AAAA,QACX,IAAA,EAAM,cAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AACA,IAAA,IAAI,WAAW,GAAA,EAAK;AAClB,MAAA,OAAO,IAAIC,kBAAAA,CAAmB,CAAA,gBAAA,EAAmB,EAAE,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI;AAAA,QAClE,SAAA,EAAWD,WAAAA;AAAA,QACX,IAAA,EAAM,WAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AACA,IAAA,IAAI,OAAO,MAAA,KAAW,QAAA,IAAY,MAAA,IAAU,GAAA,EAAK;AAC/C,MAAA,IAAA,CAAK,SAAS,aAAA,EAAc;AAC5B,MAAA,OAAO,IAAIC,kBAAAA,CAAmB,CAAA,mBAAA,EAAsB,EAAE,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI;AAAA,QACrE,SAAA,EAAWD,WAAAA;AAAA,QACX,IAAA,EAAM,SAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AACA,IAAA,IAAI,WAAW,MAAA,IAAa,OAAA,CAAQ,aAAY,CAAE,QAAA,CAAS,SAAS,CAAA,EAAG;AACrE,MAAA,IAAA,CAAK,SAAS,aAAA,EAAc;AAC5B,MAAA,OAAO,IAAIC,kBAAAA,CAAmB,CAAA,oBAAA,EAAuB,EAAE,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI;AAAA,QACtE,SAAA,EAAWD,WAAAA;AAAA,QACX,IAAA,EAAM,SAAA;AAAA,QACN,KAAA,EAAO;AAAA,OACR,CAAA;AAAA,IACH;AACA,IAAA,OAAO,IAAIC,kBAAAA,CAAmB,CAAA,YAAA,EAAe,EAAE,CAAA,GAAA,EAAM,OAAO,CAAA,CAAA,EAAI;AAAA,MAC9D,SAAA,EAAWD,WAAAA;AAAA,MACX,IAAA,EAAM,SAAA;AAAA,MACN,KAAA,EAAO;AAAA,KACR,CAAA;AAAA,EACH;AACF,CAAA;;;AC3TO,SAAS,WAAW,OAAA,EAAqC;AAC9D,EAAA,OAAO,YAAA,CAAa;AAAA,IAClB,IAAA,EAAM,sBAAA;AAAA,IACN,OAAA,EAAS,OAAA;AAAA,IACT,IAAA,EAAM,QAAA;AAAA,IACN,cAAA,EAAgB,MAAM,IAAI,WAAA,CAAY,OAAO;AAAA,GAC9C,CAAA;AACH","file":"index.js","sourcesContent":["/**\n * In-memory circuit breaker for Mem0Adapter (T5.1, EC-K).\n *\n * Trips after `threshold` consecutive 5xx-class failures. 429 / 401 /\n * 404 / invalid_input do NOT count toward the threshold — rate limits\n * are a caller-pace signal, not a provider-down signal (EC-K).\n *\n * @internal\n */\n\nimport { MemoryAdapterError } from \"@theokit/sdk\";\n\nconst ADAPTER_ID = \"mem0\";\n\nexport interface CircuitBreakerOptions {\n threshold?: number;\n cooldownMs?: number;\n}\n\nexport class CircuitBreaker {\n readonly threshold: number;\n readonly cooldownMs: number;\n #failures = 0;\n #openUntil = 0;\n\n constructor(opts: CircuitBreakerOptions = {}) {\n this.threshold = opts.threshold ?? 5;\n this.cooldownMs = opts.cooldownMs ?? 2 * 60 * 1000;\n }\n\n /** Throws `MemoryAdapterError(code: \"rate_limited\")` if breaker is open. */\n ensureClosed(op: string): void {\n if (Date.now() < this.#openUntil) {\n const secondsLeft = Math.ceil((this.#openUntil - Date.now()) / 1000);\n throw new MemoryAdapterError(\n `Mem0 circuit breaker open (${op}): ${secondsLeft}s cooldown remaining.`,\n { adapterId: ADAPTER_ID, code: \"rate_limited\" },\n );\n }\n }\n\n /** Increment failure counter. Trips when threshold reached. Only call for 5xx-class errors. */\n recordFailure(): void {\n this.#failures += 1;\n if (this.#failures >= this.threshold) {\n this.#openUntil = Date.now() + this.cooldownMs;\n }\n }\n\n /** Reset on first success — closes the breaker (EC-K). */\n recordSuccess(): void {\n this.#failures = 0;\n this.#openUntil = 0;\n }\n\n /** Test-only inspector. @internal */\n state(): { failures: number; isOpen: boolean; openUntil: number } {\n return {\n failures: this.#failures,\n isOpen: Date.now() < this.#openUntil,\n openUntil: this.#openUntil,\n };\n }\n}\n","/**\n * `MemoryContext` → Mem0 add/search options translation (T5.1).\n *\n * Mem0 keeps `user_id`, `agent_id`, `app_id`, `run_id` orthogonal —\n * we map each `MemoryContext` field onto its native primitive.\n *\n * @internal\n */\n\nimport type { MemoryContext } from \"@theokit/sdk\";\n\ninterface Mem0Options {\n user_id?: string;\n agent_id?: string;\n run_id?: string;\n app_id?: string;\n categories?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport function toMem0Options(ctx: MemoryContext): Mem0Options {\n const out: Mem0Options = { user_id: ctx.userId };\n if (ctx.agentId !== undefined) out.agent_id = ctx.agentId;\n if (ctx.sessionId !== undefined) out.run_id = ctx.sessionId;\n if (ctx.tenantId !== undefined) out.app_id = ctx.tenantId;\n if (ctx.tags !== undefined) out.categories = ctx.tags;\n if (ctx.metadata !== undefined) out.metadata = ctx.metadata;\n return out;\n}\n","/**\n * Mem0Adapter — `@theokit/memory-mem0` core (T5.1, ADR D141 / D148).\n *\n * Wraps `mem0ai` `MemoryClient` (cloud-only per D148). Implements\n * `MemoryAdapter` with the unique `history(id)` capability — the only\n * adapter today that exposes per-memory versioning.\n *\n * Includes a circuit breaker (EC-K: 5xx counts; 429 does NOT trip).\n *\n * @public\n */\n\nimport {\n extractRawId,\n type MemoryAdapter,\n type MemoryAdapterCapabilities,\n MemoryAdapterError,\n type MemoryContext,\n type MemoryFact,\n type MemoryId,\n type MemoryRevision,\n type MemoryToolSchema,\n type MemoryTurnMessage,\n mkMemoryId,\n} from \"@theokit/sdk\";\nimport MemoryClient from \"mem0ai\";\n\nimport { CircuitBreaker, type CircuitBreakerOptions } from \"./circuit-breaker.js\";\nimport { toMem0Options } from \"./translate.js\";\n\n/** Configuration accepted by the `mem0Memory(...)` factory. @public */\nexport interface Mem0AdapterOptions {\n /** Mem0 API key. Required. */\n apiKey: string;\n /** Override host (default mem0 cloud). */\n host?: string;\n organizationId?: string;\n projectId?: string;\n /** Circuit breaker tuning (EC-K). */\n breaker?: CircuitBreakerOptions;\n}\n\nconst ADAPTER_ID = \"mem0\";\n\nconst CAPS: MemoryAdapterCapabilities = {\n history: true, // ← unique to Mem0\n sessions: true,\n tenancy: true,\n reasoning: false,\n toolSchemas: true,\n prefetch: false,\n};\n\n/** @internal */\nexport class Mem0Adapter implements MemoryAdapter {\n readonly id = ADAPTER_ID;\n readonly capabilities = CAPS;\n readonly #opts: Mem0AdapterOptions;\n readonly #breaker: CircuitBreaker;\n #client?: MemoryClient;\n\n constructor(opts: Mem0AdapterOptions) {\n this.#opts = opts;\n this.#breaker = new CircuitBreaker(opts.breaker);\n }\n\n isAvailable(): boolean {\n return typeof this.#opts.apiKey === \"string\" && this.#opts.apiKey.length > 0;\n }\n\n async initialize(): Promise<void> {\n // Lazy: client constructed on first call.\n }\n\n async write(content: string | MemoryTurnMessage[], ctx: MemoryContext): Promise<MemoryId> {\n this.#breaker.ensureClosed(\"write\");\n const messages = this.#toMessages(content);\n if (messages.length === 0) {\n throw new MemoryAdapterError(\"write: empty messages\", {\n adapterId: ADAPTER_ID,\n code: \"invalid_input\",\n });\n }\n try {\n const opts = toMem0Options(ctx);\n const resp = await this.#sdk().add(messages, opts);\n this.#breaker.recordSuccess();\n const first = resp[0];\n const rawId = first?.id ?? `mem0-${Date.now()}`;\n return mkMemoryId(ADAPTER_ID, rawId);\n } catch (err) {\n throw this.#translateError(err, \"write\");\n }\n }\n\n async recall(query: string, ctx: MemoryContext, k = 10): Promise<MemoryFact[]> {\n if (k <= 0) return [];\n this.#breaker.ensureClosed(\"recall\");\n try {\n const opts = toMem0Options(ctx);\n const resp = await this.#sdk().search(query, {\n // Read filter: cross-session recall keyed by user_id (Hermes pattern).\n ...(opts.user_id !== undefined ? { filters: { user_id: opts.user_id } } : {}),\n topK: k,\n rerank: true,\n });\n this.#breaker.recordSuccess();\n const list = Array.isArray(resp) ? resp : ((resp as { results?: unknown[] }).results ?? []);\n return (list as Array<Record<string, unknown>>).map((r) => ({\n id: mkMemoryId(ADAPTER_ID, String(r.id ?? \"\")),\n content: String(r.memory ?? r.content ?? \"\"),\n ...(typeof r.score === \"number\" ? { score: r.score as number } : {}),\n ...(r.createdAt !== undefined ? { createdAt: String(r.createdAt) } : {}),\n ...(r.metadata !== undefined ? { metadata: r.metadata as Record<string, unknown> } : {}),\n }));\n } catch (err) {\n throw this.#translateError(err, \"recall\");\n }\n }\n\n async delete(id: MemoryId): Promise<void> {\n this.#breaker.ensureClosed(\"delete\");\n const rawId = extractRawId(id, ADAPTER_ID);\n try {\n await this.#sdk().delete(rawId);\n this.#breaker.recordSuccess();\n } catch (err) {\n throw this.#translateError(err, \"delete\");\n }\n }\n\n async history(id: MemoryId): Promise<MemoryRevision[]> {\n this.#breaker.ensureClosed(\"history\");\n const rawId = extractRawId(id, ADAPTER_ID);\n try {\n const rows = await this.#sdk().history(rawId);\n this.#breaker.recordSuccess();\n return rows.map((r, i) => {\n const u = (r as unknown as { updatedAt?: unknown }).updatedAt;\n const changedAt =\n u instanceof Date\n ? u.toISOString()\n : typeof u === \"string\"\n ? u\n : new Date().toISOString();\n return {\n id: mkMemoryId(ADAPTER_ID, r.memoryId ?? rawId),\n content: String(r.newMemory ?? r.oldMemory ?? \"\"),\n version: i + 1,\n changedAt,\n };\n });\n } catch (err) {\n throw this.#translateError(err, \"history\");\n }\n }\n\n getToolSchemas(): MemoryToolSchema[] {\n return [\n {\n name: \"memory_write\",\n description:\n \"Persist a turn to Mem0 long-term memory. Server-side extraction populates facts.\",\n parameters: {\n type: \"object\",\n properties: {\n content: { type: \"string\", description: \"Turn text to persist.\" },\n },\n required: [\"content\"],\n },\n },\n {\n name: \"memory_recall\",\n description: \"Retrieve up to k semantically relevant facts from Mem0 (server-side rerank).\",\n parameters: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n k: { type: \"integer\", minimum: 1, maximum: 50 },\n },\n required: [\"query\"],\n },\n },\n {\n name: \"memory_history\",\n description:\n \"Retrieve the version history of a specific memory by id. Mem0-unique capability — \" +\n \"shows how a fact has evolved over time (e.g., user changed preferences).\",\n parameters: {\n type: \"object\",\n properties: { memoryId: { type: \"string\" } },\n required: [\"memoryId\"],\n },\n },\n ];\n }\n\n async handleToolCall(\n name: string,\n args: Record<string, unknown>,\n ctx: MemoryContext,\n ): Promise<string> {\n if (name === \"memory_write\") {\n const id = await this.write(String(args.content ?? \"\"), ctx);\n return JSON.stringify({ ok: true, id });\n }\n if (name === \"memory_recall\") {\n const k = typeof args.k === \"number\" ? args.k : 10;\n const facts = await this.recall(String(args.query ?? \"\"), ctx, k);\n return JSON.stringify({ ok: true, facts });\n }\n if (name === \"memory_history\") {\n const rawId = String(args.memoryId ?? \"\");\n const wrapped = rawId.startsWith(`${ADAPTER_ID}:`)\n ? (rawId as MemoryId)\n : mkMemoryId(ADAPTER_ID, rawId);\n const revisions = await this.history(wrapped);\n return JSON.stringify({ ok: true, revisions });\n }\n throw new MemoryAdapterError(`Unknown tool name: ${name}`, {\n adapterId: ADAPTER_ID,\n code: \"invalid_input\",\n });\n }\n\n async shutdown(): Promise<void> {\n this.#client = undefined;\n }\n\n /** Test-only: inspect breaker state. @internal */\n _breakerState(): { failures: number; isOpen: boolean; openUntil: number } {\n return this.#breaker.state();\n }\n\n // ── helpers ────────────────────────────────────────────────────────\n\n #toMessages(\n content: string | MemoryTurnMessage[],\n ): Array<{ role: \"user\" | \"assistant\"; content: string }> {\n if (typeof content === \"string\") {\n return content.trim().length === 0 ? [] : [{ role: \"user\", content }];\n }\n // Mem0 SDK accepts only user/assistant roles. System turns are merged\n // into user content with a \"[system] \" prefix.\n return content\n .filter((m) => m.content.trim().length > 0)\n .map((m) =>\n m.role === \"system\"\n ? { role: \"user\" as const, content: `[system] ${m.content}` }\n : { role: m.role, content: m.content },\n );\n }\n\n #sdk(): MemoryClient {\n if (this.#client === undefined) {\n this.#client = new MemoryClient({\n apiKey: this.#opts.apiKey,\n ...(this.#opts.host !== undefined ? { host: this.#opts.host } : {}),\n ...(this.#opts.organizationId !== undefined\n ? { organizationId: this.#opts.organizationId }\n : {}),\n ...(this.#opts.projectId !== undefined ? { projectId: this.#opts.projectId } : {}),\n });\n }\n return this.#client;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: error-translation ladder maps provider error classes to typed codes + breaker policy (EC-K: 429 does NOT trip); inlining keeps the policy decisions in one place.\n #translateError(err: unknown, op: string): MemoryAdapterError {\n if (err instanceof MemoryAdapterError) {\n if (err.code === \"rate_limited\") {\n // EC-K: do NOT trip breaker on rate limit.\n } else if (\n err.code === \"auth_failed\" ||\n err.code === \"not_found\" ||\n err.code === \"invalid_input\"\n ) {\n // No trip — these are caller-side or stateful conditions.\n } else {\n this.#breaker.recordFailure();\n }\n return err;\n }\n const status =\n (err as { status?: number; statusCode?: number; response?: { status?: number } })?.status ??\n (err as { statusCode?: number })?.statusCode ??\n (err as { response?: { status?: number } })?.response?.status;\n const message = (err as Error)?.message ?? String(err);\n if (status === 401 || status === 403) {\n return new MemoryAdapterError(`Mem0 auth failed (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"auth_failed\",\n cause: err,\n });\n }\n if (status === 429) {\n // EC-K: rate-limited; do NOT increment breaker.\n return new MemoryAdapterError(`Mem0 rate limited (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"rate_limited\",\n cause: err,\n });\n }\n if (status === 404) {\n return new MemoryAdapterError(`Mem0 not found (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"not_found\",\n cause: err,\n });\n }\n if (typeof status === \"number\" && status >= 500) {\n this.#breaker.recordFailure();\n return new MemoryAdapterError(`Mem0 server error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"network\",\n cause: err,\n });\n }\n if (status === undefined && message.toLowerCase().includes(\"network\")) {\n this.#breaker.recordFailure();\n return new MemoryAdapterError(`Mem0 network error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"network\",\n cause: err,\n });\n }\n return new MemoryAdapterError(`Mem0 error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"unknown\",\n cause: err,\n });\n }\n}\n","/**\n * `@theokit/memory-mem0` — Mem0 cloud memory adapter for @theokit/sdk.\n *\n * Cloud-only per ADR D148. Wraps `mem0ai` `MemoryClient`. Unique\n * capability among `@theokit/memory-*` adapters: `history(id)`.\n *\n * @public\n */\n\nimport type { Plugin } from \"@theokit/sdk\";\nimport { definePlugin } from \"@theokit/sdk\";\n\nimport { Mem0Adapter, type Mem0AdapterOptions } from \"./adapter.js\";\n\nexport type { Mem0AdapterOptions } from \"./adapter.js\";\n\n/** Build a `Plugin { kind: \"memory\" }`. @public */\nexport function mem0Memory(options: Mem0AdapterOptions): Plugin {\n return definePlugin({\n name: \"@theokit/memory-mem0\",\n version: \"0.1.0\",\n kind: \"memory\",\n createProvider: () => new Mem0Adapter(options),\n });\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/circuit-breaker.ts","../src/translate.ts","../src/adapter.ts","../src/index.ts"],"names":["ADAPTER_ID","MemoryAdapterError"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * In-memory circuit breaker for Mem0Adapter (T5.1, EC-K).\n *\n * Trips after `threshold` consecutive 5xx-class failures. 429 / 401 /\n * 404 / invalid_input do NOT count toward the threshold — rate limits\n * are a caller-pace signal, not a provider-down signal (EC-K).\n *\n * @internal\n */\n\nimport { MemoryAdapterError } from \"@theokit/sdk\";\n\nconst ADAPTER_ID = \"mem0\";\n\nexport interface CircuitBreakerOptions {\n threshold?: number;\n cooldownMs?: number;\n}\n\nexport class CircuitBreaker {\n readonly threshold: number;\n readonly cooldownMs: number;\n #failures = 0;\n #openUntil = 0;\n\n constructor(opts: CircuitBreakerOptions = {}) {\n this.threshold = opts.threshold ?? 5;\n this.cooldownMs = opts.cooldownMs ?? 2 * 60 * 1000;\n }\n\n /** Throws `MemoryAdapterError(code: \"rate_limited\")` if breaker is open. */\n ensureClosed(op: string): void {\n if (Date.now() < this.#openUntil) {\n const secondsLeft = Math.ceil((this.#openUntil - Date.now()) / 1000);\n throw new MemoryAdapterError(\n `Mem0 circuit breaker open (${op}): ${secondsLeft}s cooldown remaining.`,\n { adapterId: ADAPTER_ID, code: \"rate_limited\" },\n );\n }\n }\n\n /** Increment failure counter. Trips when threshold reached. Only call for 5xx-class errors. */\n recordFailure(): void {\n this.#failures += 1;\n if (this.#failures >= this.threshold) {\n this.#openUntil = Date.now() + this.cooldownMs;\n }\n }\n\n /** Reset on first success — closes the breaker (EC-K). */\n recordSuccess(): void {\n this.#failures = 0;\n this.#openUntil = 0;\n }\n\n /** Test-only inspector. @internal */\n state(): { failures: number; isOpen: boolean; openUntil: number } {\n return {\n failures: this.#failures,\n isOpen: Date.now() < this.#openUntil,\n openUntil: this.#openUntil,\n };\n }\n}\n","/**\n * `MemoryContext` → Mem0 add/search options translation (T5.1).\n *\n * Mem0 keeps `user_id`, `agent_id`, `app_id`, `run_id` orthogonal —\n * we map each `MemoryContext` field onto its native primitive.\n *\n * @internal\n */\n\nimport type { MemoryContext } from \"@theokit/sdk\";\n\ninterface Mem0Options {\n user_id?: string;\n agent_id?: string;\n run_id?: string;\n app_id?: string;\n categories?: string[];\n metadata?: Record<string, unknown>;\n}\n\nexport function toMem0Options(ctx: MemoryContext): Mem0Options {\n const out: Mem0Options = { user_id: ctx.userId };\n if (ctx.agentId !== undefined) out.agent_id = ctx.agentId;\n if (ctx.sessionId !== undefined) out.run_id = ctx.sessionId;\n if (ctx.tenantId !== undefined) out.app_id = ctx.tenantId;\n if (ctx.tags !== undefined) out.categories = ctx.tags;\n if (ctx.metadata !== undefined) out.metadata = ctx.metadata;\n return out;\n}\n","/**\n * Mem0Adapter — `@theokit/memory-mem0` core (T5.1, ADR D141 / D148).\n *\n * Wraps `mem0ai` `MemoryClient` (cloud-only per D148). Implements\n * `MemoryAdapter` with the unique `history(id)` capability — the only\n * adapter today that exposes per-memory versioning.\n *\n * Includes a circuit breaker (EC-K: 5xx counts; 429 does NOT trip).\n *\n * @public\n */\n\nimport {\n extractRawId,\n type MemoryAdapter,\n type MemoryAdapterCapabilities,\n MemoryAdapterError,\n type MemoryContext,\n type MemoryFact,\n type MemoryId,\n type MemoryRevision,\n type MemoryToolSchema,\n type MemoryTurnMessage,\n mkMemoryId,\n} from \"@theokit/sdk\";\nimport MemoryClient from \"mem0ai\";\n\nimport { CircuitBreaker, type CircuitBreakerOptions } from \"./circuit-breaker.js\";\nimport { toMem0Options } from \"./translate.js\";\n\n/** Configuration accepted by the `mem0Memory(...)` factory. @public */\nexport interface Mem0AdapterOptions {\n /** Mem0 API key. Required. */\n apiKey: string;\n /** Override host (default mem0 cloud). */\n host?: string;\n organizationId?: string;\n projectId?: string;\n /** Circuit breaker tuning (EC-K). */\n breaker?: CircuitBreakerOptions;\n}\n\nconst ADAPTER_ID = \"mem0\";\n\nconst CAPS: MemoryAdapterCapabilities = {\n history: true, // ← unique to Mem0\n sessions: true,\n tenancy: true,\n reasoning: false,\n toolSchemas: true,\n prefetch: false,\n};\n\n/** @internal */\nexport class Mem0Adapter implements MemoryAdapter {\n readonly id = ADAPTER_ID;\n readonly capabilities = CAPS;\n readonly #opts: Mem0AdapterOptions;\n readonly #breaker: CircuitBreaker;\n #client?: MemoryClient;\n\n constructor(opts: Mem0AdapterOptions) {\n this.#opts = opts;\n this.#breaker = new CircuitBreaker(opts.breaker);\n }\n\n isAvailable(): boolean {\n return typeof this.#opts.apiKey === \"string\" && this.#opts.apiKey.length > 0;\n }\n\n async initialize(): Promise<void> {\n // Lazy: client constructed on first call.\n }\n\n async write(content: string | MemoryTurnMessage[], ctx: MemoryContext): Promise<MemoryId> {\n this.#breaker.ensureClosed(\"write\");\n const messages = this.#toMessages(content);\n if (messages.length === 0) {\n throw new MemoryAdapterError(\"write: empty messages\", {\n adapterId: ADAPTER_ID,\n code: \"invalid_input\",\n });\n }\n try {\n const opts = toMem0Options(ctx);\n const resp = await this.#sdk().add(messages, opts);\n this.#breaker.recordSuccess();\n const first = resp[0];\n const rawId = first?.id ?? `mem0-${Date.now()}`;\n return mkMemoryId(ADAPTER_ID, rawId);\n } catch (err) {\n throw this.#translateError(err, \"write\");\n }\n }\n\n async recall(query: string, ctx: MemoryContext, k = 10): Promise<MemoryFact[]> {\n if (k <= 0) return [];\n this.#breaker.ensureClosed(\"recall\");\n try {\n const opts = toMem0Options(ctx);\n const resp = await this.#sdk().search(query, {\n // Read filter: cross-session recall keyed by user_id (Hermes pattern).\n ...(opts.user_id !== undefined ? { filters: { user_id: opts.user_id } } : {}),\n topK: k,\n rerank: true,\n });\n this.#breaker.recordSuccess();\n const list = Array.isArray(resp) ? resp : ((resp as { results?: unknown[] }).results ?? []);\n return (list as Array<Record<string, unknown>>).map((r) => ({\n id: mkMemoryId(ADAPTER_ID, String(r.id ?? \"\")),\n content: String(r.memory ?? r.content ?? \"\"),\n ...(typeof r.score === \"number\" ? { score: r.score as number } : {}),\n ...(r.createdAt !== undefined ? { createdAt: String(r.createdAt) } : {}),\n ...(r.metadata !== undefined ? { metadata: r.metadata as Record<string, unknown> } : {}),\n }));\n } catch (err) {\n throw this.#translateError(err, \"recall\");\n }\n }\n\n async delete(id: MemoryId): Promise<void> {\n this.#breaker.ensureClosed(\"delete\");\n const rawId = extractRawId(id, ADAPTER_ID);\n try {\n await this.#sdk().delete(rawId);\n this.#breaker.recordSuccess();\n } catch (err) {\n throw this.#translateError(err, \"delete\");\n }\n }\n\n async history(id: MemoryId): Promise<MemoryRevision[]> {\n this.#breaker.ensureClosed(\"history\");\n const rawId = extractRawId(id, ADAPTER_ID);\n try {\n const rows = await this.#sdk().history(rawId);\n this.#breaker.recordSuccess();\n return rows.map((r, i) => {\n const u = (r as unknown as { updatedAt?: unknown }).updatedAt;\n const changedAt =\n u instanceof Date\n ? u.toISOString()\n : typeof u === \"string\"\n ? u\n : new Date().toISOString();\n return {\n id: mkMemoryId(ADAPTER_ID, r.memoryId ?? rawId),\n content: String(r.newMemory ?? r.oldMemory ?? \"\"),\n version: i + 1,\n changedAt,\n };\n });\n } catch (err) {\n throw this.#translateError(err, \"history\");\n }\n }\n\n getToolSchemas(): MemoryToolSchema[] {\n return [\n {\n name: \"memory_write\",\n description:\n \"Persist a turn to Mem0 long-term memory. Server-side extraction populates facts.\",\n parameters: {\n type: \"object\",\n properties: {\n content: { type: \"string\", description: \"Turn text to persist.\" },\n },\n required: [\"content\"],\n },\n },\n {\n name: \"memory_recall\",\n description: \"Retrieve up to k semantically relevant facts from Mem0 (server-side rerank).\",\n parameters: {\n type: \"object\",\n properties: {\n query: { type: \"string\" },\n k: { type: \"integer\", minimum: 1, maximum: 50 },\n },\n required: [\"query\"],\n },\n },\n {\n name: \"memory_history\",\n description:\n \"Retrieve the version history of a specific memory by id. Mem0-unique capability — \" +\n \"shows how a fact has evolved over time (e.g., user changed preferences).\",\n parameters: {\n type: \"object\",\n properties: { memoryId: { type: \"string\" } },\n required: [\"memoryId\"],\n },\n },\n ];\n }\n\n async handleToolCall(\n name: string,\n args: Record<string, unknown>,\n ctx: MemoryContext,\n ): Promise<string> {\n if (name === \"memory_write\") {\n const id = await this.write(String(args.content ?? \"\"), ctx);\n return JSON.stringify({ ok: true, id });\n }\n if (name === \"memory_recall\") {\n const k = typeof args.k === \"number\" ? args.k : 10;\n const facts = await this.recall(String(args.query ?? \"\"), ctx, k);\n return JSON.stringify({ ok: true, facts });\n }\n if (name === \"memory_history\") {\n const rawId = String(args.memoryId ?? \"\");\n const wrapped = rawId.startsWith(`${ADAPTER_ID}:`)\n ? (rawId as MemoryId)\n : mkMemoryId(ADAPTER_ID, rawId);\n const revisions = await this.history(wrapped);\n return JSON.stringify({ ok: true, revisions });\n }\n throw new MemoryAdapterError(`Unknown tool name: ${name}`, {\n adapterId: ADAPTER_ID,\n code: \"invalid_input\",\n });\n }\n\n async shutdown(): Promise<void> {\n this.#client = undefined;\n }\n\n /** Test-only: inspect breaker state. @internal */\n _breakerState(): { failures: number; isOpen: boolean; openUntil: number } {\n return this.#breaker.state();\n }\n\n // ── helpers ────────────────────────────────────────────────────────\n\n #toMessages(\n content: string | MemoryTurnMessage[],\n ): Array<{ role: \"user\" | \"assistant\"; content: string }> {\n if (typeof content === \"string\") {\n return content.trim().length === 0 ? [] : [{ role: \"user\", content }];\n }\n // Mem0 SDK accepts only user/assistant roles. System turns are merged\n // into user content with a \"[system] \" prefix.\n return content\n .filter((m) => m.content.trim().length > 0)\n .map((m) =>\n m.role === \"system\"\n ? { role: \"user\" as const, content: `[system] ${m.content}` }\n : { role: m.role, content: m.content },\n );\n }\n\n #sdk(): MemoryClient {\n if (this.#client === undefined) {\n this.#client = new MemoryClient({\n apiKey: this.#opts.apiKey,\n ...(this.#opts.host !== undefined ? { host: this.#opts.host } : {}),\n ...(this.#opts.organizationId !== undefined\n ? { organizationId: this.#opts.organizationId }\n : {}),\n ...(this.#opts.projectId !== undefined ? { projectId: this.#opts.projectId } : {}),\n });\n }\n return this.#client;\n }\n\n // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: error-translation ladder maps provider error classes to typed codes + breaker policy (EC-K: 429 does NOT trip); inlining keeps the policy decisions in one place.\n #translateError(err: unknown, op: string): MemoryAdapterError {\n if (err instanceof MemoryAdapterError) {\n if (err.code === \"rate_limited\") {\n // EC-K: do NOT trip breaker on rate limit.\n } else if (\n err.code === \"auth_failed\" ||\n err.code === \"not_found\" ||\n err.code === \"invalid_input\"\n ) {\n // No trip — these are caller-side or stateful conditions.\n } else {\n this.#breaker.recordFailure();\n }\n return err;\n }\n const status =\n (err as { status?: number; statusCode?: number; response?: { status?: number } })?.status ??\n (err as { statusCode?: number })?.statusCode ??\n (err as { response?: { status?: number } })?.response?.status;\n const message = (err as Error)?.message ?? String(err);\n if (status === 401 || status === 403) {\n return new MemoryAdapterError(`Mem0 auth failed (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"auth_failed\",\n cause: err,\n });\n }\n if (status === 429) {\n // EC-K: rate-limited; do NOT increment breaker.\n return new MemoryAdapterError(`Mem0 rate limited (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"rate_limited\",\n cause: err,\n });\n }\n if (status === 404) {\n return new MemoryAdapterError(`Mem0 not found (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"not_found\",\n cause: err,\n });\n }\n if (typeof status === \"number\" && status >= 500) {\n this.#breaker.recordFailure();\n return new MemoryAdapterError(`Mem0 server error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"network\",\n cause: err,\n });\n }\n if (status === undefined && message.toLowerCase().includes(\"network\")) {\n this.#breaker.recordFailure();\n return new MemoryAdapterError(`Mem0 network error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"network\",\n cause: err,\n });\n }\n return new MemoryAdapterError(`Mem0 error (${op}): ${message}`, {\n adapterId: ADAPTER_ID,\n code: \"unknown\",\n cause: err,\n });\n }\n}\n","import { Plugin } from \"@theokit/sdk\";\n\nimport { Mem0Adapter, type Mem0AdapterOptions } from \"./adapter.js\";\n\nexport type { Mem0AdapterOptions } from \"./adapter.js\";\n\n/** Build a `Plugin { kind: \"memory\" }`. @public */\nexport function mem0Memory(options: Mem0AdapterOptions): Plugin {\n return Plugin.create({\n name: \"@theokit/memory-mem0\",\n version: \"0.1.0\",\n kind: \"memory\",\n createProvider: () => new Mem0Adapter(options),\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theokit/memory-mem0",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Mem0 cloud memory adapter for @theokit/sdk — wraps mem0ai MemoryClient with the MemoryAdapter contract (ADR D141).",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -30,14 +30,14 @@
|
|
|
30
30
|
],
|
|
31
31
|
"peerDependencies": {
|
|
32
32
|
"mem0ai": "^3.0.0",
|
|
33
|
-
"@theokit/sdk": "^
|
|
33
|
+
"@theokit/sdk": "^3.0.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"mem0ai": "^3.0.3",
|
|
37
37
|
"tsup": "^8.5.0",
|
|
38
38
|
"typescript": "^5.8.0",
|
|
39
39
|
"vitest": "^4.1.8",
|
|
40
|
-
"@theokit/sdk": "
|
|
40
|
+
"@theokit/sdk": "3.0.0"
|
|
41
41
|
},
|
|
42
42
|
"scripts": {
|
|
43
43
|
"build": "tsup",
|