@t0ken.ai/memoryx-openclaw-plugin 1.1.16 → 1.1.17

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
@@ -4,11 +4,44 @@ Official MemoryX plugin for OpenClaw. Enables long-term memory for agents by rec
4
4
 
5
5
  ## Features
6
6
 
7
- - **Recall**: `before_agent_start` → semantic search for relevant memories
8
- - **Add**: `message_received` + `assistant_response` → buffer and flush to MemoryX API
7
+ - **Auto Recall**: `before_agent_start` → semantic search for relevant memories
8
+ - **Auto Capture**: `message_received` + `assistant_response` → buffer and flush to MemoryX API
9
+ - **Function Calling**: LLM can actively search, list, and delete memories
9
10
  - **Auto Registration**: Agents auto-register with machine fingerprint
10
11
  - **Conversation Buffer**: Smart buffering with token counting and round-based flushing
11
12
 
13
+ ## Function Calling Tools
14
+
15
+ The plugin registers three tools that LLM can call during conversations:
16
+
17
+ | Tool | Description | When to Use |
18
+ |------|-------------|-------------|
19
+ | `memoryx_recall` | Search through long-term memories | User asks "do you remember X?" or needs context |
20
+ | `memoryx_store` | Save important information to memory | User says "remember this" or you identify important info |
21
+ | `memoryx_list` | List all stored memories | User asks "what do you remember about me?" |
22
+ | `memoryx_forget` | Delete a specific memory | User asks to forget/remove something |
23
+
24
+ ### memoryx_store Parameters
25
+
26
+ | Parameter | Type | Required | Description |
27
+ |-----------|------|----------|-------------|
28
+ | `content` | string | Yes | The information to remember (e.g., "User prefers dark mode") |
29
+ | `category` | enum | No | `preference`, `fact`, `plan`, `experience`, `opinion`, `other` |
30
+
31
+ ### Example Usage
32
+
33
+ **User**: "What do you remember about my preferences?"
34
+ **LLM**: *calls `memoryx_list`* → Returns list of stored memories
35
+
36
+ **User**: "Did I ever mention my favorite color?"
37
+ **LLM**: *calls `memoryx_recall` with query="favorite color"* → Searches and returns relevant memories
38
+
39
+ **User**: "Please forget about my old address"
40
+ **LLM**: *calls `memoryx_forget` with memory_id* → Deletes the memory
41
+
42
+ **User**: "Remember that my favorite color is blue"
43
+ **LLM**: *calls `memoryx_store` with content="User's favorite color is blue" category="preference"* → Stores the memory
44
+
12
45
  ## Install
13
46
 
