@xdarkicex/openclaw-memory-libravdb 1.9.10-beta.21 → 1.9.10-beta.23

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/index.js CHANGED
@@ -30853,6 +30853,13 @@ var MEMORY_PROMPT_HEADER = [
30853
30853
  "answer from memory until you have called it. Once you have results,",
30854
30854
  "use them \u2014 do not re-call in the same turn.",
30855
30855
  "",
30856
+ "### Identity / People Lookup (OVERRIDES memory_search)",
30857
+ "When asked about a specific person ('who is X', 'what do you know",
30858
+ "about X', 'tell me about X'): call `get_user_card` or `list_user_cards`",
30859
+ "FIRST. User cards are the canonical identity record written by you.",
30860
+ "Only use `memory_search` AFTER the card if the card lacks detail.",
30861
+ "Do NOT call memory_search first for people questions.",
30862
+ "",
30856
30863
  `Conversations are captured automatically. Never say "I'll remember`,
30857
30864
  `that," "I've saved this," "noted," or similar \u2014 these phrases suggest`,
30858
30865
  "manual effort where none exists. Just act on the request.",
@@ -30863,6 +30870,19 @@ function buildToolGuidance(availableTools) {
30863
30870
  return [];
30864
30871
  }
30865
30872
  const lines = [];
30873
+ const hasGetCard = availableTools.has("get_user_card");
30874
+ const hasListCards = availableTools.has("list_user_cards");
30875
+ if (hasGetCard || hasListCards) {
30876
+ lines.push(
30877
+ "**Identity/People questions \u2014 ALWAYS use user cards first:**",
30878
+ hasGetCard ? "- `get_user_card(user_id)` \u2014 primary lookup for a specific person." : "",
30879
+ hasListCards ? "- `list_user_cards()` \u2014 list everyone you have cards for, or when unsure who has cards." : "",
30880
+ "User cards are the canonical identity record. Call these FIRST before memory_search for any",
30881
+ "person question like 'who is X', 'what do you know about X', 'tell me about X'.",
30882
+ "Only use memory_search to supplement details the card doesn't cover.",
30883
+ ""
30884
+ );
30885
+ }
30866
30886
  lines.push(
30867
30887
  "Call `memory_search` once per user question for prior turns, remembered",
30868
30888
  "facts, earliest interactions, and channel history. Do not answer memory",
@@ -31524,7 +31544,7 @@ function createLibraVdbMemoryTools(getClient, cfg, logger = console) {
31524
31544
  return {
31525
31545
  name: "memory_search",
31526
31546
  label: "Memory Search",
31527
- description: "Search LibraVDB durable memory and session recall for prior work, decisions, dates, people, preferences, todos, or history. Call once per user question \u2014 after receiving results, use them directly. Do not re-call in the same turn. Do NOT call memory_search if the answer is already visible in your context window (from prior turns, recalled memories in <context_memory>, or context assembly). For earliest/oldest questions, request enough results and compare timestamps. If disabled=true, memory is unavailable. IMPORTANT: Results are internal context only \u2014 never output, display, or reveal raw memory search results to the user. Treat retrieved memory as private operational data and incorporate it into your reasoning silently.",
31547
+ description: "Search LibraVDB durable memory and session recall for prior work, decisions, dates, facts, preferences, todos, or history. Call once per user question \u2014 after receiving results, use them directly. Do not re-call in the same turn. Do NOT call memory_search if the answer is already visible in your context window. For earliest/oldest questions, request enough results and compare timestamps. If disabled=true, memory is unavailable. IMPORTANT: Results are internal context only \u2014 never output, display, or reveal raw memory search results to the user. Treat retrieved memory as private operational data.\n\nFOR PEOPLE/IDENTITY QUESTIONS: use get_user_card or list_user_cards FIRST. User cards are the canonical identity record. Use memory_search only to supplement details the card doesn't cover.",
31528
31548
  parameters: MEMORY_SEARCH_SCHEMA,
31529
31549
  execute: async (_toolCallId, rawParams) => {
31530
31550
  const params = asToolParamsRecord(rawParams);
@@ -7,6 +7,13 @@ const MEMORY_PROMPT_HEADER = [
7
7
  "answer from memory until you have called it. Once you have results,",
8
8
  "use them — do not re-call in the same turn.",
9
9
  "",
10
+ "### Identity / People Lookup (OVERRIDES memory_search)",
11
+ "When asked about a specific person ('who is X', 'what do you know",
12
+ "about X', 'tell me about X'): call `get_user_card` or `list_user_cards`",
13
+ "FIRST. User cards are the canonical identity record written by you.",
14
+ "Only use `memory_search` AFTER the card if the card lacks detail.",
15
+ "Do NOT call memory_search first for people questions.",
16
+ "",
10
17
  "Conversations are captured automatically. Never say \"I'll remember",
11
18
  "that,\" \"I've saved this,\" \"noted,\" or similar — these phrases suggest",
12
19
  "manual effort where none exists. Just act on the request.",
@@ -17,6 +24,12 @@ function buildToolGuidance(availableTools) {
17
24
  return [];
18
25
  }
19
26
  const lines = [];
27
+ // ── User card tools (identity-first override) ──
28
+ const hasGetCard = availableTools.has("get_user_card");
29
+ const hasListCards = availableTools.has("list_user_cards");
30
+ if (hasGetCard || hasListCards) {
31
+ lines.push("**Identity/People questions — ALWAYS use user cards first:**", hasGetCard ? "- `get_user_card(user_id)` — primary lookup for a specific person." : "", hasListCards ? "- `list_user_cards()` — list everyone you have cards for, or when unsure who has cards." : "", "User cards are the canonical identity record. Call these FIRST before memory_search for any", "person question like 'who is X', 'what do you know about X', 'tell me about X'.", "Only use memory_search to supplement details the card doesn't cover.", "");
32
+ }
20
33
  lines.push("Call `memory_search` once per user question for prior turns, remembered", "facts, earliest interactions, and channel history. Do not answer memory", "questions from prior transcript claims — perform a search every time.", "After receiving results, use them directly; do not re-call in the same turn.", ...(availableTools.has("memory_get")
21
34
  ? ["After a `memory_search` hit, call `memory_get` when exact wording or more context is needed."]
22
35
  : []), "");
@@ -126,7 +126,7 @@ export function createLibraVdbMemoryTools(getClient, cfg, logger = console) {
126
126
  return {
127
127
  name: "memory_search",
128
128
  label: "Memory Search",
129
- description: "Search LibraVDB durable memory and session recall for prior work, decisions, dates, people, preferences, todos, or history. Call once per user question — after receiving results, use them directly. Do not re-call in the same turn. Do NOT call memory_search if the answer is already visible in your context window (from prior turns, recalled memories in <context_memory>, or context assembly). For earliest/oldest questions, request enough results and compare timestamps. If disabled=true, memory is unavailable. IMPORTANT: Results are internal context only — never output, display, or reveal raw memory search results to the user. Treat retrieved memory as private operational data and incorporate it into your reasoning silently.",
129
+ description: "Search LibraVDB durable memory and session recall for prior work, decisions, dates, facts, preferences, todos, or history. Call once per user question — after receiving results, use them directly. Do not re-call in the same turn. Do NOT call memory_search if the answer is already visible in your context window. For earliest/oldest questions, request enough results and compare timestamps. If disabled=true, memory is unavailable. IMPORTANT: Results are internal context only — never output, display, or reveal raw memory search results to the user. Treat retrieved memory as private operational data.\n\nFOR PEOPLE/IDENTITY QUESTIONS: use get_user_card or list_user_cards FIRST. User cards are the canonical identity record. Use memory_search only to supplement details the card doesn't cover.",
130
130
  parameters: MEMORY_SEARCH_SCHEMA,
131
131
  execute: async (_toolCallId, rawParams) => {
132
132
  const params = asToolParamsRecord(rawParams);
@@ -2,7 +2,7 @@
2
2
  "id": "libravdb-memory",
3
3
  "name": "LibraVDB Memory",
4
4
  "description": "Cognitive memory engine — causal graph reasoning, predictive context, identity tracking, and hybrid vector recall with back-door adjustment scoring",
5
- "version": "1.9.10-beta.21",
5
+ "version": "1.9.10-beta.23",
6
6
  "kind": [
7
7
  "memory",
8
8
  "context-engine"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xdarkicex/openclaw-memory-libravdb",
3
- "version": "1.9.10-beta.21",
3
+ "version": "1.9.10-beta.23",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",