@amaster.ai/pi-memory-mem0 0.1.8 → 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
- Explicit semantic memory tools powered by [Mem0](https://mem0.ai), with support for 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
- Memories are saved and recalled through explicit tools. They are project-namespaced, and stored text is not 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
- Use `mem0_save` and the search/profile tools when memory should be stored or retrieved.
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,18 +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`: Explicit semantic memory tools backed by Mem0
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. `pi-memory-mem0` does not inject recalled
222
- text into the system prompt; the agent retrieves it through the search and
223
- profile tools.
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.
224
282
 
225
283
  ## Dedup API
226
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 — Explicit 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,CA6G5D"}
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,18 +1,33 @@
1
1
  /**
2
- * pi-memory-mem0 — Explicit 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.
10
24
  * Trusted project settings are loaded without environment interpolation.
11
25
  */
12
26
  import { isProjectTrusted, loadPiSettings } from '@amaster.ai/pi-shared/settings';
13
- import { formatRecalledMemory, scopeMemoryUserId } from './privacy.js';
14
- import { createMem0Provider } from './provider.js';
15
- import { createMem0Tools } from './tools.js';
27
+ import { Prefetch } from './prefetch.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)
@@ -37,18 +54,33 @@ function resolveUserId(configUserId) {
37
54
  }
38
55
  export default function mem0Extension(pi) {
39
56
  let provider;
57
+ let prefetch;
40
58
  let userId = '';
59
+ let activeMode = '';
60
+ let activeMemoryMode = '';
61
+ let activeToolEnabled = false;
62
+ let lastUserText = '';
63
+ let pendingWrite = Promise.resolve();
64
+ let sessionEpoch = 0;
41
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;
42
71
  provider = undefined;
72
+ prefetch = undefined;
73
+ activeToolEnabled = false;
43
74
  const config = loadConfig(ctx.cwd, isProjectTrusted(ctx));
44
- const mode = config.mode ?? 'platform';
45
- // Platform mode requires apiKey; OSS mode requires an LLM provider (env key)
46
- if (mode === 'platform' && !config.apiKey?.trim()) {
47
- ctx.ui.setStatus(STATUS_KEY, 'mem0: disabled (no API key)');
48
- return;
49
- }
50
75
  try {
51
- 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({
52
84
  config,
53
85
  resolveProvider: async (providerName) => {
54
86
  const registry = ctx.modelRegistry;
@@ -71,33 +103,111 @@ export default function mem0Extension(pi) {
71
103
  return result;
72
104
  },
73
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
+ }
74
124
  }
75
125
  catch (err) {
126
+ if (epoch !== sessionEpoch)
127
+ return;
128
+ provider = undefined;
129
+ prefetch = undefined;
130
+ activeToolEnabled = false;
76
131
  ctx.ui.setStatus(STATUS_KEY, 'mem0: init failed');
77
132
  ctx.ui.notify(`Mem0 init failed: ${err instanceof Error ? err.message : String(err)}`, 'error');
78
133
  return;
79
134
  }
80
- userId = scopeMemoryUserId(resolveUserId(config.userId), ctx.cwd);
81
- ctx.ui.setStatus(STATUS_KEY, `mem0: ${mode}`);
82
- for (const tool of createMem0Tools(provider, userId)) {
83
- pi.registerTool(tool);
135
+ ctx.ui.setStatus(STATUS_KEY, `mem0: ${activeMode}/${activeMemoryMode}`);
136
+ });
137
+ pi.on('input', async (event) => {
138
+ if (!prefetch)
139
+ return;
140
+ const text = event.text ?? '';
141
+ if (text) {
142
+ prefetch.queue(redactMemoryText(text));
143
+ lastUserText = text;
84
144
  }
85
145
  });
146
+ pi.on('turn_end', async (event) => {
147
+ if (!provider || !prefetch || !lastUserText)
148
+ return;
149
+ const msg = event.message;
150
+ const text = extractText(msg);
151
+ if (!text || msg.role !== 'assistant')
152
+ return;
153
+ const userText = lastUserText;
154
+ lastUserText = '';
155
+ const activeProvider = provider;
156
+ const activeUserId = userId;
157
+ pendingWrite = pendingWrite
158
+ .catch(() => { })
159
+ .then(async () => {
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
+ }
170
+ })
171
+ .catch((err) => {
172
+ console.error(`[pi-memory-mem0] failed to store turn: ${err instanceof Error ? err.message : String(err)}`);
173
+ });
174
+ });
175
+ pi.on('before_agent_start', async () => {
176
+ if (!prefetch)
177
+ return;
178
+ const recalled = await prefetch.consume();
179
+ if (!recalled)
180
+ return;
181
+ return {
182
+ message: {
183
+ customType: 'mem0-recall',
184
+ content: recalled,
185
+ display: true,
186
+ },
187
+ };
188
+ });
189
+ pi.on('session_shutdown', async () => {
190
+ sessionEpoch++;
191
+ await pendingWrite;
192
+ provider = undefined;
193
+ prefetch = undefined;
194
+ activeToolEnabled = false;
195
+ lastUserText = '';
196
+ pendingWrite = Promise.resolve();
197
+ });
86
198
  pi.registerCommand('mem0', {
87
- description: 'Mem0 memory commands. Subcommands: status, search <query>, profile.',
199
+ description: 'Mem0 memory commands. Subcommands: status, search <query>, profile, add <text>, delete <id>.',
88
200
  handler: async (args, ctx) => {
89
201
  if (!provider) {
90
202
  ctx.ui.notify('Mem0 is not active.', 'warning');
91
203
  return;
92
204
  }
93
- const config = loadConfig(ctx.cwd, isProjectTrusted(ctx));
94
- const userId = scopeMemoryUserId(resolveUserId(config.userId), ctx.cwd);
95
205
  const parts = args.trim().split(/\s+/).filter(Boolean);
96
206
  const subcommand = parts[0]?.toLowerCase() ?? 'status';
97
207
  const rest = parts.slice(1).join(' ').trim();
98
208
  switch (subcommand) {
99
209
  case 'status': {
100
- ctx.ui.notify(`Mem0: active (mode: ${config.mode ?? 'platform'})`, 'info');
210
+ ctx.ui.notify(`Mem0: active (mode: ${activeMode}/${activeMemoryMode})`, 'info');
101
211
  break;
102
212
  }
103
213
  case 'search': {
@@ -105,7 +215,11 @@ export default function mem0Extension(pi) {
105
215
  ctx.ui.notify('Usage: /mem0 search <query>', 'warning');
106
216
  break;
107
217
  }
108
- 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
+ });
109
223
  if (results.length === 0) {
110
224
  ctx.ui.notify('No relevant memories found.', 'info');
111
225
  }
@@ -116,7 +230,10 @@ export default function mem0Extension(pi) {
116
230
  break;
117
231
  }
118
232
  case 'profile': {
119
- const all = await provider.getAll({ userId });
233
+ const all = await provider.getAll({
234
+ userId,
235
+ ...(ctx.signal ? { signal: ctx.signal } : {}),
236
+ });
120
237
  if (all.length === 0) {
121
238
  ctx.ui.notify('No memories stored yet.', 'info');
122
239
  }
@@ -126,10 +243,49 @@ export default function mem0Extension(pi) {
126
243
  }
127
244
  break;
128
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
+ }
129
274
  default:
130
- ctx.ui.notify('Unknown subcommand. Available: status, search, profile.', 'warning');
275
+ ctx.ui.notify('Unknown subcommand. Available: status, search, profile, add, delete.', 'warning');
131
276
  }
132
277
  },
133
278
  });
134
279
  }
280
+ function extractText(msg) {
281
+ if (typeof msg.content === 'string')
282
+ return msg.content;
283
+ if (Array.isArray(msg.content)) {
284
+ return msg.content
285
+ .filter((c) => c.type === 'text' && c.text)
286
+ .map((c) => c.text)
287
+ .join('\n');
288
+ }
289
+ return '';
290
+ }
135
291
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Two-phase semantic prefetch — kicks off a background search on input,
3
+ * consumes the result on before_agent_start with a timeout.
4
+ */
5
+ import type { Mem0Provider } from './provider.js';
6
+ export declare class Prefetch {
7
+ private readonly provider;
8
+ private readonly userId;
9
+ private readonly topK;
10
+ private pending;
11
+ constructor(provider: Mem0Provider, userId: string, opts: {
12
+ topK: number;
13
+ });
14
+ /** Phase 1: kick off a background search (called on input with user text). */
15
+ queue(query: string): void;
16
+ /** Phase 2: consume the result with a timeout (called on before_agent_start). */
17
+ consume(timeoutMs?: number): Promise<string>;
18
+ }
19
+ //# sourceMappingURL=prefetch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prefetch.d.ts","sourceRoot":"","sources":["../src/prefetch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAQlD,qBAAa,QAAQ;IACnB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,OAAO,CAAsC;gBAEzC,QAAQ,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE;IAM1E,8EAA8E;IAC9E,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ1B,iFAAiF;IAC3E,OAAO,CAAC,SAAS,SAAO,GAAG,OAAO,CAAC,MAAM,CAAC;CA6BjD"}