@memoryrelay/plugin-memoryrelay-ai 0.2.1 → 0.2.3

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
@@ -396,6 +396,24 @@ MIT © 2026 MemoryRelay
396
396
 
397
397
  ## Changelog
398
398
 
399
+ ### v0.2.3 (2026-02-13)
400
+
401
+ **Critical Fix:**
402
+ - Fixed API endpoint paths - removed duplicate `/memories` segment
403
+ - Changed `/v1/memories/memories` → `/v1/memories`
404
+ - Changed `/v1/memories/memories/{id}` → `/v1/memories/{id}`
405
+ - Fixed 405 Method Not Allowed errors
406
+ - All CRUD operations now work correctly
407
+
408
+ ### v0.2.2 (2026-02-13)
409
+
410
+ **Critical Fix:**
411
+ - Fixed tool registration API - changed `inputSchema` to `parameters`
412
+ - Fixed handler signature - changed `handler` to `execute` with `_id` parameter
413
+ - Tools now register correctly with OpenClaw
414
+ - Memory storage/recall/forget now functional
415
+ - Plugin shows as "available" instead of "unavailable"
416
+
399
417
  ### v0.2.1 (2026-02-13)
400
418
 
401
419
  **Bug Fix:**
package/index.ts CHANGED
@@ -80,7 +80,7 @@ class MemoryRelayClient {
80
80
  }
81
81
 
82
82
  async store(content: string, metadata?: Record<string, string>): Promise<Memory> {
83
- return this.request<Memory>("POST", "/v1/memories/memories", {
83
+ return this.request<Memory>("POST", "/v1/memories", {
84
84
  content,
85
85
  metadata,
86
86
  agent_id: this.agentId,
@@ -94,7 +94,7 @@ class MemoryRelayClient {
94
94
  ): Promise<SearchResult[]> {
95
95
  const response = await this.request<{ data: SearchResult[] }>(
96
96
  "POST",
97
- "/v1/memories/memories/search",
97
+ "/v1/memories/search",
98
98
  {
99
99
  query,
100
100
  limit,
@@ -114,11 +114,11 @@ class MemoryRelayClient {
114
114
  }
115
115
 
116
116
  async get(id: string): Promise<Memory> {
117
- return this.request<Memory>("GET", `/v1/memories/memories/${id}`);
117
+ return this.request<Memory>("GET", `/v1/memories/${id}`);
118
118
  }
119
119
 
120
120
  async delete(id: string): Promise<void> {
121
- await this.request<void>("DELETE", `/v1/memories/memories/${id}`);
121
+ await this.request<void>("DELETE", `/v1/memories/${id}`);
122
122
  }
123
123
 
124
124
  async health(): Promise<{ status: string }> {
@@ -183,7 +183,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
183
183
  name: "memory_store",
184
184
  description:
185
185
  "Store a new memory in MemoryRelay. Use this to save important information, facts, preferences, or context that should be remembered for future conversations.",
186
- inputSchema: {
186
+ parameters: {
187
187
  type: "object",
188
188
  properties: {
189
189
  content: {
@@ -198,7 +198,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
198
198
  },
199
199
  required: ["content"],
200
200
  },
201
- handler: async ({ content, metadata }: { content: string; metadata?: Record<string, string> }) => {
201
+ execute: async (_id, { content, metadata }: { content: string; metadata?: Record<string, string> }) => {
202
202
  try {
203
203
  const memory = await client.store(content, metadata);
204
204
  return {
@@ -227,7 +227,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
227
227
  name: "memory_recall",
228
228
  description:
229
229
  "Search memories using natural language. Returns the most relevant memories based on semantic similarity.",
230
- inputSchema: {
230
+ parameters: {
231
231
  type: "object",
232
232
  properties: {
233
233
  query: {
@@ -244,7 +244,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
244
244
  },
245
245
  required: ["query"],
246
246
  },
247
- handler: async ({ query, limit = 5 }: { query: string; limit?: number }) => {
247
+ execute: async (_id, { query, limit = 5 }: { query: string; limit?: number }) => {
248
248
  try {
249
249
  const results = await client.search(query, limit, cfg.recallThreshold || 0.3);
250
250
 
@@ -296,7 +296,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
296
296
  {
297
297
  name: "memory_forget",
298
298
  description: "Delete a memory by ID or search for memories to forget.",
299
- inputSchema: {
299
+ parameters: {
300
300
  type: "object",
301
301
  properties: {
302
302
  memoryId: {
@@ -309,7 +309,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
309
309
  },
310
310
  },
311
311
  },
312
- handler: async ({ memoryId, query }: { memoryId?: string; query?: string }) => {
312
+ execute: async (_id, { memoryId, query }: { memoryId?: string; query?: string }) => {
313
313
  if (memoryId) {
314
314
  try {
315
315
  await client.delete(memoryId);
@@ -3,7 +3,7 @@
3
3
  "kind": "memory",
4
4
  "name": "MemoryRelay AI",
5
5
  "description": "AI memory service using MemoryRelay API (api.memoryrelay.net)",
6
- "version": "0.2.1",
6
+ "version": "0.2.3",
7
7
  "uiHints": {
8
8
  "apiKey": {
9
9
  "label": "MemoryRelay API Key",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@memoryrelay/plugin-memoryrelay-ai",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "OpenClaw memory plugin for MemoryRelay API - long-term memory with semantic search",
5
5
  "type": "module",
6
6
  "main": "index.ts",