@xdarkicex/openclaw-memory-libravdb 1.9.4 → 1.9.5

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
@@ -404,6 +404,51 @@ The `grpcEndpointTlsCa` field is required for mTLS; the plugin will verify the s
404
404
  - **Dream promotion** promotes vetted dream diary bullets into an isolated
405
405
  `dream:{userId}` collection. See [Features](./docs/features.md).
406
406
 
407
+ ### Markdown Ingestion Filtering
408
+
409
+ By default, all markdown files under the configured roots are eligible for ingestion. Use `include` and `exclude` patterns to limit which files are processed:
410
+
411
+ ```json
412
+ {
413
+ "plugins": {
414
+ "entries": {
415
+ "libravdb-memory": {
416
+ "config": {
417
+ "markdownIngestionRoots": ["/Users/me/docs"],
418
+ "markdownIngestionInclude": ["**/projects/**", "**/work/**"],
419
+ "markdownIngestionExclude": ["**/personal/**", "**/.obsidian/**", "**/node_modules/**"]
420
+ }
421
+ }
422
+ }
423
+ }
424
+ }
425
+ ```
426
+
427
+ | Key | Type | Description |
428
+ |---|---|---|
429
+ | `markdownIngestionInclude` | `string[]` | Whitelist of glob patterns. Only matching files are ingested. Empty = all files (subject to `exclude`). |
430
+ | `markdownIngestionExclude` | `string[]` | Blacklist of glob patterns. Matching files are skipped. Defaults to `["**/node_modules/**", "**/.git/**", "**/dist/**", ...]`. |
431
+
432
+ The same options exist for Obsidian vaults:
433
+
434
+ ```json
435
+ {
436
+ "plugins": {
437
+ "entries": {
438
+ "libravdb-memory": {
439
+ "config": {
440
+ "markdownIngestionObsidianRoots": ["/Users/me/vault"],
441
+ "markdownIngestionObsidianInclude": ["**/journals/**", "**/daily/**"],
442
+ "markdownIngestionObsidianExclude": ["**/templates/**"]
443
+ }
444
+ }
445
+ }
446
+ }
447
+ }
448
+ ```
449
+
450
+ Glob patterns follow standard path matching: `**` matches any directory depth, `*` matches within a path segment. Both generic and Obsidian sources support these filters.
451
+
407
452
  ### Dream Promotion
408
453
 
409
454
  OpenClaw's dreaming cron writes AI-generated memory reflections to a dream diary
@@ -1207,8 +1207,8 @@ function escapeMemoryFactText(text) {
1207
1207
  const TOOL_CALL_BRACKET_RE = /\[tool:([^\]]+)\](?:\s*(?:\{[\s\S]*?\}|\[[\s\S]*?\]|".*?"))?/gi;
1208
1208
  // Matches raw JSON tool-call objects targeting a "name\" field
1209
1209
  const TOOL_CALL_JSON_RE = /\{[^\r\n]*"name"\s*:\s*"([^"]+)"[^\r\n]*(?:"arguments"|"args"|"toolCallId"|"tool_call_id"|"type"\s*:\s*"toolCall")[^\r\n]*\}/g;
1210
- // Matches older annotations, aggressively consuming trailing characters on the same line
1211
- const TOOL_RESULT_ANNOTATION_RE = /\[tool:[^\]]+\][^\n]*/g;
1210
+ // Strip only the [tool:name] annotation tag; preserve payload on the same line
1211
+ const TOOL_RESULT_ANNOTATION_RE = /\[tool:[^\]]+\]\s*/g;
1212
1212
  const OPENCLAW_BRACKET_DIRECTIVE_RE = /\[\[(?:reply_to_current|audio_as_voice|reply_to:[^\]\r\n]+)\]\]/g;
1213
1213
  const OPENCLAW_MEDIA_DIRECTIVE_LINE_RE = /^[ \t]*MEDIA:[^\r\n]*(?:\r?\n|$)/gmi;
1214
1214
  const OPENCLAW_INLINE_MEDIA_DIRECTIVE_RE = /(^|[>\s])MEDIA:[^\s<]*(?=\s|<|$)/gmi;
package/dist/index.js CHANGED
@@ -36489,7 +36489,7 @@ function escapeMemoryFactText(text) {
36489
36489
  }
36490
36490
  var TOOL_CALL_BRACKET_RE = /\[tool:([^\]]+)\](?:\s*(?:\{[\s\S]*?\}|\[[\s\S]*?\]|".*?"))?/gi;
36491
36491
  var TOOL_CALL_JSON_RE = /\{[^\r\n]*"name"\s*:\s*"([^"]+)"[^\r\n]*(?:"arguments"|"args"|"toolCallId"|"tool_call_id"|"type"\s*:\s*"toolCall")[^\r\n]*\}/g;
36492
- var TOOL_RESULT_ANNOTATION_RE = /\[tool:[^\]]+\][^\n]*/g;
36492
+ var TOOL_RESULT_ANNOTATION_RE = /\[tool:[^\]]+\]\s*/g;
36493
36493
  var OPENCLAW_BRACKET_DIRECTIVE_RE = /\[\[(?:reply_to_current|audio_as_voice|reply_to:[^\]\r\n]+)\]\]/g;
36494
36494
  var OPENCLAW_MEDIA_DIRECTIVE_LINE_RE = /^[ \t]*MEDIA:[^\r\n]*(?:\r?\n|$)/gmi;
36495
36495
  var OPENCLAW_INLINE_MEDIA_DIRECTIVE_RE = /(^|[>\s])MEDIA:[^\s<]*(?=\s|<|$)/gmi;
@@ -45520,7 +45520,7 @@ function createLibraVdbMemoryTools(getClient, cfg, logger = console) {
45520
45520
  return {
45521
45521
  name: "memory_search",
45522
45522
  label: "Memory Search",
45523
- 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.",
45523
+ 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.",
45524
45524
  parameters: MEMORY_SEARCH_SCHEMA,
45525
45525
  execute: async (_toolCallId, rawParams) => {
45526
45526
  const params = asToolParamsRecord(rawParams);
@@ -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.",
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.",
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": "Persistent vector memory with three-tier hybrid scoring",
5
- "version": "1.9.4",
5
+ "version": "1.9.5",
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.4",
3
+ "version": "1.9.5",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",