@joshuaswarren/openclaw-engram 9.3.8 → 9.3.10
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/openclaw.plugin.json +563 -4
- package/package.json +3 -3
package/openclaw.plugin.json
CHANGED
|
@@ -310,6 +310,134 @@
|
|
|
310
310
|
}
|
|
311
311
|
}
|
|
312
312
|
},
|
|
313
|
+
"dreams": {
|
|
314
|
+
"type": "object",
|
|
315
|
+
"additionalProperties": false,
|
|
316
|
+
"default": {},
|
|
317
|
+
"description": "Consolidation pipeline phases config (issue #678 PR 2). Groups existing lifecycle/REM/deep-sleep gates under a unified namespace. Values here WIN over equivalent legacy top-level keys when set. See docs/dreams.md. (Note: distinct from the `dreaming` diary-surface config.)",
|
|
318
|
+
"properties": {
|
|
319
|
+
"phases": {
|
|
320
|
+
"type": "object",
|
|
321
|
+
"additionalProperties": false,
|
|
322
|
+
"default": {},
|
|
323
|
+
"properties": {
|
|
324
|
+
"lightSleep": {
|
|
325
|
+
"type": "object",
|
|
326
|
+
"additionalProperties": false,
|
|
327
|
+
"default": {},
|
|
328
|
+
"description": "Light-sleep phase: recent activity scoring and clustering. Mirrors lifecyclePolicyEnabled and related thresholds when not set explicitly.",
|
|
329
|
+
"properties": {
|
|
330
|
+
"enabled": {
|
|
331
|
+
"type": "boolean",
|
|
332
|
+
"description": "Master switch for the light-sleep phase. Mirrors lifecyclePolicyEnabled when not set."
|
|
333
|
+
},
|
|
334
|
+
"cadenceMs": {
|
|
335
|
+
"type": "integer",
|
|
336
|
+
"minimum": 0,
|
|
337
|
+
"default": 0,
|
|
338
|
+
"description": "Minimum interval between light-sleep passes (ms). 0 = no override; orchestrator uses its internal cadence."
|
|
339
|
+
},
|
|
340
|
+
"promoteHeatThreshold": {
|
|
341
|
+
"type": "number",
|
|
342
|
+
"minimum": 0,
|
|
343
|
+
"maximum": 1,
|
|
344
|
+
"default": 0.55,
|
|
345
|
+
"description": "Value score above which a memory is treated as hot. Mirrors lifecyclePromoteHeatThreshold when not set."
|
|
346
|
+
},
|
|
347
|
+
"staleDecayThreshold": {
|
|
348
|
+
"type": "number",
|
|
349
|
+
"minimum": 0,
|
|
350
|
+
"maximum": 1,
|
|
351
|
+
"default": 0.65,
|
|
352
|
+
"description": "Value score below which a memory starts to decay. Mirrors lifecycleStaleDecayThreshold when not set."
|
|
353
|
+
},
|
|
354
|
+
"archiveDecayThreshold": {
|
|
355
|
+
"type": "number",
|
|
356
|
+
"minimum": 0,
|
|
357
|
+
"maximum": 1,
|
|
358
|
+
"default": 0.85,
|
|
359
|
+
"description": "Value score below which a memory is eligible for archive. Mirrors lifecycleArchiveDecayThreshold when not set."
|
|
360
|
+
},
|
|
361
|
+
"filterStaleEnabled": {
|
|
362
|
+
"type": "boolean",
|
|
363
|
+
"default": false,
|
|
364
|
+
"description": "Whether stale memories are filtered from recall. Mirrors lifecycleFilterStaleEnabled when not set."
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
},
|
|
368
|
+
"rem": {
|
|
369
|
+
"type": "object",
|
|
370
|
+
"additionalProperties": false,
|
|
371
|
+
"default": {},
|
|
372
|
+
"description": "REM phase: cross-session synthesis, supersession resolution, semantic consolidation. Mirrors semanticConsolidation* keys when not set explicitly.",
|
|
373
|
+
"properties": {
|
|
374
|
+
"enabled": {
|
|
375
|
+
"type": "boolean",
|
|
376
|
+
"description": "Master switch for the REM phase. Mirrors semanticConsolidationEnabled when not set."
|
|
377
|
+
},
|
|
378
|
+
"cadenceMs": {
|
|
379
|
+
"type": "integer",
|
|
380
|
+
"minimum": 0,
|
|
381
|
+
"description": "How often the REM pass runs (ms). Derived from semanticConsolidationIntervalHours when not set."
|
|
382
|
+
},
|
|
383
|
+
"similarityThreshold": {
|
|
384
|
+
"type": "number",
|
|
385
|
+
"minimum": 0,
|
|
386
|
+
"maximum": 1,
|
|
387
|
+
"default": 0.8,
|
|
388
|
+
"description": "Cosine-similarity threshold for cluster membership. Mirrors semanticConsolidationThreshold when not set."
|
|
389
|
+
},
|
|
390
|
+
"minClusterSize": {
|
|
391
|
+
"type": "integer",
|
|
392
|
+
"minimum": 2,
|
|
393
|
+
"default": 3,
|
|
394
|
+
"description": "Minimum cluster size before consolidation runs. Mirrors semanticConsolidationMinClusterSize when not set."
|
|
395
|
+
},
|
|
396
|
+
"maxPerRun": {
|
|
397
|
+
"type": "integer",
|
|
398
|
+
"minimum": 0,
|
|
399
|
+
"default": 100,
|
|
400
|
+
"description": "Max cluster operations per run. Mirrors semanticConsolidationMaxPerRun when not set."
|
|
401
|
+
},
|
|
402
|
+
"minIntervalMs": {
|
|
403
|
+
"type": "integer",
|
|
404
|
+
"minimum": 0,
|
|
405
|
+
"description": "Minimum gap between consolidation passes (ms). Mirrors consolidationMinIntervalMs when not set."
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
"deepSleep": {
|
|
410
|
+
"type": "object",
|
|
411
|
+
"additionalProperties": false,
|
|
412
|
+
"default": {},
|
|
413
|
+
"description": "Deep-sleep phase: promotion to durable memory, hot-to-cold tier migration, page-version snapshots, archive. Mirrors versioningEnabled and related keys when not set explicitly.",
|
|
414
|
+
"properties": {
|
|
415
|
+
"enabled": {
|
|
416
|
+
"type": "boolean",
|
|
417
|
+
"default": false,
|
|
418
|
+
"description": "Master switch for the deep-sleep phase. Defaults false unless legacy deep-sleep surfaces are explicitly enabled; set true to allow nightly governance, tier migration, and versioning surfaces."
|
|
419
|
+
},
|
|
420
|
+
"cadenceMs": {
|
|
421
|
+
"type": "integer",
|
|
422
|
+
"minimum": 0,
|
|
423
|
+
"default": 86400000,
|
|
424
|
+
"description": "Minimum interval between deep-sleep passes (ms). Default 86400000 (24h). Informational in PR 2; PR 4 wires this into the cron scheduler."
|
|
425
|
+
},
|
|
426
|
+
"versioningEnabled": {
|
|
427
|
+
"type": "boolean",
|
|
428
|
+
"description": "Enable page-version snapshots on every overwrite. Mirrors versioningEnabled when not set."
|
|
429
|
+
},
|
|
430
|
+
"versioningMaxPerPage": {
|
|
431
|
+
"type": "integer",
|
|
432
|
+
"minimum": 0,
|
|
433
|
+
"description": "Max snapshots per memory page. Mirrors versioningMaxPerPage when not set."
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
}
|
|
439
|
+
}
|
|
440
|
+
},
|
|
313
441
|
"heartbeat": {
|
|
314
442
|
"type": "object",
|
|
315
443
|
"additionalProperties": false,
|
|
@@ -363,6 +491,11 @@
|
|
|
363
491
|
"type": "boolean",
|
|
364
492
|
"default": false,
|
|
365
493
|
"description": "When true, memory also overlays the current branch (project:<id>/branch:<name>). Opt-in — most development wants cross-branch recall. Wired in PR 3 of #569."
|
|
494
|
+
},
|
|
495
|
+
"globalFallback": {
|
|
496
|
+
"type": "boolean",
|
|
497
|
+
"default": true,
|
|
498
|
+
"description": "When true (default), project-scoped sessions include the root/default namespace in read fallbacks so globally useful memories remain visible. Set to false for strict project isolation."
|
|
366
499
|
}
|
|
367
500
|
}
|
|
368
501
|
},
|
|
@@ -423,6 +556,16 @@
|
|
|
423
556
|
}
|
|
424
557
|
}
|
|
425
558
|
},
|
|
559
|
+
"secureStoreEnabled": {
|
|
560
|
+
"type": "boolean",
|
|
561
|
+
"default": false,
|
|
562
|
+
"description": "Enable at-rest AES-256-GCM encryption for memory files (issue #690). When true, the daemon reads and writes memory files through the secure-fs layer. The store must be unlocked via `remnic secure-store unlock` after each daemon start. Default false."
|
|
563
|
+
},
|
|
564
|
+
"secureStoreEncryptOnWrite": {
|
|
565
|
+
"type": "boolean",
|
|
566
|
+
"default": true,
|
|
567
|
+
"description": "When secureStoreEnabled is true, encrypt new memory writes. Set to false to pause new encryptions while still decrypting existing encrypted files (useful during incremental migration). Default true."
|
|
568
|
+
},
|
|
426
569
|
"slotBehavior": {
|
|
427
570
|
"type": "object",
|
|
428
571
|
"additionalProperties": false,
|
|
@@ -691,6 +834,178 @@
|
|
|
691
834
|
}
|
|
692
835
|
}
|
|
693
836
|
},
|
|
837
|
+
"connectors": {
|
|
838
|
+
"type": "object",
|
|
839
|
+
"additionalProperties": false,
|
|
840
|
+
"default": {},
|
|
841
|
+
"description": "Live-connector configuration (issue #683). Each child object maps to one concrete LiveConnector. Defaults are off; operators must opt in.",
|
|
842
|
+
"properties": {
|
|
843
|
+
"googleDrive": {
|
|
844
|
+
"type": "object",
|
|
845
|
+
"additionalProperties": false,
|
|
846
|
+
"default": {},
|
|
847
|
+
"description": "Google Drive live connector (issue #683 PR 2/N). Imports text content from a user's Drive into Remnic on a poll schedule.",
|
|
848
|
+
"properties": {
|
|
849
|
+
"enabled": {
|
|
850
|
+
"type": "boolean",
|
|
851
|
+
"default": false,
|
|
852
|
+
"description": "Master gate. Default off — set to true to enable Drive imports. The connector additionally requires clientId, clientSecret, and refreshToken to be populated before it will run."
|
|
853
|
+
},
|
|
854
|
+
"clientId": {
|
|
855
|
+
"type": "string",
|
|
856
|
+
"default": "",
|
|
857
|
+
"description": "OAuth2 client id. Populate from your secret store (e.g. ${GOOGLE_DRIVE_CLIENT_ID}). Never commit a real value to source."
|
|
858
|
+
},
|
|
859
|
+
"clientSecret": {
|
|
860
|
+
"type": "string",
|
|
861
|
+
"default": "",
|
|
862
|
+
"description": "OAuth2 client secret. Populate from your secret store (e.g. ${GOOGLE_DRIVE_CLIENT_SECRET}). Never commit a real value to source."
|
|
863
|
+
},
|
|
864
|
+
"refreshToken": {
|
|
865
|
+
"type": "string",
|
|
866
|
+
"default": "",
|
|
867
|
+
"description": "OAuth2 refresh token issued for the user's Drive scope. Populate from your secret store (e.g. ${GOOGLE_DRIVE_REFRESH_TOKEN}). Never commit a real value to source."
|
|
868
|
+
},
|
|
869
|
+
"pollIntervalMs": {
|
|
870
|
+
"type": "integer",
|
|
871
|
+
"minimum": 1000,
|
|
872
|
+
"maximum": 86400000,
|
|
873
|
+
"default": 300000,
|
|
874
|
+
"description": "How often the scheduler should call the connector's syncIncremental, in milliseconds. Defaults to 5 minutes; max 24 hours."
|
|
875
|
+
},
|
|
876
|
+
"folderIds": {
|
|
877
|
+
"type": "array",
|
|
878
|
+
"items": {
|
|
879
|
+
"type": "string"
|
|
880
|
+
},
|
|
881
|
+
"default": [],
|
|
882
|
+
"description": "Optional array of Google Drive folder ids to scope the import. Empty = all accessible files. Folder ids are validated for shape; nested folders are NOT auto-included."
|
|
883
|
+
}
|
|
884
|
+
}
|
|
885
|
+
},
|
|
886
|
+
"notion": {
|
|
887
|
+
"type": "object",
|
|
888
|
+
"additionalProperties": false,
|
|
889
|
+
"default": {},
|
|
890
|
+
"description": "Notion live connector (issue #683 PR 3/N). Imports text content from Notion database pages into Remnic on a poll schedule.",
|
|
891
|
+
"properties": {
|
|
892
|
+
"enabled": {
|
|
893
|
+
"type": "boolean",
|
|
894
|
+
"default": false,
|
|
895
|
+
"description": "Master gate. Default off — set to true to enable Notion imports. The connector additionally requires a token and at least one databaseId to be populated before it will run."
|
|
896
|
+
},
|
|
897
|
+
"token": {
|
|
898
|
+
"type": "string",
|
|
899
|
+
"default": "",
|
|
900
|
+
"description": "Notion integration token (starts with secret_). Populate from your secret store (e.g. ${NOTION_TOKEN}). Never commit a real value to source."
|
|
901
|
+
},
|
|
902
|
+
"databaseIds": {
|
|
903
|
+
"type": "array",
|
|
904
|
+
"items": {
|
|
905
|
+
"type": "string"
|
|
906
|
+
},
|
|
907
|
+
"default": [],
|
|
908
|
+
"description": "Array of Notion database ids to import pages from. Accepts compact 32-hex-char ids or standard UUID format. Empty = connector is a no-op."
|
|
909
|
+
},
|
|
910
|
+
"pollIntervalMs": {
|
|
911
|
+
"type": "integer",
|
|
912
|
+
"minimum": 1000,
|
|
913
|
+
"maximum": 86400000,
|
|
914
|
+
"default": 300000,
|
|
915
|
+
"description": "How often the scheduler should call the connector's syncIncremental, in milliseconds. Defaults to 5 minutes; max 24 hours."
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
},
|
|
919
|
+
"gmail": {
|
|
920
|
+
"type": "object",
|
|
921
|
+
"additionalProperties": false,
|
|
922
|
+
"default": {},
|
|
923
|
+
"description": "Gmail live connector (issue #683 PR 4/6). Imports new inbox messages from Gmail into Remnic on a poll schedule.",
|
|
924
|
+
"properties": {
|
|
925
|
+
"enabled": {
|
|
926
|
+
"type": "boolean",
|
|
927
|
+
"default": false,
|
|
928
|
+
"description": "Master gate. Default off — set to true to enable Gmail imports. The connector additionally requires clientId, clientSecret, and refreshToken to be populated before it will run."
|
|
929
|
+
},
|
|
930
|
+
"clientId": {
|
|
931
|
+
"type": "string",
|
|
932
|
+
"default": "",
|
|
933
|
+
"description": "OAuth2 client id. Populate from your secret store (e.g. ${GMAIL_CLIENT_ID}). Never commit a real value to source."
|
|
934
|
+
},
|
|
935
|
+
"clientSecret": {
|
|
936
|
+
"type": "string",
|
|
937
|
+
"default": "",
|
|
938
|
+
"description": "OAuth2 client secret. Populate from your secret store (e.g. ${GMAIL_CLIENT_SECRET}). Never commit a real value to source."
|
|
939
|
+
},
|
|
940
|
+
"refreshToken": {
|
|
941
|
+
"type": "string",
|
|
942
|
+
"default": "",
|
|
943
|
+
"description": "OAuth2 refresh token issued for the Gmail scope. Populate from your secret store (e.g. ${GMAIL_REFRESH_TOKEN}). Never commit a real value to source."
|
|
944
|
+
},
|
|
945
|
+
"userId": {
|
|
946
|
+
"type": "string",
|
|
947
|
+
"default": "me",
|
|
948
|
+
"description": "Gmail userId. Defaults to 'me' (the authenticated user). Override only in delegated-access scenarios."
|
|
949
|
+
},
|
|
950
|
+
"query": {
|
|
951
|
+
"type": "string",
|
|
952
|
+
"default": "in:inbox",
|
|
953
|
+
"description": "Gmail search query applied in addition to the watermark after: filter. Default 'in:inbox'. Set to '' to import all mail."
|
|
954
|
+
},
|
|
955
|
+
"pollIntervalMs": {
|
|
956
|
+
"type": "integer",
|
|
957
|
+
"minimum": 1000,
|
|
958
|
+
"maximum": 86400000,
|
|
959
|
+
"default": 300000,
|
|
960
|
+
"description": "How often the scheduler should call the connector's syncIncremental, in milliseconds. Defaults to 5 minutes; max 24 hours."
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
},
|
|
964
|
+
"github": {
|
|
965
|
+
"type": "object",
|
|
966
|
+
"additionalProperties": false,
|
|
967
|
+
"default": {},
|
|
968
|
+
"description": "GitHub live connector (issue #683 PR 5/6). Imports issue comments, PR review comments, and optionally discussion posts authored by the configured user from watched repos into Remnic on a poll schedule.",
|
|
969
|
+
"properties": {
|
|
970
|
+
"enabled": {
|
|
971
|
+
"type": "boolean",
|
|
972
|
+
"default": false,
|
|
973
|
+
"description": "Master gate. Default off — set to true to enable GitHub imports. The connector additionally requires token, userLogin, and at least one repo to be populated before it will run."
|
|
974
|
+
},
|
|
975
|
+
"token": {
|
|
976
|
+
"type": "string",
|
|
977
|
+
"default": "",
|
|
978
|
+
"description": "GitHub personal access token. Populate from your secret store (e.g. ${GITHUB_TOKEN}). Never commit a real value to source."
|
|
979
|
+
},
|
|
980
|
+
"userLogin": {
|
|
981
|
+
"type": "string",
|
|
982
|
+
"default": "",
|
|
983
|
+
"description": "GitHub login of the user whose comments will be imported. Only comments authored by this login are ingested. Required when enabled."
|
|
984
|
+
},
|
|
985
|
+
"repos": {
|
|
986
|
+
"type": "array",
|
|
987
|
+
"items": {
|
|
988
|
+
"type": "string"
|
|
989
|
+
},
|
|
990
|
+
"default": [],
|
|
991
|
+
"description": "Array of repos to poll in \"owner/repo\" format. Empty = connector is a no-op."
|
|
992
|
+
},
|
|
993
|
+
"pollIntervalMs": {
|
|
994
|
+
"type": "integer",
|
|
995
|
+
"minimum": 1000,
|
|
996
|
+
"maximum": 86400000,
|
|
997
|
+
"default": 300000,
|
|
998
|
+
"description": "How often the scheduler should call the connector's syncIncremental, in milliseconds. Defaults to 5 minutes; max 24 hours."
|
|
999
|
+
},
|
|
1000
|
+
"includeDiscussions": {
|
|
1001
|
+
"type": "boolean",
|
|
1002
|
+
"default": false,
|
|
1003
|
+
"description": "Whether to import GitHub Discussion comments in addition to issue and PR review comments. Default false."
|
|
1004
|
+
}
|
|
1005
|
+
}
|
|
1006
|
+
}
|
|
1007
|
+
}
|
|
1008
|
+
},
|
|
694
1009
|
"codexMaterializeMemories": {
|
|
695
1010
|
"type": "boolean",
|
|
696
1011
|
"default": true,
|
|
@@ -1273,8 +1588,31 @@
|
|
|
1273
1588
|
"description": "Bind port for the Engram HTTP access server. Use 0 for an ephemeral port."
|
|
1274
1589
|
},
|
|
1275
1590
|
"authToken": {
|
|
1276
|
-
"
|
|
1277
|
-
"
|
|
1591
|
+
"description": "Bearer token for the local Remnic HTTP API. Either a literal string (supports ${ENV_VAR} expansion) or an OpenClaw SecretRef object (e.g. {\"source\":\"exec\",\"provider\":\"kc_openclaw_remnic_token\",\"id\":\"value\"}) resolved at startup via the OpenClaw gateway secret resolver (issue #757). If omitted, OPENCLAW_REMNIC_ACCESS_TOKEN / OPENCLAW_ENGRAM_ACCESS_TOKEN is used.",
|
|
1592
|
+
"anyOf": [
|
|
1593
|
+
{
|
|
1594
|
+
"type": "string"
|
|
1595
|
+
},
|
|
1596
|
+
{
|
|
1597
|
+
"type": "object",
|
|
1598
|
+
"required": [
|
|
1599
|
+
"source"
|
|
1600
|
+
],
|
|
1601
|
+
"properties": {
|
|
1602
|
+
"source": {
|
|
1603
|
+
"type": "string",
|
|
1604
|
+
"minLength": 1
|
|
1605
|
+
},
|
|
1606
|
+
"provider": {
|
|
1607
|
+
"type": "string"
|
|
1608
|
+
},
|
|
1609
|
+
"id": {
|
|
1610
|
+
"type": "string"
|
|
1611
|
+
},
|
|
1612
|
+
"command": {}
|
|
1613
|
+
}
|
|
1614
|
+
}
|
|
1615
|
+
]
|
|
1278
1616
|
},
|
|
1279
1617
|
"principal": {
|
|
1280
1618
|
"type": "string",
|
|
@@ -1734,6 +2072,19 @@
|
|
|
1734
2072
|
"default": 0.7,
|
|
1735
2073
|
"description": "Per-hop activation decay factor (0-1). Default 0.7."
|
|
1736
2074
|
},
|
|
2075
|
+
"graphTraversalConfidenceFloor": {
|
|
2076
|
+
"type": "number",
|
|
2077
|
+
"default": 0.2,
|
|
2078
|
+
"minimum": 0,
|
|
2079
|
+
"maximum": 1,
|
|
2080
|
+
"description": "Issue #681 PR 3/3: minimum edge confidence required for traversal during spreading activation. Edges below this floor are pruned and contribute neither activation nor downstream neighbors. Legacy edges without a confidence field are treated as 1.0. Range 0-1. Default 0.2."
|
|
2081
|
+
},
|
|
2082
|
+
"graphTraversalPageRankIterations": {
|
|
2083
|
+
"type": "number",
|
|
2084
|
+
"default": 8,
|
|
2085
|
+
"minimum": 0,
|
|
2086
|
+
"description": "Issue #681 PR 3/3: number of PageRank-style refinement iterations applied on top of the BFS spreading-activation scores. Each iteration redistributes a node's confidence-weighted activation along its outgoing edges. Set to 0 to disable refinement and use raw BFS scores. Default 8."
|
|
2087
|
+
},
|
|
1737
2088
|
"graphExpansionActivationWeight": {
|
|
1738
2089
|
"type": "number",
|
|
1739
2090
|
"default": 0.65,
|
|
@@ -1799,6 +2150,44 @@
|
|
|
1799
2150
|
"default": 7,
|
|
1800
2151
|
"description": "Number of top competing nodes considered for lateral inhibition"
|
|
1801
2152
|
},
|
|
2153
|
+
"graphEdgeDecayEnabled": {
|
|
2154
|
+
"type": "boolean",
|
|
2155
|
+
"default": false,
|
|
2156
|
+
"description": "Enable the periodic graph-edge confidence decay maintenance job (issue #681 PR 2/3). Opt-in."
|
|
2157
|
+
},
|
|
2158
|
+
"graphEdgeDecayCadenceMs": {
|
|
2159
|
+
"type": "number",
|
|
2160
|
+
"default": 604800000,
|
|
2161
|
+
"minimum": 60000,
|
|
2162
|
+
"description": "Cadence in milliseconds for the graph-edge decay cron. Default 7 days. Sub-day cadences map to a daily cron expression."
|
|
2163
|
+
},
|
|
2164
|
+
"graphEdgeDecayWindowMs": {
|
|
2165
|
+
"type": "number",
|
|
2166
|
+
"default": 7776000000,
|
|
2167
|
+
"minimum": 60000,
|
|
2168
|
+
"description": "Decay window in milliseconds passed to decayEdgeConfidence. Default 90 days."
|
|
2169
|
+
},
|
|
2170
|
+
"graphEdgeDecayPerWindow": {
|
|
2171
|
+
"type": "number",
|
|
2172
|
+
"default": 0.1,
|
|
2173
|
+
"minimum": 0,
|
|
2174
|
+
"maximum": 1,
|
|
2175
|
+
"description": "Per-window confidence drop applied during decay. Default 0.1."
|
|
2176
|
+
},
|
|
2177
|
+
"graphEdgeDecayFloor": {
|
|
2178
|
+
"type": "number",
|
|
2179
|
+
"default": 0.1,
|
|
2180
|
+
"minimum": 0,
|
|
2181
|
+
"maximum": 1,
|
|
2182
|
+
"description": "Floor confidence will not decay below. Default 0.1."
|
|
2183
|
+
},
|
|
2184
|
+
"graphEdgeDecayVisibilityThreshold": {
|
|
2185
|
+
"type": "number",
|
|
2186
|
+
"default": 0.2,
|
|
2187
|
+
"minimum": 0,
|
|
2188
|
+
"maximum": 1,
|
|
2189
|
+
"description": "Confidence threshold used by the decay telemetry counter for low-visibility edges. Default 0.2."
|
|
2190
|
+
},
|
|
1802
2191
|
"temporalMemoryTreeEnabled": {
|
|
1803
2192
|
"type": "boolean",
|
|
1804
2193
|
"default": false,
|
|
@@ -1814,6 +2203,23 @@
|
|
|
1814
2203
|
"default": 300,
|
|
1815
2204
|
"description": "Max tokens for each TMT summary node. Default: 300."
|
|
1816
2205
|
},
|
|
2206
|
+
"explicitCueRecallEnabled": {
|
|
2207
|
+
"type": "boolean",
|
|
2208
|
+
"default": false,
|
|
2209
|
+
"description": "Front-load exact LCM evidence for query-visible cues such as turns, dates, ids, files, and tools."
|
|
2210
|
+
},
|
|
2211
|
+
"explicitCueRecallMaxChars": {
|
|
2212
|
+
"type": "number",
|
|
2213
|
+
"default": 2400,
|
|
2214
|
+
"minimum": 0,
|
|
2215
|
+
"description": "Character budget for the explicit cue evidence recall section."
|
|
2216
|
+
},
|
|
2217
|
+
"explicitCueRecallMaxReferences": {
|
|
2218
|
+
"type": "number",
|
|
2219
|
+
"default": 24,
|
|
2220
|
+
"minimum": 0,
|
|
2221
|
+
"description": "Maximum query-visible cues expanded by explicit cue recall."
|
|
2222
|
+
},
|
|
1817
2223
|
"queryExpansionEnabled": {
|
|
1818
2224
|
"type": "boolean",
|
|
1819
2225
|
"default": false,
|
|
@@ -2012,6 +2418,55 @@
|
|
|
2012
2418
|
}
|
|
2013
2419
|
}
|
|
2014
2420
|
},
|
|
2421
|
+
"patternReinforcementEnabled": {
|
|
2422
|
+
"type": "boolean",
|
|
2423
|
+
"default": false,
|
|
2424
|
+
"description": "Run the pattern-reinforcement maintenance job (issue #687 PR 2/4): cluster duplicate non-procedural memories by normalized content, promote the most-recent member to canonical, and supersede the older duplicates. Off by default until bench validation lands."
|
|
2425
|
+
},
|
|
2426
|
+
"patternReinforcementCadenceMs": {
|
|
2427
|
+
"type": "integer",
|
|
2428
|
+
"minimum": 0,
|
|
2429
|
+
"default": 604800000,
|
|
2430
|
+
"description": "Minimum interval (ms) between pattern-reinforcement runs. Default 7 days. Set to 0 to disable cadence gating (manual / test invocation)."
|
|
2431
|
+
},
|
|
2432
|
+
"patternReinforcementMinCount": {
|
|
2433
|
+
"type": "integer",
|
|
2434
|
+
"minimum": 2,
|
|
2435
|
+
"maximum": 1000,
|
|
2436
|
+
"default": 3,
|
|
2437
|
+
"description": "Minimum cluster size before pattern reinforcement promotes a canonical and supersedes duplicates. Default 3."
|
|
2438
|
+
},
|
|
2439
|
+
"patternReinforcementCategories": {
|
|
2440
|
+
"type": "array",
|
|
2441
|
+
"items": {
|
|
2442
|
+
"type": "string"
|
|
2443
|
+
},
|
|
2444
|
+
"default": [
|
|
2445
|
+
"preference",
|
|
2446
|
+
"fact",
|
|
2447
|
+
"decision"
|
|
2448
|
+
],
|
|
2449
|
+
"description": "Memory categories the pattern-reinforcement job considers. Skips procedural memories so it stays disjoint from procedural mining. Default: preference, fact, decision."
|
|
2450
|
+
},
|
|
2451
|
+
"reinforcementRecallBoostEnabled": {
|
|
2452
|
+
"type": "boolean",
|
|
2453
|
+
"default": false,
|
|
2454
|
+
"description": "When true, memories with reinforcement_count frontmatter receive an additive recall score boost (issue #687 PR 3/4). Default: false (opt-in)."
|
|
2455
|
+
},
|
|
2456
|
+
"reinforcementRecallBoostWeight": {
|
|
2457
|
+
"type": "number",
|
|
2458
|
+
"minimum": 0,
|
|
2459
|
+
"maximum": 1,
|
|
2460
|
+
"default": 0.05,
|
|
2461
|
+
"description": "Score bonus per unit of reinforcement_count (weight * count, capped at max). Range [0, 1]. Default: 0.05."
|
|
2462
|
+
},
|
|
2463
|
+
"reinforcementRecallBoostMax": {
|
|
2464
|
+
"type": "number",
|
|
2465
|
+
"minimum": 0,
|
|
2466
|
+
"maximum": 1,
|
|
2467
|
+
"default": 0.3,
|
|
2468
|
+
"description": "Maximum additive reinforcement boost per result. Range [0, 1]. Default: 0.3."
|
|
2469
|
+
},
|
|
2015
2470
|
"temporalSupersessionEnabled": {
|
|
2016
2471
|
"type": "boolean",
|
|
2017
2472
|
"default": true,
|
|
@@ -2027,6 +2482,22 @@
|
|
|
2027
2482
|
"default": true,
|
|
2028
2483
|
"description": "When true, recall runs the direct-answer tier in observation mode: annotates LastRecallSnapshot.tierExplain with which tier would have served the query (issue #518). Does not short-circuit the QMD path in the current release."
|
|
2029
2484
|
},
|
|
2485
|
+
"recallDisclosureEscalation": {
|
|
2486
|
+
"type": "string",
|
|
2487
|
+
"enum": [
|
|
2488
|
+
"manual",
|
|
2489
|
+
"auto"
|
|
2490
|
+
],
|
|
2491
|
+
"default": "manual",
|
|
2492
|
+
"description": "Disclosure auto-escalation policy (issue #677 PR 4/4). When 'auto', recalls without an explicit caller-supplied disclosure escalate from chunk to section if the top-K confidence falls below recallDisclosureEscalationThreshold. 'raw' is never auto-selected. Default 'manual' preserves pre-#677 behavior."
|
|
2493
|
+
},
|
|
2494
|
+
"recallDisclosureEscalationThreshold": {
|
|
2495
|
+
"type": "number",
|
|
2496
|
+
"minimum": 0,
|
|
2497
|
+
"maximum": 1,
|
|
2498
|
+
"default": 0.5,
|
|
2499
|
+
"description": "Top-K confidence threshold (0-1) below which auto-escalation promotes chunk to section. Only consulted when recallDisclosureEscalation is 'auto'. Default 0.5."
|
|
2500
|
+
},
|
|
2030
2501
|
"recallGraphEnabled": {
|
|
2031
2502
|
"type": "boolean",
|
|
2032
2503
|
"default": false,
|
|
@@ -2428,6 +2899,11 @@
|
|
|
2428
2899
|
"default": "low",
|
|
2429
2900
|
"description": "Minimum locally-scored importance level required to persist an extracted fact. Facts below this level are dropped before write and counted toward the importance_gated metric. Default \"low\" drops only trivial turn-level chatter (greetings, single-word replies); raise to \"normal\" or higher for a stricter gate."
|
|
2430
2901
|
},
|
|
2902
|
+
"extractionScopeClassificationEnabled": {
|
|
2903
|
+
"type": "boolean",
|
|
2904
|
+
"default": true,
|
|
2905
|
+
"description": "When enabled, the extraction prompt instructs the LLM to classify each fact as 'project' (codebase-specific) or 'global' (cross-project knowledge). Global-scoped facts are promoted to the shared namespace so they are visible across all projects. Disable to restore pre-scope-classification behavior where all facts go to the session namespace."
|
|
2906
|
+
},
|
|
2431
2907
|
"extractionJudgeEnabled": {
|
|
2432
2908
|
"type": "boolean",
|
|
2433
2909
|
"default": false,
|
|
@@ -2889,6 +3365,39 @@
|
|
|
2889
3365
|
"default": false,
|
|
2890
3366
|
"description": "Opt in to operator-aware consolidation prompts so the LLM returns structured {operator, output} JSON and SPLIT/MERGE/UPDATE is recorded on derived_via. When disabled (default), derived_via still populates via the cluster-shape heuristic."
|
|
2891
3367
|
},
|
|
3368
|
+
"peerProfileReasonerEnabled": {
|
|
3369
|
+
"type": "boolean",
|
|
3370
|
+
"default": false,
|
|
3371
|
+
"description": "Enable the async peer profile reasoner (issue #679). Runs after semantic consolidation in the REM phase and updates per-peer profile.md files with provenance-tagged field updates derived from the peer's interaction log. Default off (opt-in)."
|
|
3372
|
+
},
|
|
3373
|
+
"peerProfileReasonerModel": {
|
|
3374
|
+
"type": "string",
|
|
3375
|
+
"default": "auto",
|
|
3376
|
+
"description": "Model identifier used by the peer profile reasoner. 'auto' inherits the gateway's primary chain (recommended). Logged for telemetry only — actual dispatch routes through the same FallbackLlmClient used by semantic consolidation."
|
|
3377
|
+
},
|
|
3378
|
+
"peerProfileReasonerMinInteractions": {
|
|
3379
|
+
"type": "number",
|
|
3380
|
+
"default": 5,
|
|
3381
|
+
"minimum": 0,
|
|
3382
|
+
"description": "Minimum new interaction-log entries a peer must accumulate since the previous reasoner run before being processed again. Set to 0 to consider every peer on every run."
|
|
3383
|
+
},
|
|
3384
|
+
"peerProfileReasonerMaxFieldsPerRun": {
|
|
3385
|
+
"type": "number",
|
|
3386
|
+
"default": 8,
|
|
3387
|
+
"minimum": 0,
|
|
3388
|
+
"description": "Hard cap on the total number of profile fields the reasoner will apply across all peers in a single run. Set to 0 to disable applying any fields."
|
|
3389
|
+
},
|
|
3390
|
+
"peerProfileRecallEnabled": {
|
|
3391
|
+
"type": "boolean",
|
|
3392
|
+
"default": false,
|
|
3393
|
+
"description": "When true, inject the active peer's profile fields into the recall context as a '## Peer Profile' section (issue #679 PR 3/5). Requires the session's peer ID to be registered before recall. Default off (opt-in)."
|
|
3394
|
+
},
|
|
3395
|
+
"peerProfileRecallMaxFields": {
|
|
3396
|
+
"type": "number",
|
|
3397
|
+
"default": 5,
|
|
3398
|
+
"minimum": 0,
|
|
3399
|
+
"description": "Maximum number of peer profile fields to inject per recall call. Only the most-recently-updated N fields are included. Set to 0 to disable field injection even when peerProfileRecallEnabled is true."
|
|
3400
|
+
},
|
|
2892
3401
|
"creationMemoryEnabled": {
|
|
2893
3402
|
"type": "boolean",
|
|
2894
3403
|
"default": false,
|
|
@@ -3295,8 +3804,8 @@
|
|
|
3295
3804
|
},
|
|
3296
3805
|
"lifecyclePolicyEnabled": {
|
|
3297
3806
|
"type": "boolean",
|
|
3298
|
-
"default":
|
|
3299
|
-
"description": "Enable lifecycle scoring/
|
|
3807
|
+
"default": true,
|
|
3808
|
+
"description": "Enable the lifecycle policy engine (hot↔cold tier migration, value scoring, decay). Default true since #686 PR 3/6 — flipping enables the year-2 retention story by default. Set to false to opt out."
|
|
3300
3809
|
},
|
|
3301
3810
|
"lifecycleFilterStaleEnabled": {
|
|
3302
3811
|
"type": "boolean",
|
|
@@ -3785,6 +4294,16 @@
|
|
|
3785
4294
|
"default": 90,
|
|
3786
4295
|
"description": "Days to retain archived LCM summaries"
|
|
3787
4296
|
},
|
|
4297
|
+
"messagePartsEnabled": {
|
|
4298
|
+
"type": "boolean",
|
|
4299
|
+
"default": false,
|
|
4300
|
+
"description": "Opt in to structured LCM message-part capture for tool calls, file references, patches, and reasoning markers."
|
|
4301
|
+
},
|
|
4302
|
+
"messagePartsRecallMaxResults": {
|
|
4303
|
+
"type": "number",
|
|
4304
|
+
"default": 6,
|
|
4305
|
+
"description": "Maximum structured message-part matches to inject into recall when messagePartsEnabled is true."
|
|
4306
|
+
},
|
|
3788
4307
|
"ircEnabled": {
|
|
3789
4308
|
"type": "boolean",
|
|
3790
4309
|
"default": true,
|
|
@@ -4287,6 +4806,16 @@
|
|
|
4287
4806
|
"label": "Direct-Answer Retrieval Tier",
|
|
4288
4807
|
"help": "Route validated high-trust queries to a fast direct-answer path before QMD (issue #518)."
|
|
4289
4808
|
},
|
|
4809
|
+
"recallDisclosureEscalation": {
|
|
4810
|
+
"label": "Disclosure Auto-Escalation",
|
|
4811
|
+
"help": "Auto-promote default chunk recalls to section when top-K confidence is low (issue #677 PR 4/4). Set to 'auto' to enable; 'manual' (default) preserves pre-#677 behavior."
|
|
4812
|
+
},
|
|
4813
|
+
"recallDisclosureEscalationThreshold": {
|
|
4814
|
+
"label": "Disclosure Escalation Threshold",
|
|
4815
|
+
"advanced": true,
|
|
4816
|
+
"placeholder": "0.5",
|
|
4817
|
+
"help": "Top-K confidence (0-1) below which auto-escalation triggers. Only consulted when Disclosure Auto-Escalation is set to 'auto'."
|
|
4818
|
+
},
|
|
4290
4819
|
"recallGraphEnabled": {
|
|
4291
4820
|
"label": "Graph Retrieval (PPR)",
|
|
4292
4821
|
"help": "Run Personalized PageRank on the retrieval graph and merge with QMD via MMR (issue #559)."
|
|
@@ -4691,6 +5220,36 @@
|
|
|
4691
5220
|
"advanced": true,
|
|
4692
5221
|
"help": "Opt in to operator-aware consolidation prompts (default off). When enabled, the LLM returns structured {operator, output} JSON and we record SPLIT/MERGE/UPDATE on derived_via. When disabled (default), derived_via still populates via the cluster-shape heuristic."
|
|
4693
5222
|
},
|
|
5223
|
+
"peerProfileReasonerEnabled": {
|
|
5224
|
+
"label": "Peer Profile Reasoner",
|
|
5225
|
+
"advanced": true,
|
|
5226
|
+
"help": "Enable the async peer profile reasoner (issue #679). Runs in the REM phase after semantic consolidation and updates per-peer profile.md files with provenance-tagged field updates derived from each peer's interaction log. Default off (opt-in)."
|
|
5227
|
+
},
|
|
5228
|
+
"peerProfileReasonerModel": {
|
|
5229
|
+
"label": "Peer Profile Reasoner Model",
|
|
5230
|
+
"advanced": true,
|
|
5231
|
+
"help": "Model identifier the peer profile reasoner records on telemetry. Dispatch still routes through the FallbackLlmClient used by semantic consolidation."
|
|
5232
|
+
},
|
|
5233
|
+
"peerProfileReasonerMinInteractions": {
|
|
5234
|
+
"label": "Peer Profile Reasoner Min Interactions",
|
|
5235
|
+
"advanced": true,
|
|
5236
|
+
"help": "Minimum new interaction-log entries a peer must accumulate since the previous reasoner run before being processed again. Set to 0 to consider every peer on every run."
|
|
5237
|
+
},
|
|
5238
|
+
"peerProfileReasonerMaxFieldsPerRun": {
|
|
5239
|
+
"label": "Peer Profile Reasoner Max Fields Per Run",
|
|
5240
|
+
"advanced": true,
|
|
5241
|
+
"help": "Hard cap on the total number of profile fields the reasoner will apply across all peers in a single run. Set to 0 to disable applying any fields."
|
|
5242
|
+
},
|
|
5243
|
+
"peerProfileRecallEnabled": {
|
|
5244
|
+
"label": "Peer Profile Recall Injection",
|
|
5245
|
+
"advanced": true,
|
|
5246
|
+
"help": "When enabled, injects the active peer's profile fields into recall context as a '## Peer Profile' section. Requires the session peer ID to be registered. Default off."
|
|
5247
|
+
},
|
|
5248
|
+
"peerProfileRecallMaxFields": {
|
|
5249
|
+
"label": "Peer Profile Recall Max Fields",
|
|
5250
|
+
"advanced": true,
|
|
5251
|
+
"help": "Maximum number of peer profile fields to inject per recall. Only the most-recently-updated N fields are included. Set to 0 to disable injection."
|
|
5252
|
+
},
|
|
4694
5253
|
"creationMemoryEnabled": {
|
|
4695
5254
|
"label": "Creation Memory",
|
|
4696
5255
|
"advanced": true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@joshuaswarren/openclaw-engram",
|
|
3
|
-
"version": "9.3.
|
|
3
|
+
"version": "9.3.10",
|
|
4
4
|
"description": "Deprecated compatibility shim for Engram installs. Re-exports @remnic/plugin-openclaw and forwards engram-access to @remnic/core.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -31,8 +31,8 @@
|
|
|
31
31
|
]
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@remnic/core": "^1.1.
|
|
35
|
-
"@remnic/plugin-openclaw": "^1.0.
|
|
34
|
+
"@remnic/core": "^1.1.5",
|
|
35
|
+
"@remnic/plugin-openclaw": "^1.0.14"
|
|
36
36
|
},
|
|
37
37
|
"peerDependencies": {
|
|
38
38
|
"openclaw": ">=2026.4.8"
|