@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/dist/tools.js CHANGED
@@ -1,108 +1,118 @@
1
1
  /**
2
- * LLM-callable tools for Mem0: search, profile (get all), and save (verbatim store).
2
+ * Active memory tool — the LLM-callable interface over the Mem0 provider.
3
+ *
4
+ * Borrowed from the official @mem0/pi-agent-plugin design (a single
5
+ * action-dispatched tool), but built on this package's Mem0Provider so it
6
+ * works with platform, embedded, and self-hosted backends, and keeps the
7
+ * package's security boundaries: credentials are redacted before storage,
8
+ * and memory text returned to the model is wrapped as untrusted data.
3
9
  */
10
+ import { StringEnum } from '@earendil-works/pi-ai';
4
11
  import { truncateHead, truncateLine } from '@earendil-works/pi-coding-agent';
5
12
  import { Type } from 'typebox';
6
13
  import { formatRecalledMemory, redactMemoryText } from './privacy.js';
14
+ /** Tool results land in model context — keep the block small. */
15
+ const MAX_ENTRY_CHARS = 1_000;
16
+ const MAX_BLOCK_BYTES = 16 * 1024;
17
+ const MAX_BLOCK_LINES = 200;
7
18
  function textResult(text) {
8
- const result = truncateHead(text, { maxBytes: 47 * 1024, maxLines: 1_900 });
9
- const output = result.truncated
10
- ? JSON.stringify({
11
- truncated: true,
12
- preview: truncateLine(text, 4_000).text,
13
- })
14
- : result.content;
15
- return {
16
- content: [{ type: 'text', text: output }],
17
- details: undefined,
18
- };
19
+ return { content: [{ type: 'text', text }], details: undefined };
20
+ }
21
+ function errorResult(text) {
22
+ return { isError: true, content: [{ type: 'text', text }], details: undefined };
23
+ }
24
+ function formatEntry(entry) {
25
+ const text = truncateLine(entry.memory.trim(), MAX_ENTRY_CHARS).text;
26
+ return `- ${entry.id}: ${formatRecalledMemory(text)}`;
27
+ }
28
+ function formatBlock(title, entries) {
29
+ const lines = entries.filter((e) => e.memory?.trim()).map(formatEntry);
30
+ if (lines.length === 0)
31
+ return textResult('No memories found.');
32
+ return textResult(truncateHead(`${title}\n${lines.join('\n')}`, {
33
+ maxBytes: MAX_BLOCK_BYTES,
34
+ maxLines: MAX_BLOCK_LINES,
35
+ }).content);
19
36
  }