14
47
  ```bash
package/dist/index.d.ts CHANGED
@@ -82,6 +82,12 @@ declare class MemoryXPlugin {
82
82
  recall(query: string, limit?: number): Promise<RecallResult>;
83
83
  endConversation(): Promise<void>;
84
84
  forget(memoryId: string): Promise<boolean>;
85
+ store(content: string, category?: string): Promise<{
86
+ success: boolean;
87
+ task_id?: string;
88
+ duplicate?: boolean;
89
+ existing?: string;
90
+ }>;
85
91
  list(limit?: number): Promise<any[]>;
86
92
  getStatus(): Promise<{
87
93
  initialized: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -516,6 +516,39 @@ class MemoryXPlugin {
516
516
  return false;
517
517
  }
518
518
  }
519
+ async store(content, category = "other") {
520
+ this.init();
521
+ if (!this.config.apiKey) {
522
+ log("Store failed: no API key");
523
+ return { success: false };
524
+ }
525
+ try {
526
+ const response = await fetch(`${this.apiBase}/v1/memories`, {
527
+ method: "POST",
528
+ headers: {
529
+ "Content-Type": "application/json",
530
+ "X-API-Key": this.config.apiKey
531
+ },
532
+ body: JSON.stringify({
533
+ content,
534
+ project_id: this.config.projectId,
535
+ metadata: { category, source: "function_call" }
536
+ })
537
+ });
538
+ if (!response.ok) {
539
+ const errorData = await response.json().catch(() => ({}));
540
+ log(`Store failed: ${response.status} ${JSON.stringify(errorData)}`);
541
+ return { success: false };
542
+ }
543
+ const data = await response.json();
544
+ log(`Stored memory, task_id: ${data.task_id}`);
545
+ return { success: true, task_id: data.task_id };
546
+ }
547
+ catch (e) {
548
+ log(`Store failed: ${e}`);
549
+ return { success: false };
550
+ }
551
+ }
519
552
  async list(limit = 10) {
520
553
  this.init();
521
554
  if (!this.config.apiKey) {
@@ -564,7 +597,7 @@ let plugin;
564
597
  export default {
565
598
  id: "memoryx-openclaw-plugin",
566
599
  name: "MemoryX Realtime Plugin",
567
- version: "1.1.16",
600
+ version: "1.1.17",
568
601
  description: "Real-time memory capture and recall for OpenClaw",
569
602
  register(api, pluginConfig) {
570
603
  api.logger.info("[MemoryX] Plugin registering...");
@@ -691,6 +724,68 @@ export default {
691
724
  }
692
725
  }
693
726
  }, { name: "memoryx_forget" });
727
+ api.registerTool({
728
+ name: "memoryx_store",
729
+ label: "MemoryX Store",
730
+ description: "Save important information to long-term memory. Use when user explicitly asks to remember something, or when you identify important user preferences, facts, or decisions that should be persisted.",
731
+ parameters: {
732
+ type: "object",
733
+ properties: {
734
+ content: {
735
+ type: "string",
736
+ description: "The information to remember. Should be a clear, concise statement. Examples: 'User prefers dark mode in all applications', 'User birthday is January 15th', 'User works as a software engineer at Acme Corp'"
737
+ },
738
+ category: {
739
+ type: "string",
740
+ enum: ["preference", "fact", "plan", "experience", "opinion", "other"],
741
+ description: "Category of the memory: preference (user likes/dislikes), fact (objective info), plan (future goals), experience (past events), opinion (user's views), other"
742
+ }
743
+ },
744
+ required: ["content"]
745
+ },
746
+ async execute(_toolCallId, params) {
747
+ const { content, category = "other" } = params;
748
+ if (!plugin) {
749
+ return {
750
+ content: [{ type: "text", text: "MemoryX plugin not initialized." }],
751
+ details: { error: "not_initialized" }
752
+ };
753
+ }
754
+ if (!content || content.trim().length < 5) {
755
+ return {
756
+ content: [{ type: "text", text: "Content too short. Please provide more meaningful information to remember." }],
757
+ details: { error: "content_too_short" }
758
+ };
759
+ }
760
+ try {
761
+ const result = await plugin.store(content.trim(), category);
762
+ if (result.success) {
763
+ return {
764
+ content: [{ type: "text", text: `Stored: "${content.slice(0, 100)}${content.length > 100 ? '...' : ''}"` }],
765
+ details: { action: "stored", task_id: result.task_id }
766
+ };
767
+ }
768
+ else if (result.duplicate) {
769
+ return {
770
+ content: [{ type: "text", text: `Similar memory already exists: "${result.existing}"` }],
771
+ details: { action: "duplicate" }
772
+ };
773
+ }
774
+ else {
775
+ return {
776
+ content: [{ type: "text", text: "Failed to store memory. Please try again." }],
777
+ details: { error: "store_failed" }
778
+ };
779
+ }
780
+ }
781
+ catch (error) {
782
+ return {
783
+ content: [{ type: "text", text: `Failed to store memory: ${error.message}` }],
784
+ details: { error: error.message }
785
+ };
786
+ }
787
+ }
788
+ }, { name: "memoryx_store" });
694
789
  api.registerTool({
695
790
  name: "memoryx_list",
696
791
  label: "MemoryX List",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "memoryx-openclaw-plugin",
3
3
  "name": "MemoryX Real-time Plugin",
4
- "version": "1.1.15",
4
+ "version": "1.1.17",
5
5
  "description": "Real-time memory capture and recall for OpenClaw",
6
6
  "kind": "memory",
7
7
  "main": "./dist/index.js",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@t0ken.ai/memoryx-openclaw-plugin",
3
- "version": "1.1.16",
3
+ "version": "1.1.17",
4
4
  "description": "MemoryX real-time memory capture and recall plugin for OpenClaw",
5
5
  "type": "module",
6
6
  "author": "MemoryX Team",