@memoryrelay/plugin-memoryrelay-ai 0.15.6 → 0.15.7

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
@@ -5,7 +5,7 @@
5
5
  Persistent memory, architectural decisions, reusable patterns, and project orchestration for AI agents.
6
6
 
7
7
  [![npm version](https://img.shields.io/npm/v/@memoryrelay/plugin-memoryrelay-ai.svg)](https://www.npmjs.com/package/@memoryrelay/plugin-memoryrelay-ai)
8
- [![OpenClaw Compatible](https://img.shields.io/badge/OpenClaw-2026.2.26+-blue.svg)](https://openclaw.ai)
8
+ [![OpenClaw Compatible](https://img.shields.io/badge/OpenClaw-2026.2.0+-blue.svg)](https://openclaw.ai)
9
9
 
10
10
  ## Why MemoryRelay?
11
11
 
@@ -23,7 +23,7 @@ MemoryRelay is designed for engineering teams managing complex, long-running pro
23
23
  | Auto-capture with privacy tiers | Yes (off/conservative/smart/aggressive) | Basic | No |
24
24
  | V2 Async Storage | Yes | No | No |
25
25
  | Direct commands | 17 | ~5 | 0 |
26
- | Lifecycle hooks | 13 | 0 | 0 |
26
+ | Lifecycle hooks | 14 | 0 | 0 |
27
27
  | Tools | 42 | ~10 | 0 |
28
28
 
29
29
  ## Quick Start
@@ -382,7 +382,6 @@ Then inspect with `/memory-logs` or `/memory-metrics` to identify slow or failin
382
382
  ### Known Limitations
383
383
 
384
384
  - `memory_batch_store`: May return 500 errors on large batches (use individual `memory_store` as workaround)
385
- - `memory_context`: Returns 405 Method Not Allowed on some API versions (use `memory_recall` instead)
386
385
 
387
386
  ## Development
388
387
 
package/index.ts CHANGED
@@ -1625,7 +1625,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
1625
1625
  // Helper to check if a tool is enabled (by group)
1626
1626
  // ========================================================================
1627
1627
 
1628
- // Tool group mapping — matches MCP server's TOOL_GROUPS
1628
+ // Plugin tool group mapping
1629
1629
  const TOOL_GROUPS: Record<string, string[]> = {
1630
1630
  memory: [
1631
1631
  "memory_store", "memory_recall", "memory_forget", "memory_list",
@@ -1701,7 +1701,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
1701
1701
  },
1702
1702
  dedup_threshold: {
1703
1703
  type: "number",
1704
- description: "Similarity threshold for deduplication (0-1). Default 0.9.",
1704
+ description: "Similarity threshold for deduplication (0-1). Default 0.95.",
1705
1705
  },
1706
1706
  project: {
1707
1707
  type: "string",
@@ -2997,6 +2997,11 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
2997
2997
  description: "Tags for the new decision.",
2998
2998
  items: { type: "string" },
2999
2999
  },
3000
+ metadata: {
3001
+ type: "object",
3002
+ description: "Optional key-value metadata to attach to the new decision.",
3003
+ additionalProperties: { type: "string" },
3004
+ },
3000
3005
  },
3001
3006
  required: ["id", "title", "rationale"],
3002
3007
  },
@@ -3008,6 +3013,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
3008
3013
  rationale: string;
3009
3014
  alternatives?: string;
3010
3015
  tags?: string[];
3016
+ metadata?: Record<string, string>;
3011
3017
  },
3012
3018
  ) => {
3013
3019
  try {
@@ -3017,6 +3023,7 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
3017
3023
  args.rationale,
3018
3024
  args.alternatives,
3019
3025
  args.tags,
3026
+ args.metadata,
3020
3027
  );
3021
3028
  return {
3022
3029
  content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
@@ -3843,6 +3850,10 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
3843
3850
  description: "Memory tier: hot, warm, or cold.",
3844
3851
  enum: ["hot", "warm", "cold"],
3845
3852
  },
3853
+ webhook_url: {
3854
+ type: "string",
3855
+ description: "Optional webhook URL to notify when async storage completes.",
3856
+ },
3846
3857
  },
3847
3858
  required: ["content"],
3848
3859
  },
@@ -3854,13 +3865,14 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
3854
3865
  project?: string;
3855
3866
  importance?: number;
3856
3867
  tier?: string;
3868
+ webhook_url?: string;
3857
3869
  },
3858
3870
  ) => {
3859
3871
  try {
3860
- const { content, metadata, importance, tier } = args;
3872
+ const { content, metadata, importance, tier, webhook_url } = args;
3861
3873
  let project = args.project;
3862
3874
  if (!project && defaultProject) project = defaultProject;
3863
- const result = await client.storeAsync(content, metadata, project, importance, tier);
3875
+ const result = await client.storeAsync(content, metadata, project, importance, tier, webhook_url);
3864
3876
  return {
3865
3877
  content: [
3866
3878
  {
@@ -3962,6 +3974,14 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
3962
3974
  description: "Memory IDs to exclude from results.",
3963
3975
  items: { type: "string" },
3964
3976
  },
3977
+ llm_api_url: {
3978
+ type: "string",
3979
+ description: "Optional custom LLM API URL for AI summarization.",
3980
+ },
3981
+ llm_model: {
3982
+ type: "string",
3983
+ description: "Optional LLM model name for AI summarization.",
3984
+ },
3965
3985
  },
3966
3986
  required: ["query"],
3967
3987
  },
@@ -3974,6 +3994,8 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
3974
3994
  ai_enhanced?: boolean;
3975
3995
  search_mode?: "semantic" | "hybrid" | "keyword";
3976
3996
  exclude_memory_ids?: string[];
3997
+ llm_api_url?: string;
3998
+ llm_model?: string;
3977
3999
  },
3978
4000
  ) => {
3979
4001
  try {
@@ -3983,6 +4005,8 @@ export default async function plugin(api: OpenClawPluginApi): Promise<void> {
3983
4005
  aiEnhanced: args.ai_enhanced,
3984
4006
  searchMode: args.search_mode,
3985
4007
  excludeMemoryIds: args.exclude_memory_ids,
4008
+ llmApiUrl: args.llm_api_url,
4009
+ llmModel: args.llm_model,
3986
4010
  });
3987
4011
  return {
3988
4012
  content: [
@@ -2,8 +2,8 @@
2
2
  "id": "plugin-memoryrelay-ai",
3
3
  "kind": "memory",
4
4
  "name": "MemoryRelay AI",
5
- "description": "MemoryRelay v0.15.6 - Long-term memory with 42 tools, 17 commands, V2 async, sessions, decisions, patterns & projects (api.memoryrelay.net)",
6
- "version": "0.15.6",
5
+ "description": "MemoryRelay v0.15.7 - Long-term memory with 42 tools, 17 commands, V2 async, sessions, decisions, patterns & projects (api.memoryrelay.net)",
6
+ "version": "0.15.7",
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.15.6",
3
+ "version": "0.15.7",
4
4
  "description": "OpenClaw memory plugin for MemoryRelay API - 42 tools, 17 commands, V2 async, sessions, decisions, patterns, projects & semantic search",
5
5
  "type": "module",
6
6
  "main": "index.ts",
@@ -13,7 +13,7 @@ Decisions are **choices with rationale and alternatives considered**. Plain fact
13
13
  |------|-----------|---------|
14
14
  | `decision_record` | `decision_record(title, rationale, alternatives?, project?, tags?, status?)` | Record a new decision with reasoning |
15
15
  | `decision_list` | `decision_list(project?, status?, tags?, limit?)` | List decisions, optionally filtered |
16
- | `decision_supersede` | `decision_supersede(old_id, new_title, new_rationale, tags?)` | Replace an outdated decision |
16
+ | `decision_supersede` | `decision_supersede(id, new_title, new_rationale, tags?)` | Replace an outdated decision |
17
17
  | `decision_check` | `decision_check(query, project?, limit?, threshold?)` | Semantic search for conflicting decisions |
18
18
 
19
19
  ## Workflow
@@ -15,7 +15,7 @@ Entities turn flat memory storage into a connected knowledge graph. Create entit
15
15
  | `entity_link` | `entity_link(entity_id, memory_id, relationship?)` | Connect an entity to a memory |
16
16
  | `entity_list` | `entity_list(limit?, offset?)` | List entities with pagination |
17
17
  | `entity_graph` | `entity_graph(entity_id, depth?, max_neighbors?)` | Explore an entity's neighborhood |
18
- | `memory_context` | `memory_context(query, token_budget?)` | Enriched recall with entity connections (see `memory-workflow` skill) |
18
+ | `memory_context` | `memory_context(query, max_tokens?)` | Enriched recall with entity connections (see `memory-workflow` skill) |
19
19
 
20
20
  ## Entity Types
21
21
 
@@ -40,7 +40,7 @@ Call `session_end(session_id, summary)` with a meaningful summary. This becomes
40
40
 
41
41
  ## Deduplication
42
42
 
43
- Always pass `deduplicate=true` on `memory_store` and `memory_batch_store`. The default threshold is 0.9 similarity. Skipping this clutters search results with near-duplicates.
43
+ Always pass `deduplicate=true` on `memory_store` and `memory_batch_store`. The default threshold is 0.95 similarity. Skipping this clutters search results with near-duplicates.
44
44
 
45
45
  ## Metadata Best Practices
46
46