20
- export function createMem0Tools(provider, userId) {
21
- const searchTool = {
22
- name: 'mem0_search',
23
- label: 'Mem0',
24
- description: 'Search long-term memories by meaning. Returns relevant facts ranked by similarity.',
25
- promptSnippet: 'Semantic search over long-term user memories.',
37
+ export function createMem0MemoryTool(opts) {
38
+ const topK = opts.topK ?? 5;
39
+ return {
40
+ name: 'mem0_memory',
41
+ label: 'Mem0 Memory',
42
+ description: 'Read and manage long-term semantic memories about the user and their projects. ' +
43
+ 'Memories are facts extracted from past conversations, stored in Mem0.\n\n' +
44
+ 'Actions:\n' +
45
+ '- search: semantic search over memories (requires query)\n' +
46
+ '- add: store a durable fact (requires content)\n' +
47
+ '- get_all: list every stored memory\n' +
48
+ '- delete: remove a memory by id (requires memory_id, taken from search/get_all results)',
49
+ promptSnippet: 'Search and manage long-term semantic memories (Mem0).',
50
+ promptGuidelines: [
51
+ 'Search mem0_memory BEFORE answering when the request could depend on the user’s past work, preferences, or prior decisions.',
52
+ 'Save durable facts proactively — user preferences, corrections, environment facts. Do not save task progress or temporary session state.',
53
+ ],
26
54
  parameters: Type.Object({
27
- query: Type.String({ description: 'What to search for.' }),
28
- top_k: Type.Optional(Type.Number({ description: 'Max results (default: 10, max: 50).' })),
55
+ action: StringEnum(['search', 'add', 'get_all', 'delete'], {
56
+ description: 'The memory operation to perform.',
57
+ }),
58
+ query: Type.Optional(Type.String({ description: 'Search query. Required for search.' })),
59
+ content: Type.Optional(Type.String({ description: 'Memory content to store. Required for add.' })),
60
+ memory_id: Type.Optional(Type.String({ description: 'Memory id to remove. Required for delete.' })),
29
61
  }),
30
- async execute(_toolCallId, params) {
31
- const query = String(params.query ?? '');
32
- const topK = Math.min(Number(params.top_k) || 10, 50);
33
- if (!query)
34
- return textResult(JSON.stringify({ error: 'Query cannot be empty.' }));
35
- try {
36
- const results = await provider.search(query, { userId, topK });
37
- if (results.length === 0) {
38
- return textResult(JSON.stringify({ result: 'No relevant memories found.' }));
39
- }
40
- return textResult(JSON.stringify({
41
- results: results.map((r) => ({
42
- memory: formatRecalledMemory(r.memory),
43
- score: r.score,
44
- })),
45
- count: results.length,
46
- }));
47
- }
48
- catch (err) {
49
- return textResult(JSON.stringify({
50
- error: `Search failed: ${err instanceof Error ? err.message : String(err)}`,
51
- }));
62
+ async execute(_toolCallId, params, signal, _onUpdate, _ctx) {
63
+ const action = String(params.action ?? '');
64
+ const signalOpts = signal ? { signal } : {};
65
+ if (!opts.isEnabled()) {
66
+ return errorResult('mem0_memory is disabled in this session.');
52
67
  }
53
- },
54
- };
55
- const profileTool = {
56
- name: 'mem0_profile',
57
- label: 'Mem0',
58
- description: 'Retrieve all stored long-term memories about the user.',
59
- promptSnippet: 'Full dump of all stored user memories.',
60
- parameters: Type.Object({}),
61
- async execute() {
68
+ const provider = opts.getProvider();
69
+ if (!provider)
70
+ return errorResult('Mem0 is not active.');
71
+ const userId = opts.getUserId();
62
72
  try {
63
- const memories = await provider.getAll({ userId });
64
- if (memories.length === 0) {
65
- return textResult(JSON.stringify({ result: 'No memories stored yet.' }));
73
+ switch (action) {
74
+ case 'search': {
75
+ const query = redactMemoryText(String(params.query ?? '').trim());
76
+ if (!query)
77
+ return errorResult('query is required for the search action.');
78
+ const results = await provider.search(query, { userId, topK, ...signalOpts });
79
+ return formatBlock(`## Memories matching "${query}"`, results);
80
+ }
81
+ case 'add': {
82
+ const content = redactMemoryText(String(params.content ?? '').trim());
83
+ if (!content)
84
+ return errorResult('content is required for the add action.');
85
+ const result = await provider.add([{ role: 'user', content }], {
86
+ userId,
87
+ ...signalOpts,
88
+ });
89
+ const created = result?.results ?? [];
90
+ if (created.length === 0) {
91
+ return textResult('No memory was extracted from the provided content.');
92
+ }
93
+ return formatBlock(`Saved ${created.length} memories:`, created);
94
+ }
95
+ case 'get_all': {
96
+ const results = await provider.getAll({ userId, ...signalOpts });
97
+ return formatBlock(`## All memories (${results.length})`, results);
98
+ }
99
+ case 'delete': {
100
+ const memoryId = String(params.memory_id ?? '').trim();
101
+ if (!memoryId)
102
+ return errorResult('memory_id is required for the delete action.');
103
+ await provider.delete(memoryId, signalOpts);
104
+ return textResult(`Deleted memory ${memoryId}.`);
105
+ }
106
+ default:
107
+ return errorResult(`Unknown action "${action}". Available: search, add, get_all, delete.`);
66
108
  }
67
- const lines = memories
68
- .map((m) => m.memory)
69
- .filter(Boolean)
70
- .map(formatRecalledMemory);
71
- return textResult(JSON.stringify({ result: lines.join('\n'), count: lines.length }));
72
- }
73
- catch (err) {
74
- return textResult(JSON.stringify({
75
- error: `Profile failed: ${err instanceof Error ? err.message : String(err)}`,
76
- }));
77
- }
78
- },
79
- };
80
- const saveTool = {
81
- name: 'mem0_save',
82
- label: 'Mem0',
83
- description: 'Store a durable fact about the user verbatim (no LLM extraction). Use for explicit preferences or corrections.',
84
- promptSnippet: 'Save a fact to long-term memory verbatim.',
85
- parameters: Type.Object({
86
- fact: Type.String({ description: 'The fact to store.' }),
87
- }),
88
- async execute(_toolCallId, params) {
89
- const fact = String(params.fact ?? '').trim();
90
- if (!fact)
91
- return textResult(JSON.stringify({ error: 'Fact cannot be empty.' }));
92
- try {
93
- const result = await provider.add([{ role: 'user', content: redactMemoryText(fact) }], {
94
- userId,
95
- infer: false,
96
- });
97
- return textResult(JSON.stringify(result ? { result: 'Fact stored.' } : { error: 'Failed to store.' }));
98
109
  }
99
110
  catch (err) {
100
- return textResult(JSON.stringify({
101
- error: `Save failed: ${err instanceof Error ? err.message : String(err)}`,
102
- }));
111
+ const message = err instanceof Error ? err.message : String(err);
112
+ console.error(`[pi-memory-mem0] mem0_memory ${action} failed: ${message}`);
113
+ return errorResult(`mem0_memory ${action} failed: ${message}`);
103
114
  }
104
115
  },
105
116
  };
106
- return [searchTool, profileTool, saveTool];
107
117
  }
108
118
  //# sourceMappingURL=tools.js.map
package/dist/tools.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,14 +1,24 @@
1
1
  /**
2
2
  * Configuration types for pi-memory-mem0.
3
3
  */
4
- export type Mem0Mode = 'platform' | 'open-source';
4
+ export type Mem0Mode = 'platform' | 'embedded' | 'self-hosted';
5
+ export type Mem0MemoryMode = 'hybrid' | 'active' | 'passive';
6
+ export type MemoryUserIdScope = 'project' | 'exact';
5
7
  export interface Mem0ExtensionConfig {
6
- /** "platform" (Mem0 Cloud) or "open-source" (local SQLite). Default: "platform". */
8
+ /** Mem0 Cloud, in-process OSS, or a remote OSS server. Default: "platform". */
7
9
  mode?: Mem0Mode;
8
- /** Mem0 Platform API key. Supports ${MEM0_API_KEY}. */
10
+ /**
11
+ * Memory behavior: "passive" = automatic capture + recall injection only,
12
+ * "active" = LLM-callable mem0_memory tool only, "hybrid" = both.
13
+ * Default: "hybrid".
14
+ */
15
+ memoryMode?: Mem0MemoryMode;
16
+ /** Mem0 API key. Supports ${MEM0_API_KEY}. */
9
17
  apiKey?: string;
10
- /** Custom API base URL. Default: https://api.mem0.ai */
18
+ /** Platform override or required self-hosted OSS server URL. */
11
19
  baseUrl?: string;
20
+ /** Remote request timeout in milliseconds. Default: 30000. */
21
+ requestTimeoutMs?: number;
12
22
  oss?: {
13
23
  embedder?: {
14
24
  provider: string;
@@ -33,10 +43,12 @@ export interface Mem0ExtensionConfig {
33
43
  };
34
44
  /** User identifier for memory scoping. Supports ${USER}. */
35
45
  userId?: string;
46
+ /** Append a cwd hash (default) or use userId verbatim. */
47
+ userIdScope?: MemoryUserIdScope;
36
48
  /** Max recalled memories per turn. Default: 5 */
37
49
  topK?: number;
38
50
  /**
39
- * When true (default), OSS mode will attempt to resolve API keys from
51
+ * When true (default), embedded mode will attempt to resolve API keys from
40
52
  * pi's model registry instead of requiring separate env vars.
41
53
  * Falls back to OPENAI_API_KEY / DEEPSEEK_API_KEY env vars if registry lookup fails.
42
54
  */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;AAElD,MAAM,WAAW,mBAAmB;IAClC,oFAAoF;IACpF,IAAI,CAAC,EAAE,QAAQ,CAAC;IAGhB,uDAAuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,OAAO,CAAC,EAAE,MAAM,CAAC;IAGjB,GAAG,CAAC,EAAE;QACJ,QAAQ,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QAClE,GAAG,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QAC7D,WAAW,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QACrE,wFAAwF;QACxF,YAAY,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QACtE,oFAAoF;QACpF,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IAGF,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;AAC7D,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,mBAAmB;IAClC,+EAA+E;IAC/E,IAAI,CAAC,EAAE,QAAQ,CAAC;IAEhB;;;;OAIG;IACH,UAAU,CAAC,EAAE,cAAc,CAAC;IAG5B,8CAA8C;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAG1B,GAAG,CAAC,EAAE;QACJ,QAAQ,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QAClE,GAAG,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QAC7D,WAAW,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QACrE,wFAAwF;QACxF,YAAY,CAAC,EAAE;YAAE,QAAQ,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;SAAE,CAAC;QACtE,oFAAoF;QACpF,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,cAAc,CAAC,EAAE,OAAO,CAAC;KAC1B,CAAC;IAGF,4DAA4D;IAC5D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@amaster.ai/pi-memory-mem0",
3
- "version": "0.1.8",
4
- "description": "Explicit Mem0 semantic memory tools for pi — Platform cloud or local SQLite.",
3
+ "version": "0.1.9",
4
+ "description": "Mem0 semantic memory for pi — automatic capture, semantic recall, and an agent-callable memory tool. Platform, embedded, or self-hosted.",
5
5
  "keywords": [
6
6
  "pi-package",
7
7
  "pi",
@@ -54,13 +54,17 @@
54
54
  },
55
55
  "dependencies": {
56
56
  "mem0ai": "3.0.7",
57
- "@amaster.ai/pi-shared": "0.1.8"
57
+ "@amaster.ai/pi-shared": "0.1.9"
58
58
  },
59
59
  "peerDependencies": {
60
+ "@earendil-works/pi-ai": ">=0.80.10",
60
61
  "@earendil-works/pi-coding-agent": ">=0.79.1",
61
62
  "typebox": "*"
62
63
  },
63
64
  "peerDependenciesMeta": {
65
+ "@earendil-works/pi-ai": {
66
+ "optional": true
67
+ },
64
68
  "@earendil-works/pi-coding-agent": {
65
69
  "optional": true
66
70
  },
@@ -69,6 +73,7 @@
69
73
  }
70
74
  },
71
75
  "devDependencies": {
76
+ "@earendil-works/pi-ai": "0.80.10",
72
77
  "@earendil-works/pi-coding-agent": "0.80.10",
73
78
  "typebox": "*",
74
79
  "vitest": "^4.0.0"