@amaster.ai/pi-memory-mem0 0.1.7 → 0.1.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/README.md CHANGED
@@ -2,22 +2,49 @@
2
2
 
3
3
  ![pi-memory-mem0 preview](https://raw.githubusercontent.com/TGYD-helige/pi/master/packages/pi-memory-mem0/preview.png)
4
4
 
5
- Passive semantic memory extension powered by [Mem0](https://mem0.ai) — supports both Platform (cloud) and Open-Source (local) modes.
5
+ Semantic memory extension powered by [Mem0](https://mem0.ai), with Platform, embedded, and self-hosted backends and three memory modes (hybrid, active, passive).
6
6
 
7
7
  ## How It Works
8
8
 
9
- After each conversation turn, user + assistant messages are automatically sent to Mem0 for fact extraction and vector storage. Before the next turn, relevant memories are recalled via semantic search and injected into the system prompt.
9
+ **Passive side**: after each conversation turn, the user + assistant messages are automatically sent to Mem0 for fact extraction and storage. When you send a prompt, a semantic search is prefetched in the background and relevant memories are recalled before the agent starts — **zero effort required**.
10
10
 
11
- **Zero effort required** — memory storage and recall are fully automatic.
11
+ **Active side**: the agent gets a `mem0_memory` tool (`search` / `add` / `get_all` / `delete`) so it can look up and manage memories on its own initiative — same idea as the official `@mem0/pi-agent-plugin`, but backed by this package's provider abstraction, so it works with Platform, embedded, **and** self-hosted Mem0.
12
12
 
13
- ## Two Modes
13
+ Safety boundaries:
14
+
15
+ - **Recall channel**: recalled memories are injected as a custom message delivered on the user channel — never into the system prompt. Each entry is wrapped as `[UNTRUSTED MEMORY DATA]` (JSON-quoted), and entries matching prompt-injection patterns are replaced with `[BLOCKED UNTRUSTED MEMORY: ...]`.
16
+ - **Project namespacing**: memories are scoped to `userId:project:<cwd-hash>` by default, so one project's memories are not visible in another. Set `userIdScope: "exact"` when one identity must be shared across projects.
17
+ - **Credential redaction**: private keys, bearer tokens, and `api_key=…`-style values are redacted before anything is stored.
18
+ - **Platform mode disclosure**: in `platform` mode the captured turns leave your machine and are processed by Mem0 Cloud. Use `embedded` or `self-hosted` mode to keep memory traffic off third-party infrastructure.
19
+
20
+ ## Modes
21
+
22
+ ### Backend Modes
14
23
 
15
24
  | Mode | Vector Store | Persistence | Dependencies | Use Case |
16
25
  |------|-------------|-------------|--------------|----------|
17
26
  | `platform` | Mem0 Cloud | Cloud-managed | `MEM0_API_KEY` | Quick start, multi-device sync |
18
- | `open-source` | Mem0 OSS vector store | Vector-store managed | LLM + Embedding API | Data privacy, no Mem0 Cloud |
27
+ | `embedded` | Mem0 OSS vector store | Vector-store managed | LLM + Embedding API | Data privacy, no Mem0 Cloud |
28
+ | `self-hosted` | Mem0 OSS REST server | Server-managed | Server URL, optional API key | Shared infrastructure |
29
+
30
+ ### Memory Modes
31
+
32
+ | `memoryMode` | Auto capture + recall | `mem0_memory` tool | Use Case |
33
+ |--------------|----------------------|--------------------|----------|
34
+ | `hybrid` (default) | ✅ | ✅ | Best recall: automatic context plus agent-driven lookup |
35
+ | `active` | ❌ | ✅ | No background traffic; the agent decides every read/write |
36
+ | `passive` | ✅ | ❌ | Zero tool surface; fully automatic memory |
37
+
38
+ ```json
39
+ {
40
+ "pi-memory-mem0": {
41
+ "mode": "embedded",
42
+ "memoryMode": "hybrid"
43
+ }
44
+ }
45
+ ```
19
46
 
20
- ## Architecture (Open-Source Mode)
47
+ ## Architecture (Embedded Mode)
21
48
 
22
49
  ```
23
50
  User ←→ Agent ←→ Mem0 OSS Memory
@@ -50,14 +77,14 @@ in user or agent settings.
50
77
  }
51
78
  ```
52
79
 
53
- ### Open-Source Mode (Recommended)
80
+ ### Embedded Mode (Recommended)
54
81
 
55
82
  Reuses API keys and base URLs from pi's configured model providers — **no extra environment variables needed**.
56
83
 
57
84
  ```json
58
85
  {
59
86
  "pi-memory-mem0": {
60
- "mode": "open-source",
87
+ "mode": "embedded",
61
88
  "userId": "${USER}"
62
89
  }
63
90
  }
@@ -65,6 +92,24 @@ Reuses API keys and base URLs from pi's configured model providers — **no extr
65
92
 
66
93
  Defaults to OpenAI `text-embedding-3-small` (embedding) + `gpt-4.1-nano` (extraction). API keys and base URLs are automatically resolved from pi's model registry.
67
94
 
95
+ Existing settings with `mode: "open-source"` continue to load as `embedded`, but `open-source` is not part of the supported configuration interface. New settings should use `embedded`.
96
+
97
+ ### Self-Hosted Mode
98
+
99
+ Calls the OSS REST server directly. The server uses `/memories` and `/search`, not the Mem0 Platform `/v1` paths.
100
+
101
+ ```json
102
+ {
103
+ "pi-memory-mem0": {
104
+ "mode": "self-hosted",
105
+ "baseUrl": "${MEM0_BASE_URL}",
106
+ "apiKey": "${MEM0_API_KEY}",
107
+ "userId": "${PAPERCLIP_COMPANY_ID}",
108
+ "userIdScope": "exact"
109
+ }
110
+ }
111
+ ```
112
+
68
113
  ### Custom Provider
69
114
 
70
115
  When your model registry defines a custom provider with `api: "openai-completions"`, you can use it directly:
@@ -72,7 +117,7 @@ When your model registry defines a custom provider with `api: "openai-completion
72
117
  ```json
73
118
  {
74
119
  "pi-memory-mem0": {
75
- "mode": "open-source",
120
+ "mode": "embedded",
76
121
  "oss": {
77
122
  "llm": {
78
123
  "provider": "my-provider",
@@ -97,7 +142,7 @@ The extension automatically:
97
142
  ```json
98
143
  {
99
144
  "pi-memory-mem0": {
100
- "mode": "open-source",
145
+ "mode": "embedded",
101
146
  "userId": "${USER}",
102
147
  "oss": {
103
148
  "llm": {
@@ -121,7 +166,7 @@ For production workloads that need a dedicated vector database:
121
166
  ```json
122
167
  {
123
168
  "pi-memory-mem0": {
124
- "mode": "open-source",
169
+ "mode": "embedded",
125
170
  "oss": {
126
171
  "vectorStore": {
127
172
  "provider": "qdrant",
@@ -140,10 +185,13 @@ The configured vector store always owns persistence. To request an intentionally
140
185
 
141
186
  | Field | Type | Default | Description |
142
187
  |-------|------|---------|-------------|
143
- | `mode` | `"platform"` \| `"open-source"` | `"platform"` | Operating mode |
144
- | `apiKey` | string | — | Required for platform mode. Supports `${MEM0_API_KEY}` |
145
- | `baseUrl` | string | `https://api.mem0.ai` | Custom platform endpoint |
188
+ | `mode` | `"platform"` \| `"embedded"` \| `"self-hosted"` | `"platform"` | Operating mode |
189
+ | `memoryMode` | `"hybrid"` \| `"active"` \| `"passive"` | `"hybrid"` | Memory behavior: tool + automation, tool only, or automation only |
190
+ | `apiKey` | string | — | Platform or self-hosted API key. Supports `${MEM0_API_KEY}` |
191
+ | `baseUrl` | string | `https://api.mem0.ai` | Platform override; required for self-hosted mode |
192
+ | `requestTimeoutMs` | number | `30000` | Self-hosted request timeout |
146
193
  | `userId` | string | `$USER` or `"default-user"` | Memory scoping identifier |
194
+ | `userIdScope` | `"project"` \| `"exact"` | `"project"` | Append the cwd hash or use `userId` verbatim |
147
195
  | `topK` | number | `5` | Max recalled memories per turn |
148
196
  | `useRegistryKeys` | boolean | `true` | Whether OSS mode resolves keys from pi registry |
149
197
  | `oss.llm` | object | OpenAI gpt-4.1-nano | OSS extraction model |
@@ -158,9 +206,10 @@ The configured vector store always owns persistence. To request an intentionally
158
206
  | Mode | Vector Data | History |
159
207
  |------|-------------|---------|
160
208
  | Platform | Mem0 Cloud | Cloud-managed |
161
- | Open-Source (default) | `<home>/memories/mem0-vectors.db` | `<home>/memories/mem0-history.db` |
162
- | Open-Source (`memory`, `dbPath: ":memory:"`) | Process-local SQLite; lost on restart | `<home>/memories/mem0-history.db` |
163
- | Open-Source (Qdrant) | Qdrant server | `<home>/memories/mem0-history.db` |
209
+ | Embedded (default paths) | `<home>/memories/mem0-vectors.db` | `<home>/memories/mem0-history.db` |
210
+ | Embedded (`memory`, `dbPath: ":memory:"`) | Process-local SQLite; lost on restart | `<home>/memories/mem0-history.db` |
211
+ | Embedded (Qdrant) | Qdrant server | `<home>/memories/mem0-history.db` |
212
+ | Self-hosted | Remote server | Remote server |
164
213
 
165
214
  The `home` directory is resolved via `resolveHome()` from `@amaster.ai/pi-shared/settings` (defaults to `~/.pi/agent`).
166
215
 
@@ -179,7 +228,7 @@ This happens transparently — just configure the provider name as it appears in
179
228
 
180
229
  ## Installation Notes
181
230
 
182
- The default Open-Source mode depends on `better-sqlite3` (native addon, transitive dependency of `mem0ai`) for both the vector store and history. This remains true for `dbPath: ":memory:"`: it changes where SQLite stores pages, not which vector-store implementation is used.
231
+ The default Embedded configuration depends on `better-sqlite3` (native addon, transitive dependency of `mem0ai`) for both the vector store and history. This remains true for `dbPath: ":memory:"`: it changes where SQLite stores pages, not which vector-store implementation is used.
183
232
 
184
233
  **For pi-agent users**: pi-agent's `package.json` includes `better-sqlite3` in `pnpm.onlyBuiltDependencies` — it compiles automatically during `pnpm install`. No extra steps needed.
185
234
 
@@ -197,11 +246,18 @@ If `better-sqlite3` fails to load (for example, because of a Node ABI mismatch),
197
246
 
198
247
  ## Tools
199
248
 
200
- | Tool | Description |
201
- |------|-------------|
202
- | `mem0_search` | Semantic search over long-term memories |
203
- | `mem0_profile` | List all stored memories |
204
- | `mem0_save` | Store a fact verbatim (bypasses LLM extraction) |
249
+ When `memoryMode` is `hybrid` or `active`, the agent gets one action-dispatched tool:
250
+
251
+ ```
252
+ mem0_memory(action="search", query="...") # Semantic search over memories
253
+ mem0_memory(action="add", content="...") # Store a durable fact
254
+ mem0_memory(action="get_all") # List every stored memory
255
+ mem0_memory(action="delete", memory_id="...") # Remove a memory by id
256
+ ```
257
+
258
+ Stored content is credential-redacted first; results are returned with the same
259
+ `[UNTRUSTED MEMORY DATA]` wrapping as passive recall, including the memory ids
260
+ needed for `delete`.
205
261
 
206
262
  ## Commands
207
263
 
@@ -209,16 +265,20 @@ If `better-sqlite3` fails to load (for example, because of a Node ABI mismatch),
209
265
  /mem0 status # Show current status
210
266
  /mem0 search <query> # Semantic search
211
267
  /mem0 profile # List all memories
268
+ /mem0 add <text> # Store a memory manually
269
+ /mem0 delete <id> # Remove a memory by id
212
270
  ```
213
271
 
214
272
  ## Relationship with pi-memory
215
273
 
216
274
  `pi-memory-mem0` and `pi-memory` run **independently in parallel** as separate extensions:
217
275
 
218
- - `pi-memory`: Active memory — agent explicitly manages via tools, local `.md` files, hard char limits
219
- - `pi-memory-mem0`: Passive memory — automatic extraction and storage, semantic retrieval, no capacity limits
276
+ - `pi-memory`: Curated memory — the agent explicitly manages memories via the `memory_add` / `memory_replace` / `memory_remove` / `memory_read` tools, local `.md` files, hard char limits
277
+ - `pi-memory-mem0`: Semantic memory — automatic extraction/storage and semantic recall (passive), plus the `mem0_memory` tool for agent-driven semantic lookup (active); no capacity limits
220
278
 
221
- They do not interfere with each other and each injects into the system prompt separately.
279
+ They do not interfere with each other, and their tool names do not collide. `pi-memory-mem0` injects recalled text as a
280
+ custom user-channel message (never the system prompt); `pi-memory` injects its own
281
+ context separately.
222
282
 
223
283
  ## Dedup API
224
284
 
package/dist/dedup.d.ts CHANGED
@@ -4,7 +4,7 @@
4
4
  * Normalizes content, identifies exact duplicates (case-insensitive, whitespace-collapsed),
5
5
  * deletes the older entries, and keeps only the most recently updated.
6
6
  *
7
- * Both Platform and OSS modes use the provider API. In OSS mode the configured
7
+ * All modes use the provider interface. In embedded mode the configured
8
8
  * vector store is the source of truth and its IDs remain stable across restarts.
9
9
  */
10
10
  import { type ProviderResolver } from './provider.js';
package/dist/dedup.js CHANGED
@@ -4,7 +4,7 @@
4
4
  * Normalizes content, identifies exact duplicates (case-insensitive, whitespace-collapsed),
5
5
  * deletes the older entries, and keeps only the most recently updated.
6
6
  *
7
- * Both Platform and OSS modes use the provider API. In OSS mode the configured
7
+ * All modes use the provider interface. In embedded mode the configured
8
8
  * vector store is the source of truth and its IDs remain stable across restarts.
9
9
  */
10
10
  import { createMem0Provider } from './provider.js';
@@ -14,7 +14,7 @@ export async function dedupMemories(opts) {
14
14
  config,
15
15
  ...(resolveProvider ? { resolveProvider } : {}),
16
16
  });
17
- const allMemories = await provider.getAll({ userId });
17
+ const allMemories = await provider.getAll({ userId, ...(signal ? { signal } : {}) });
18
18
  if (allMemories.length === 0) {
19
19
  return { total: 0, duplicatesRemoved: 0 };
20
20
  }
@@ -24,7 +24,7 @@ export async function dedupMemories(opts) {
24
24
  if (signal?.aborted)
25
25
  break;
26
26
  try {
27
- await provider.delete(id);
27
+ await (signal ? provider.delete(id, { signal }) : provider.delete(id));
28
28
  removed++;
29
29
  }
30
30
  catch {
package/dist/dedup.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"dedup.js","sourceRoot":"","sources":["../src/dedup.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,kBAAkB,EAAyB,MAAM,eAAe,CAAC;AAe1E,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAkB;IACpD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAEzD,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC;QACxC,MAAM;QACN,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEtD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC7B,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;IAC5C,CAAC;IAED,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAE3D,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;QAC9B,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM;QAC3B,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YAC1B,OAAO,EAAE,CAAC;QACZ,CAAC;QAAC,MAAM,CAAC;YACP,cAAc;QAChB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,WAAyB,EAAE,MAAoB;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC3C,MAAM,YAAY,GAAa,EAAE,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,MAAM,EAAE,OAAO;YAAE,MAAM;QAE3B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAC1F,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEtC,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,YAAY,GAAG,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YACvF,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9E,IAAI,WAAW,GAAG,YAAY,EAAE,CAAC;gBAC/B,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;YAC7B,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"dedup.js","sourceRoot":"","sources":["../src/dedup.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,23 @@
1
1
  /**
2
- * pi-memory-mem0 — Passive semantic memory extension powered by Mem0.
2
+ * pi-memory-mem0 — Semantic memory extension powered by Mem0.
3
3
  *
4
- * Two modes:
4
+ * Backend modes:
5
5
  * - **platform**: Uses Mem0 Cloud API (needs MEM0_API_KEY)
6
- * - **open-source**: Runs locally with SQLite vector store (needs OPENAI_API_KEY or Ollama)
6
+ * - **embedded**: Runs Mem0 OSS in-process
7
+ * - **self-hosted**: Calls a remote Mem0 OSS REST server
8
+ *
9
+ * Memory modes (config "memoryMode"):
10
+ * - **passive**: automatic capture + recall injection only
11
+ * - **active**: LLM-callable mem0_memory tool only
12
+ * - **hybrid** (default): both
13
+ *
14
+ * Passive side: after each conversation turn, user + assistant messages are
15
+ * sent to Mem0 for fact extraction and storage (credentials are redacted
16
+ * first). Recalled memories are injected as a custom message (delivered to
17
+ * the model on the user channel, never the system prompt) and wrapped as
18
+ * untrusted data. Active side: the mem0_memory tool lets the agent search,
19
+ * add, list, and delete memories on its own initiative, under the same
20
+ * redaction and untrusted-data boundaries.
7
21
  *
8
22
  * Configuration via settings.json key "pi-memory-mem0".
9
23
  * Supports ${ENV_VAR:-fallback} in user and agent settings.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AA2BpE,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAsK5D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAkCpE,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAE,EAAE,YAAY,GAAG,IAAI,CAoP5D"}
package/dist/index.js CHANGED
@@ -1,9 +1,23 @@
1
1
  /**
2
- * pi-memory-mem0 — Passive semantic memory extension powered by Mem0.
2
+ * pi-memory-mem0 — Semantic memory extension powered by Mem0.
3
3
  *
4
- * Two modes:
4
+ * Backend modes:
5
5
  * - **platform**: Uses Mem0 Cloud API (needs MEM0_API_KEY)
6
- * - **open-source**: Runs locally with SQLite vector store (needs OPENAI_API_KEY or Ollama)
6
+ * - **embedded**: Runs Mem0 OSS in-process
7
+ * - **self-hosted**: Calls a remote Mem0 OSS REST server
8
+ *
9
+ * Memory modes (config "memoryMode"):
10
+ * - **passive**: automatic capture + recall injection only
11
+ * - **active**: LLM-callable mem0_memory tool only
12
+ * - **hybrid** (default): both
13
+ *
14
+ * Passive side: after each conversation turn, user + assistant messages are
15
+ * sent to Mem0 for fact extraction and storage (credentials are redacted
16
+ * first). Recalled memories are injected as a custom message (delivered to
17
+ * the model on the user channel, never the system prompt) and wrapped as
18
+ * untrusted data. Active side: the mem0_memory tool lets the agent search,
19
+ * add, list, and delete memories on its own initiative, under the same
20
+ * redaction and untrusted-data boundaries.
7
21
  *
8
22
  * Configuration via settings.json key "pi-memory-mem0".
9
23
  * Supports ${ENV_VAR:-fallback} in user and agent settings.
@@ -11,8 +25,9 @@
11
25
  */
12
26
  import { isProjectTrusted, loadPiSettings } from '@amaster.ai/pi-shared/settings';
13
27
  import { Prefetch } from './prefetch.js';
14
- import { createMem0Provider } from './provider.js';
15
- import { createMem0Tools } from './tools.js';
28
+ import { formatRecalledMemory, redactMemoryText, scopeMemoryUserId } from './privacy.js';
29
+ import { createMem0Provider, normalizeMem0Mode, normalizeMemoryMode, } from './provider.js';
30
+ import { createMem0MemoryTool } from './tools.js';
16
31
  const SETTINGS_KEY = 'pi-memory-mem0';
17
32
  const STATUS_KEY = 'mem0';
18
33
  function loadConfig(cwd, projectTrusted = false) {
@@ -26,9 +41,11 @@ function loadConfig(cwd, projectTrusted = false) {
26
41
  return {};
27
42
  }
28
43
  }
29
- function resolveUserId(configUserId) {
44
+ function resolveUserId(configUserId, scope = 'project') {
30
45
  if (configUserId?.trim())
31
46
  return configUserId.trim();
47
+ if (scope === 'exact')
48
+ throw new Error('Mem0 exact userId resolved to an empty value.');
32
49
  if (process.env.USER)
33
50
  return process.env.USER;
34
51
  if (process.env.USERNAME)
@@ -39,18 +56,31 @@ export default function mem0Extension(pi) {
39
56
  let provider;
40
57
  let prefetch;
41
58
  let userId = '';
59
+ let activeMode = '';
60
+ let activeMemoryMode = '';
61
+ let activeToolEnabled = false;
42
62
  let lastUserText = '';
43
63
  let pendingWrite = Promise.resolve();
64
+ let sessionEpoch = 0;
44
65
  pi.on('session_start', async (_event, ctx) => {
66
+ // A newer session_start (or shutdown) can run while this handler is still
67
+ // awaiting provider init (embedded init takes seconds). The epoch check
68
+ // after the await keeps the superseded handler from clobbering the live
69
+ // session's provider, prefetch, and tool-enablement state.
70
+ const epoch = ++sessionEpoch;
71
+ provider = undefined;
72
+ prefetch = undefined;
73
+ activeToolEnabled = false;
45
74
  const config = loadConfig(ctx.cwd, isProjectTrusted(ctx));
46
- const mode = config.mode ?? 'platform';
47
- // Platform mode requires apiKey; OSS mode requires an LLM provider (env key)
48
- if (mode === 'platform' && !config.apiKey?.trim()) {
49
- ctx.ui.setStatus(STATUS_KEY, 'mem0: disabled (no API key)');
50
- return;
51
- }
52
75
  try {
53
- provider = await createMem0Provider({
76
+ const mode = normalizeMem0Mode(config.mode);
77
+ const memoryMode = normalizeMemoryMode(config.memoryMode);
78
+ if (mode === 'platform' && !config.apiKey?.trim()) {
79
+ ctx.ui.setStatus(STATUS_KEY, 'mem0: disabled (no API key)');
80
+ return;
81
+ }
82
+ const resolvedUserId = resolveUserId(config.userId, config.userIdScope);
83
+ const newProvider = await createMem0Provider({
54
84
  config,
55
85
  resolveProvider: async (providerName) => {
56
86
  const registry = ctx.modelRegistry;
@@ -73,32 +103,48 @@ export default function mem0Extension(pi) {
73
103
  return result;
74
104
  },
75
105
  });
106
+ if (epoch !== sessionEpoch)
107
+ return;
108
+ provider = newProvider;
109
+ userId = scopeMemoryUserId(resolvedUserId, ctx.cwd, config.userIdScope);
110
+ activeMode = mode;
111
+ activeMemoryMode = memoryMode;
112
+ if (memoryMode !== 'active') {
113
+ prefetch = new Prefetch(provider, userId, { topK: config.topK ?? 5 });
114
+ }
115
+ if (memoryMode !== 'passive') {
116
+ activeToolEnabled = true;
117
+ pi.registerTool(createMem0MemoryTool({
118
+ getProvider: () => provider,
119
+ getUserId: () => userId,
120
+ isEnabled: () => activeToolEnabled,
121
+ topK: config.topK ?? 5,
122
+ }));
123
+ }
76
124
  }
77
125
  catch (err) {
126
+ if (epoch !== sessionEpoch)
127
+ return;
128
+ provider = undefined;
129
+ prefetch = undefined;
130
+ activeToolEnabled = false;
78
131
  ctx.ui.setStatus(STATUS_KEY, 'mem0: init failed');
79
132
  ctx.ui.notify(`Mem0 init failed: ${err instanceof Error ? err.message : String(err)}`, 'error');
80
133
  return;
81
134
  }
82
- userId = resolveUserId(config.userId);
83
- prefetch = new Prefetch(provider, userId, {
84
- topK: config.topK ?? 5,
85
- });
86
- ctx.ui.setStatus(STATUS_KEY, `mem0: ${mode}`);
87
- for (const tool of createMem0Tools(provider, userId)) {
88
- pi.registerTool(tool);
89
- }
135
+ ctx.ui.setStatus(STATUS_KEY, `mem0: ${activeMode}/${activeMemoryMode}`);
90
136
  });
91
137
  pi.on('input', async (event) => {
92
138
  if (!prefetch)
93
139
  return;
94
140
  const text = event.text ?? '';
95
141
  if (text) {
96
- prefetch.queue(text);
142
+ prefetch.queue(redactMemoryText(text));
97
143
  lastUserText = text;
98
144
  }
99
145
  });
100
146
  pi.on('turn_end', async (event) => {
101
- if (!provider || !lastUserText)
147
+ if (!provider || !prefetch || !lastUserText)
102
148
  return;
103
149
  const msg = event.message;
104
150
  const text = extractText(msg);
@@ -107,48 +153,61 @@ export default function mem0Extension(pi) {
107
153
  const userText = lastUserText;
108
154
  lastUserText = '';
109
155
  const activeProvider = provider;
156
+ const activeUserId = userId;
110
157
  pendingWrite = pendingWrite
111
158
  .catch(() => { })
112
159
  .then(async () => {
113
- await activeProvider.add([
114
- { role: 'user', content: userText },
115
- { role: 'assistant', content: text },
116
- ], { userId });
160
+ const result = await activeProvider.add([
161
+ { role: 'user', content: redactMemoryText(userText) },
162
+ { role: 'assistant', content: redactMemoryText(text) },
163
+ ], { userId: activeUserId });
164
+ // Extraction legitimately finds nothing in many turns, but a totally
165
+ // silent no-op makes a broken pipeline indistinguishable from a quiet
166
+ // one — gate a diagnostic behind DEBUG.
167
+ if (process.env.DEBUG?.includes('pi-memory-mem0') && !result?.results?.length) {
168
+ console.error('[pi-memory-mem0] turn capture stored no memories (extraction empty?)');
169
+ }
117
170
  })
118
- .catch(() => { });
171
+ .catch((err) => {
172
+ console.error(`[pi-memory-mem0] failed to store turn: ${err instanceof Error ? err.message : String(err)}`);
173
+ });
119
174
  });
120
- pi.on('before_agent_start', async (event) => {
175
+ pi.on('before_agent_start', async () => {
121
176
  if (!prefetch)
122
177
  return;
123
178
  const recalled = await prefetch.consume();
124
179
  if (!recalled)
125
180
  return;
126
181
  return {
127
- systemPrompt: event.systemPrompt ? `${event.systemPrompt}\n\n${recalled}` : recalled,
182
+ message: {
183
+ customType: 'mem0-recall',
184
+ content: recalled,
185
+ display: true,
186
+ },
128
187
  };
129
188
  });
130
189
  pi.on('session_shutdown', async () => {
190
+ sessionEpoch++;
131
191
  await pendingWrite;
132
192
  provider = undefined;
133
193
  prefetch = undefined;
194
+ activeToolEnabled = false;
134
195
  lastUserText = '';
135
196
  pendingWrite = Promise.resolve();
136
197
  });
137
198
  pi.registerCommand('mem0', {
138
- description: 'Mem0 memory commands. Subcommands: status, search <query>, profile.',
199
+ description: 'Mem0 memory commands. Subcommands: status, search <query>, profile, add <text>, delete <id>.',
139
200
  handler: async (args, ctx) => {
140
201
  if (!provider) {
141
202
  ctx.ui.notify('Mem0 is not active.', 'warning');
142
203
  return;
143
204
  }
144
- const config = loadConfig(ctx.cwd, isProjectTrusted(ctx));
145
- const userId = resolveUserId(config.userId);
146
205
  const parts = args.trim().split(/\s+/).filter(Boolean);
147
206
  const subcommand = parts[0]?.toLowerCase() ?? 'status';
148
207
  const rest = parts.slice(1).join(' ').trim();
149
208
  switch (subcommand) {
150
209
  case 'status': {
151
- ctx.ui.notify(`Mem0: active (mode: ${config.mode ?? 'platform'})`, 'info');
210
+ ctx.ui.notify(`Mem0: active (mode: ${activeMode}/${activeMemoryMode})`, 'info');
152
211
  break;
153
212
  }
154
213
  case 'search': {
@@ -156,29 +215,64 @@ export default function mem0Extension(pi) {
156
215
  ctx.ui.notify('Usage: /mem0 search <query>', 'warning');
157
216
  break;
158
217
  }
159
- const results = await provider.search(rest, { userId, topK: 10 });
218
+ const results = await provider.search(rest, {
219
+ userId,
220
+ topK: 10,
221
+ ...(ctx.signal ? { signal: ctx.signal } : {}),
222
+ });
160
223
  if (results.length === 0) {
161
224
  ctx.ui.notify('No relevant memories found.', 'info');
162
225
  }
163
226
  else {
164
- const lines = results.map((r, i) => `${i + 1}. ${r.memory}`);
227
+ const lines = results.map((r, i) => `${i + 1}. ${formatRecalledMemory(r.memory)}`);
165
228
  ctx.ui.notify(`Mem0 search results:\n${lines.join('\n')}`, 'info');
166
229
  }
167
230
  break;
168
231
  }
169
232
  case 'profile': {
170
- const all = await provider.getAll({ userId });
233
+ const all = await provider.getAll({
234
+ userId,
235
+ ...(ctx.signal ? { signal: ctx.signal } : {}),
236
+ });
171
237
  if (all.length === 0) {
172
238
  ctx.ui.notify('No memories stored yet.', 'info');
173
239
  }
174
240
  else {
175
- const lines = all.map((m, i) => `${i + 1}. ${m.memory}`);
241
+ const lines = all.map((m, i) => `${i + 1}. ${formatRecalledMemory(m.memory)}`);
176
242
  ctx.ui.notify(`Mem0 memories (${all.length}):\n${lines.join('\n')}`, 'info');
177
243
  }
178
244
  break;
179
245
  }
246
+ case 'add': {
247
+ if (!rest) {
248
+ ctx.ui.notify('Usage: /mem0 add <text>', 'warning');
249
+ break;
250
+ }
251
+ const result = await provider.add([{ role: 'user', content: redactMemoryText(rest) }], {
252
+ userId,
253
+ ...(ctx.signal ? { signal: ctx.signal } : {}),
254
+ });
255
+ const created = result?.results ?? [];
256
+ if (created.length === 0) {
257
+ ctx.ui.notify('No memory was extracted from the provided text.', 'info');
258
+ }
259
+ else {
260
+ const lines = created.map((m, i) => `${i + 1}. ${formatRecalledMemory(m.memory)}`);
261
+ ctx.ui.notify(`Mem0 saved ${created.length}:\n${lines.join('\n')}`, 'info');
262
+ }
263
+ break;
264
+ }
265
+ case 'delete': {
266
+ if (!rest) {
267
+ ctx.ui.notify('Usage: /mem0 delete <memory-id>', 'warning');
268
+ break;
269
+ }
270
+ await provider.delete(rest, ctx.signal ? { signal: ctx.signal } : {});
271
+ ctx.ui.notify(`Deleted memory ${rest}.`, 'info');
272
+ break;
273
+ }
180
274
  default:
181
- ctx.ui.notify('Unknown subcommand. Available: status, search, profile.', 'warning');
275
+ ctx.ui.notify('Unknown subcommand. Available: status, search, profile, add, delete.', 'warning');
182
276
  }
183
277
  },
184
278
  });
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAElF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAqB,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAG7C,MAAM,YAAY,GAAG,gBAAgB,CAAC;AACtC,MAAM,UAAU,GAAG,MAAM,CAAC;AAE1B,SAAS,UAAU,CAAC,GAAW,EAAE,cAAc,GAAG,KAAK;IACrD,IAAI,CAAC;QACH,OAAO,cAAc,CAAsB,YAAY,EAAE;YACvD,GAAG;YACH,cAAc;SACf,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,YAAqB;IAC1C,IAAI,YAAY,EAAE,IAAI,EAAE;QAAE,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC;IACrD,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;IAC9C,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ;QAAE,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;IACtD,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,EAAgB;IACpD,IAAI,QAAkC,CAAC;IACvC,IAAI,QAA8B,CAAC;IACnC,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,YAAY,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEpD,EAAE,CAAC,EAAE,CAAC,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;QAC3C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,UAAU,CAAC;QAEvC,6EAA6E;QAC7E,IAAI,IAAI,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAAC;YAClD,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,6BAA6B,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,kBAAkB,CAAC;gBAClC,MAAM;gBACN,eAAe,EAAE,KAAK,EAAE,YAAoB,EAAE,EAAE;oBAC9C,MAAM,QAAQ,GAAG,GAAG,CAAC,aAOpB,CAAC;oBACF,IAAI,CAAC,QAAQ,CAAC,oBAAoB;wBAAE,OAAO,SAAS,CAAC;oBAErD,IAAI,KAAqD,CAAC;oBAC1D,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;wBACpB,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC;oBACrE,CAAC;oBAED,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;oBACjE,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK;wBAAE,OAAO,SAAS,CAAC;oBACxC,MAAM,MAAM,GAA2B,EAAE,CAAC;oBAC1C,IAAI,MAAM;wBAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;oBACnC,IAAI,KAAK,EAAE,OAAO;wBAAE,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;oBACnD,IAAI,KAAK,EAAE,GAAG;wBAAE,MAAM,CAAC,GAAG,GAAG,KAAK,CAAC,GAAa,CAAC;oBACjD,OAAO,MAAM,CAAC;gBAChB,CAAC;aACF,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,mBAAmB,CAAC,CAAC;YAClD,GAAG,CAAC,EAAE,CAAC,MAAM,CACX,qBAAqB,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EACvE,OAAO,CACR,CAAC;YACF,OAAO;QACT,CAAC;QAED,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACtC,QAAQ,GAAG,IAAI,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE;YACxC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;SACvB,CAAC,CAAC;QAEH,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,SAAS,IAAI,EAAE,CAAC,CAAC;QAE9C,KAAK,MAAM,IAAI,IAAI,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YACrD,EAAE,CAAC,YAAY,CAAC,IAAa,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC7B,IAAI,CAAC,QAAQ;YAAE,OAAO;QACtB,MAAM,IAAI,GAAI,KAA2B,CAAC,IAAI,IAAI,EAAE,CAAC;QACrD,IAAI,IAAI,EAAE,CAAC;YACT,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACrB,YAAY,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAChC,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY;YAAE,OAAO;QAEvC,MAAM,GAAG,GAAG,KAAK,CAAC,OAA+C,CAAC;QAClE,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW;YAAE,OAAO;QAE9C,MAAM,QAAQ,GAAG,YAAY,CAAC;QAC9B,YAAY,GAAG,EAAE,CAAC;QAClB,MAAM,cAAc,GAAG,QAAQ,CAAC;QAChC,YAAY,GAAG,YAAY;aACxB,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC;aACf,IAAI,CAAC,KAAK,IAAI,EAAE;YACf,MAAM,cAAc,CAAC,GAAG,CACtB;gBACE,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;gBACnC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE;aACrC,EACD,EAAE,MAAM,EAAE,CACX,CAAC;QACJ,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE;QAC1C,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;QAC1C,IAAI,CAAC,QAAQ;YAAE,OAAO;QAEtB,OAAO;YACL,YAAY,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,YAAY,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ;SACrF,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,YAAY,CAAC;QACnB,QAAQ,GAAG,SAAS,CAAC;QACrB,QAAQ,GAAG,SAAS,CAAC;QACrB,YAAY,GAAG,EAAE,CAAC;QAClB,YAAY,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IACnC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,eAAe,CAAC,MAAM,EAAE;QACzB,WAAW,EAAE,qEAAqE;QAClF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;YAC3B,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,QAAQ,CAAC;YACvD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;YAE7C,QAAQ,UAAU,EAAE,CAAC;gBACnB,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,uBAAuB,MAAM,CAAC,IAAI,IAAI,UAAU,GAAG,EAAE,MAAM,CAAC,CAAC;oBAC3E,MAAM;gBACR,CAAC;gBACD,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,6BAA6B,EAAE,SAAS,CAAC,CAAC;wBACxD,MAAM;oBACR,CAAC;oBACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;oBAClE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;oBACvD,CAAC;yBAAM,CAAC;wBACN,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC7D,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,yBAAyB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBACrE,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD,KAAK,SAAS,CAAC,CAAC,CAAC;oBACf,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC9C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACrB,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;oBACnD,CAAC;yBAAM,CAAC;wBACN,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;wBACzD,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,kBAAkB,GAAG,CAAC,MAAM,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;oBAC/E,CAAC;oBACD,MAAM;gBACR,CAAC;gBACD;oBACE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,yDAAyD,EAAE,SAAS,CAAC,CAAC;YACxF,CAAC;QACH,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,GAA0B;IAC7C,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAAE,OAAO,GAAG,CAAC,OAAO,CAAC;IACxD,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/B,OAAQ,GAAG,CAAC,OAAkD;aAC3D,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC;aAC1C,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAK,CAAC;aACnB,IAAI,CAAC,IAAI,CAAC,CAAC;IAChB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  /**
2
- * Two-phase semantic prefetch — kicks off a background search on turn_end,
2
+ * Two-phase semantic prefetch — kicks off a background search on input,
3
3
  * consumes the result on before_agent_start with a timeout.
4
4
  */
5
5
  import type { Mem0Provider } from './provider.js';
@@ -11,7 +11,7 @@ export declare class Prefetch {
11
11
  constructor(provider: Mem0Provider, userId: string, opts: {
12
12
  topK: number;
13
13
  });
14
- /** Phase 1: kick off a background search (called on turn_end with user message). */
14
+ /** Phase 1: kick off a background search (called on input with user text). */
15
15
  queue(query: string): void;
16
16
  /** Phase 2: consume the result with a timeout (called on before_agent_start). */
17
17
  consume(timeoutMs?: number): Promise<string>;