forked from CortexReach/memory-lancedb-pro
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathopenclaw.plugin.json
More file actions
830 lines (830 loc) · 27.6 KB
/
openclaw.plugin.json
File metadata and controls
830 lines (830 loc) · 27.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
{
"id": "memory-lancedb-pro",
"name": "Memory (LanceDB Pro)",
"description": "Enhanced LanceDB-backed long-term memory with hybrid retrieval, multi-scope isolation, long-context chunking, and management CLI",
"version": "1.1.0-beta.6",
"kind": "memory",
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"embedding": {
"type": "object",
"additionalProperties": false,
"properties": {
"provider": {
"type": "string",
"const": "openai-compatible"
},
"apiKey": {
"oneOf": [
{
"type": "string",
"minLength": 1
},
{
"type": "array",
"items": {
"type": "string",
"minLength": 1
},
"minItems": 1
}
],
"description": "Single API key or array of keys for round-robin rotation"
},
"model": {
"type": "string"
},
"baseURL": {
"type": "string"
},
"dimensions": {
"type": "integer",
"minimum": 1
},
"taskQuery": {
"type": "string",
"description": "Embedding task for queries (provider-specific, e.g. Jina: retrieval.query)"
},
"taskPassage": {
"type": "string",
"description": "Embedding task for passages/documents (provider-specific, e.g. Jina: retrieval.passage)"
},
"normalized": {
"type": "boolean",
"description": "Request normalized embeddings when supported by the provider (e.g. Jina v5)"
},
"chunking": {
"type": "boolean",
"default": true,
"description": "Enable automatic chunking for documents exceeding embedding context limits"
}
},
"required": []
},
"dbPath": {
"type": "string"
},
"enableManagementTools": {
"type": "boolean",
"default": false,
"description": "Enable management/debug tools such as memory_list, memory_stats, and governance-oriented self-improvement review/extract actions"
},
"sessionStrategy": {
"type": "string",
"enum": [
"memoryReflection",
"systemSessionMemory",
"none"
],
"default": "systemSessionMemory",
"description": "Choose session pipeline: plugin memory-reflection, built-in session-memory, or none"
},
"autoCapture": {
"type": "boolean"
},
"autoRecall": {
"type": "boolean",
"default": false
},
"autoRecallMinLength": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 15,
"description": "Minimum prompt length (in characters) to trigger auto-recall. Prompts shorter than this are skipped. Default: 15 for English, 6 for CJK."
},
"autoRecallMinRepeated": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"default": 0,
"description": "Minimum number of turns before the same memory can be recalled again in the same session. Set to 0 to disable deduplication (default behavior: inject all memories)."
},
"autoRecallTopK": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 3,
"description": "Maximum number of rows injected into <relevant-memories> for each turn."
},
"autoRecallSelectionMode": {
"type": "string",
"enum": [
"mmr",
"legacy",
"setwise-v2"
],
"default": "mmr",
"description": "Generic Auto-Recall final top-k mode. mmr keeps direct truncation after post-processing as the canonical mode; legacy is accepted as a backward-compatible alias to mmr; setwise-v2 enables set-wise final selection with higher diversity/coverage but potentially lower average per-item relevance."
},
"autoRecallCategories": {
"type": "array",
"items": {
"type": "string",
"enum": [
"preference",
"fact",
"decision",
"entity",
"other",
"reflection"
]
},
"default": [
"preference",
"fact",
"decision",
"entity",
"other"
],
"description": "Allowlist of memory categories eligible for generic Auto-Recall."
},
"autoRecallExcludeReflection": {
"type": "boolean",
"default": true,
"description": "Exclude category=reflection rows from generic Auto-Recall."
},
"autoRecallMaxAgeDays": {
"type": "integer",
"minimum": 1,
"maximum": 3650,
"default": 30,
"description": "Drop Auto-Recall candidates older than this many days."
},
"autoRecallMaxEntriesPerKey": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 10,
"description": "Per normalized text key, keep only the most recent N entries before Auto-Recall final trimming."
},
"captureAssistant": {
"type": "boolean"
},
"retrieval": {
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"type": "string",
"enum": [
"hybrid",
"vector"
],
"default": "hybrid"
},
"vectorWeight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.7
},
"bm25Weight": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.3
},
"minScore": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.3
},
"rerank": {
"type": "string",
"enum": [
"cross-encoder",
"lightweight",
"none"
],
"default": "cross-encoder"
},
"rerankApiKey": {
"type": "string",
"description": "API key for reranker service (enables cross-encoder reranking)"
},
"rerankModel": {
"type": "string",
"default": "jina-reranker-v3",
"description": "Reranker model name"
},
"rerankEndpoint": {
"type": "string",
"default": "https://api.jina.ai/v1/rerank",
"description": "Reranker API endpoint URL. Compatible with Jina, SiliconFlow, Pinecone, or any service with a similar interface."
},
"rerankProvider": {
"type": "string",
"enum": [
"jina",
"siliconflow",
"voyage",
"pinecone",
"vllm"
],
"default": "jina",
"description": "Reranker provider format. Determines request/response shape and auth header. Use 'vllm' for Docker Model Runner."
},
"candidatePoolSize": {
"type": "integer",
"minimum": 10,
"maximum": 100,
"default": 20
},
"recencyHalfLifeDays": {
"type": "number",
"minimum": 0,
"maximum": 365,
"default": 14,
"description": "Half-life in days for recency boost. Newer memories get higher scores. Set 0 to disable."
},
"recencyWeight": {
"type": "number",
"minimum": 0,
"maximum": 0.5,
"default": 0.1,
"description": "Maximum recency boost factor added to score"
},
"filterNoise": {
"type": "boolean",
"default": true,
"description": "Filter out noise memories (agent denials, meta-questions, boilerplate)"
},
"lengthNormAnchor": {
"type": "integer",
"minimum": 0,
"maximum": 5000,
"default": 500,
"description": "Length normalization anchor in chars. Entries longer than this get score penalized. Set 0 to disable."
},
"hardMinScore": {
"type": "number",
"minimum": 0,
"maximum": 1,
"default": 0.35,
"description": "Hard cutoff after all scoring stages. Results below this score are discarded."
},
"timeDecayHalfLifeDays": {
"type": "number",
"minimum": 0,
"maximum": 365,
"default": 60,
"description": "Time decay half-life in days. Old entries lose score gradually. Floor at 0.5x. Set 0 to disable."
},
"reinforcementFactor": {
"type": "number",
"minimum": 0,
"maximum": 2,
"default": 0.5,
"description": "Access reinforcement factor for time decay. Frequently recalled memories decay slower. 0 to disable."
},
"maxHalfLifeMultiplier": {
"type": "number",
"minimum": 1,
"maximum": 10,
"default": 3,
"description": "Maximum half-life multiplier from access reinforcement. Prevents frequently accessed memories from becoming immortal."
}
}
},
"sessionMemory": {
"type": "object",
"additionalProperties": false,
"description": "Deprecated legacy switch. Kept for compatibility and mapped to sessionStrategy.",
"properties": {
"enabled": {
"type": "boolean",
"description": "Deprecated. true -> sessionStrategy=systemSessionMemory, false -> sessionStrategy=none."
},
"messageCount": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 15,
"description": "Legacy compatibility field. Mapped to memoryReflection.messageCount."
}
}
},
"selfImprovement": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean",
"default": true
},
"beforeResetNote": {
"type": "boolean",
"default": true
},
"skipSubagentBootstrap": {
"type": "boolean",
"default": true
},
"ensureLearningFiles": {
"type": "boolean",
"default": true
}
}
},
"memoryReflection": {
"type": "object",
"additionalProperties": false,
"properties": {
"storeToLanceDB": {
"type": "boolean",
"default": true
},
"injectMode": {
"type": "string",
"enum": [
"inheritance-only",
"inheritance+derived"
],
"default": "inheritance+derived"
},
"agentId": {
"type": "string",
"description": "Optional dedicated agent id used to run reflection generation (for example: memory-distiller)."
},
"messageCount": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"default": 120
},
"maxInputChars": {
"type": "integer",
"minimum": 1000,
"maximum": 200000,
"default": 24000
},
"timeoutMs": {
"type": "integer",
"minimum": 1000,
"maximum": 120000,
"default": 20000
},
"thinkLevel": {
"type": "string",
"enum": [
"off",
"minimal",
"low",
"medium",
"high"
],
"default": "medium"
},
"errorReminderMaxEntries": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 3
},
"dedupeErrorSignals": {
"type": "boolean",
"default": true
},
"recall": {
"type": "object",
"additionalProperties": false,
"properties": {
"mode": {
"type": "string",
"enum": [
"fixed",
"dynamic"
],
"default": "fixed"
},
"topK": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"default": 6
},
"includeKinds": {
"type": "array",
"items": {
"type": "string",
"enum": [
"invariant",
"derived"
]
},
"default": [
"invariant"
]
},
"maxAgeDays": {
"type": "integer",
"minimum": 1,
"maximum": 3650,
"default": 45
},
"maxEntriesPerKey": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"default": 10
},
"minRepeated": {
"type": "integer",
"minimum": 0,
"maximum": 100,
"default": 2
},
"minScore": {
"type": "number",
"minimum": 0,
"maximum": 5,
"default": 0.18
},
"minPromptLength": {
"type": "integer",
"minimum": 1,
"maximum": 200,
"default": 8
}
}
}
}
},
"scopes": {
"type": "object",
"additionalProperties": false,
"properties": {
"default": {
"type": "string",
"default": "global"
},
"definitions": {
"type": "object",
"additionalProperties": {
"type": "object",
"properties": {
"description": {
"type": "string"
}
}
}
},
"agentAccess": {
"type": "object",
"additionalProperties": {
"type": "array",
"items": {
"type": "string"
}
}
}
}
},
"mdMirror": {
"type": "object",
"additionalProperties": false,
"properties": {
"enabled": {
"type": "boolean",
"default": false,
"description": "Enable dual-write: store memories in both LanceDB and human-readable Markdown files"
},
"dir": {
"type": "string",
"description": "Fallback directory for Markdown mirror files when agent workspace is unknown"
}
}
}
},
"required": [
"embedding"
]
},
"uiHints": {
"embedding.apiKey": {
"label": "API Key(s)",
"sensitive": true,
"placeholder": "sk-proj-... or [\"key1\", \"key2\"] for rotation",
"help": "Single API key or array of keys for round-robin rotation with automatic failover on rate limits (or use ${OPENAI_API_KEY}; use a dummy value for keyless local endpoints)"
},
"embedding.model": {
"label": "Embedding Model",
"placeholder": "text-embedding-3-small",
"help": "Embedding model name (e.g. text-embedding-3-small, gemini-embedding-001, nomic-embed-text)"
},
"embedding.baseURL": {
"label": "Base URL",
"placeholder": "https://api.openai.com/v1",
"help": "Custom base URL for OpenAI-compatible embedding endpoints (e.g. https://generativelanguage.googleapis.com/v1beta/openai/ for Gemini, http://localhost:11434/v1 for Ollama)",
"advanced": true
},
"embedding.dimensions": {
"label": "Vector Dimensions",
"placeholder": "auto-detected from model",
"help": "Override vector dimensions for custom models not in the built-in lookup table",
"advanced": true
},
"embedding.taskQuery": {
"label": "Query Task",
"placeholder": "retrieval.query",
"help": "Optional task selector for query embeddings (Jina: retrieval.query). If unset, no task field is sent.",
"advanced": true
},
"embedding.taskPassage": {
"label": "Passage Task",
"placeholder": "retrieval.passage",
"help": "Optional task selector for passage/document embeddings (Jina: retrieval.passage). If unset, no task field is sent.",
"advanced": true
},
"embedding.normalized": {
"label": "Normalized Embeddings",
"help": "Request normalized embeddings when the provider supports it (Jina v5). If unset, the field is not sent.",
"advanced": true
},
"embedding.chunking": {
"label": "Auto-Chunk Documents",
"help": "Automatically split long documents into chunks when they exceed embedding context limits. Set to false to disable and let the model fail on long documents.",
"advanced": true
},
"dbPath": {
"label": "Database Path",
"placeholder": "~/.openclaw/memory/lancedb-pro",
"help": "Directory path for the LanceDB database files",
"advanced": true
},
"autoCapture": {
"label": "Auto-Capture",
"help": "Automatically capture important information from conversations"
},
"autoRecall": {
"label": "Auto-Recall",
"help": "Automatically inject relevant memories into context"
},
"autoRecallMinLength": {
"label": "Auto-Recall Min Length",
"help": "Minimum prompt length to trigger auto-recall (shorter prompts are skipped). Default: 15 chars for English, 6 for CJK.",
"advanced": true
},
"autoRecallMinRepeated": {
"label": "Auto-Recall Min Repeated",
"help": "Minimum number of conversation turns before a specific memory can be re-injected in the same session.",
"advanced": true
},
"autoRecallTopK": {
"label": "Auto-Recall Top K",
"help": "Maximum rows injected into <relevant-memories> each turn.",
"advanced": true
},
"autoRecallSelectionMode": {
"label": "Auto-Recall Selection Mode",
"help": "Generic final top-k mode: mmr is the canonical direct-truncation mode; legacy remains a backward-compatible alias to mmr; setwise-v2 enables a more diverse final selector with possible average relevance tradeoffs.",
"advanced": true
},
"autoRecallCategories": {
"label": "Auto-Recall Categories",
"help": "Allowlist of categories eligible for generic auto-recall.",
"advanced": true
},
"autoRecallExcludeReflection": {
"label": "Exclude Reflection From Auto-Recall",
"help": "Exclude category=reflection rows from <relevant-memories>.",
"advanced": true
},
"autoRecallMaxAgeDays": {
"label": "Auto-Recall Max Age (days)",
"help": "Drop auto-recall candidates older than this many days.",
"advanced": true
},
"autoRecallMaxEntriesPerKey": {
"label": "Auto-Recall Max Entries Per Key",
"help": "Per normalized text key, keep only the most recent N entries before top-k trimming.",
"advanced": true
},
"captureAssistant": {
"label": "Capture Assistant Messages",
"help": "Also auto-capture assistant messages (default false to reduce memory pollution)",
"advanced": true
},
"retrieval.mode": {
"label": "Retrieval Mode",
"help": "Use hybrid search (vector + BM25) or vector-only for backward compatibility",
"advanced": true
},
"retrieval.vectorWeight": {
"label": "Vector Search Weight",
"help": "Weight for vector similarity in hybrid search (0-1)",
"advanced": true
},
"retrieval.bm25Weight": {
"label": "BM25 Search Weight",
"help": "Weight for BM25 keyword search in hybrid search (0-1)",
"advanced": true
},
"retrieval.minScore": {
"label": "Minimum Score Threshold",
"help": "Drop results below this relevance score (0-1)",
"advanced": true
},
"retrieval.rerank": {
"label": "Reranking Mode",
"help": "Re-score fused results for better quality (cross-encoder uses configured reranker API)",
"advanced": true
},
"retrieval.rerankApiKey": {
"label": "Reranker API Key",
"sensitive": true,
"placeholder": "jina_... / sk-... / pcsk_...",
"help": "Reranker API key for cross-encoder reranking",
"advanced": true
},
"retrieval.rerankModel": {
"label": "Reranker Model",
"placeholder": "jina-reranker-v3",
"help": "Reranker model name (e.g. jina-reranker-v3, BAAI/bge-reranker-v2-m3)",
"advanced": true
},
"retrieval.rerankEndpoint": {
"label": "Reranker Endpoint",
"placeholder": "https://api.jina.ai/v1/rerank",
"help": "Custom reranker API endpoint URL",
"advanced": true
},
"retrieval.rerankProvider": {
"label": "Reranker Provider",
"help": "Provider format: jina (default), siliconflow, voyage, pinecone, or vllm (Docker Model Runner)",
"advanced": true
},
"retrieval.candidatePoolSize": {
"label": "Candidate Pool Size",
"help": "Number of candidates to fetch before fusion and reranking",
"advanced": true
},
"retrieval.lengthNormAnchor": {
"label": "Length Normalization Anchor",
"help": "Entries longer than this (chars) get score penalized to prevent long entries dominating. 0 = disabled.",
"advanced": true
},
"retrieval.hardMinScore": {
"label": "Hard Minimum Score",
"help": "Discard results below this score after all scoring stages. Higher = fewer but more relevant results.",
"advanced": true
},
"retrieval.timeDecayHalfLifeDays": {
"label": "Time Decay Half-Life",
"help": "Old entries lose score over this many days. Floor at 0.5x. 0 = disabled.",
"advanced": true
},
"sessionMemory.enabled": {
"label": "Session Memory (Deprecated)",
"help": "Legacy compatibility: true maps to systemSessionMemory, false maps to none.",
"advanced": true
},
"sessionMemory.messageCount": {
"label": "Session Message Count (Legacy)",
"help": "Legacy compatibility field; mapped to memoryReflection.messageCount.",
"advanced": true
},
"sessionStrategy": {
"label": "Session Strategy",
"help": "memoryReflection / systemSessionMemory / none",
"advanced": true
},
"selfImprovement.enabled": {
"label": "Self-Improvement",
"help": "Enable self-improvement reminder and governance tools"
},
"selfImprovement.beforeResetNote": {
"label": "Reset Reminder Note",
"help": "Append /note reminder before /new and /reset",
"advanced": true
},
"selfImprovement.skipSubagentBootstrap": {
"label": "Skip Subagent Bootstrap",
"help": "Do not inject reminder file into subagent bootstrap context",
"advanced": true
},
"selfImprovement.ensureLearningFiles": {
"label": "Ensure Learning Files",
"help": "Auto-create .learnings files when missing",
"advanced": true
},
"memoryReflection.storeToLanceDB": {
"label": "Store Reflection To LanceDB",
"help": "Persist reflection event + item rows to LanceDB (effective only under memoryReflection strategy)",
"advanced": true
},
"memoryReflection.injectMode": {
"label": "Reflection Inject Mode",
"help": "inheritance-only or inheritance+derived",
"advanced": true
},
"memoryReflection.agentId": {
"label": "Reflection Agent Id",
"help": "Optional dedicated agent id used for reflection generation (e.g. memory-distiller)",
"advanced": true
},
"memoryReflection.messageCount": {
"label": "Reflection Message Count",
"help": "Recent messages included in reflection input",
"advanced": true
},
"memoryReflection.maxInputChars": {
"label": "Reflection Max Input Chars",
"help": "Max prompt chars sent to reflection run",
"advanced": true
},
"memoryReflection.timeoutMs": {
"label": "Reflection Timeout (ms)",
"help": "Timeout for reflection run",
"advanced": true
},
"memoryReflection.thinkLevel": {
"label": "Reflection Think Level",
"help": "off/minimal/low/medium/high",
"advanced": true
},
"memoryReflection.errorReminderMaxEntries": {
"label": "Error Reminder Max Entries",
"help": "Max recent error hints injected into prompt",
"advanced": true
},
"memoryReflection.dedupeErrorSignals": {
"label": "Dedupe Error Signals",
"help": "Deduplicate repeated error signatures per session",
"advanced": true
},
"memoryReflection.recall.mode": {
"label": "Reflection-Recall Mode",
"help": "fixed keeps compatibility inheritance; dynamic enables prompt-gated Reflection-Recall.",
"advanced": true
},
"memoryReflection.recall.topK": {
"label": "Reflection-Recall Top K",
"help": "Maximum rows injected into <inherited-rules> in dynamic mode.",
"advanced": true
},
"memoryReflection.recall.includeKinds": {
"label": "Reflection-Recall Include Kinds",
"help": "Which reflection item kinds are considered in dynamic mode (invariant/derived).",
"advanced": true
},
"memoryReflection.recall.maxAgeDays": {
"label": "Reflection-Recall Max Age (days)",
"help": "Drop dynamic reflection candidates older than this many days.",
"advanced": true
},
"memoryReflection.recall.maxEntriesPerKey": {
"label": "Reflection-Recall Max Entries Per Key",
"help": "Per normalized key, keep only the most recent N rows before dynamic aggregation.",
"advanced": true
},
"memoryReflection.recall.minRepeated": {
"label": "Reflection-Recall Min Repeated",
"help": "Minimum turn gap before re-injecting the same dynamic reflection row in one session.",
"advanced": true
},
"memoryReflection.recall.minScore": {
"label": "Reflection-Recall Min Score",
"help": "Minimum aggregated score required for dynamic reflection injection.",
"advanced": true
},
"memoryReflection.recall.minPromptLength": {
"label": "Reflection-Recall Min Prompt Length",
"help": "Prompts shorter than this are skipped in dynamic reflection mode.",
"advanced": true
},
"scopes.default": {
"label": "Default Scope",
"help": "Default memory scope for new memories",
"advanced": true
},
"scopes.definitions": {
"label": "Scope Definitions",
"help": "Define custom memory scopes with descriptions",
"advanced": true
},
"scopes.agentAccess": {
"label": "Agent Access Control",
"help": "Define which scopes each agent can access",
"advanced": true
},
"enableManagementTools": {
"label": "Management Tools",
"help": "Enable management/debug tools such as memory_list, memory_stats, and governance-oriented self-improvement review/extract actions.",
"advanced": true
},
"mdMirror.enabled": {
"label": "Markdown Mirror",
"help": "Write a human-readable Markdown copy alongside LanceDB storage (dual-write mode)"
},
"mdMirror.dir": {
"label": "Mirror Fallback Directory",
"help": "Fallback directory when agent workspace mapping is unavailable",
"advanced": true
}
}
}