@joshuaswarren/openclaw-engram 9.3.21 → 9.3.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.
@@ -7,12 +7,19 @@
7
7
  // store during migration when both blocks exist with no plugins.slots.memory
8
8
  // override (#403). The id is hardcoded (not imported from @remnic/core)
9
9
  // because the shim *is* the legacy alias — the string is its identity.
10
- import("../dist/access-cli.js")
11
- .then(({ runCli }) =>
12
- runCli(process.argv.slice(2), { preferredId: "openclaw-engram" }),
13
- )
14
- .catch((error) => {
15
- const message = error instanceof Error ? error.message : "unknown load error";
16
- console.error(`access-cli failed to load dist/access-cli.js: ${message}`);
17
- process.exit(1);
18
- });
10
+ let accessCli;
11
+ try {
12
+ accessCli = await import("../dist/access-cli.js");
13
+ } catch (error) {
14
+ const message = error instanceof Error ? error.message : "unknown load error";
15
+ console.error(`access-cli failed to load dist/access-cli.js: ${message}`);
16
+ process.exit(1);
17
+ }
18
+
19
+ try {
20
+ await accessCli.runCli(process.argv.slice(2), { preferredId: "openclaw-engram" });
21
+ } catch (error) {
22
+ const message = error instanceof Error ? error.message : "unknown error";
23
+ console.error(`engram-access failed: ${message}`);
24
+ process.exit(1);
25
+ }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "openclaw-engram",
3
3
  "name": "Remnic OpenClaw Plugin",
4
- "version": "9.3.21",
4
+ "version": "9.3.23",
5
5
  "kind": "memory",
6
6
  "description": "Local semantic memory for OpenClaw with bundled Remnic core runtime. Requires plugins.slots.memory set to this plugin id for hooks to fire.",
7
7
  "setup": {
@@ -115,7 +115,14 @@
115
115
  "additionalProperties": false,
116
116
  "properties": {
117
117
  "openaiApiKey": {
118
- "type": "string",
118
+ "anyOf": [
119
+ {
120
+ "type": "string"
121
+ },
122
+ {
123
+ "const": false
124
+ }
125
+ ],
119
126
  "description": "Optional OpenAI API key for plugin mode (or set OPENAI_API_KEY env var). Ignored by default gateway-mode installs; in plugin mode, Remnic may send conversation and memory content to OpenAI or the configured OpenAI-compatible endpoint for extraction, consolidation, summarization, and embeddings."
120
127
  },
121
128
  "openaiBaseUrl": {
@@ -124,7 +131,7 @@
124
131
  },
125
132
  "model": {
126
133
  "type": "string",
127
- "default": "gpt-5.2",
134
+ "default": "gpt-5.5",
128
135
  "description": "OpenAI model for extraction/consolidation"
129
136
  },
130
137
  "reasoningEffort": {
@@ -281,6 +288,83 @@
281
288
  "default": false,
282
289
  "description": "Allow automated cold-tier backfill jobs to repair parity gaps"
283
290
  },
291
+ "qmdSupportedVersion": {
292
+ "type": "string",
293
+ "default": "2.5.1",
294
+ "description": "Highest QMD version this Remnic build will auto-install"
295
+ },
296
+ "qmdAutoUpgradeEnabled": {
297
+ "type": "boolean",
298
+ "default": false,
299
+ "description": "Opt-in auto-upgrade for PATH/fallback QMD installs"
300
+ },
301
+ "qmdAutoUpgradeCheckIntervalMs": {
302
+ "type": "number",
303
+ "minimum": 60000,
304
+ "default": 86400000,
305
+ "description": "Minimum interval between QMD auto-upgrade checks"
306
+ },
307
+ "qmdChunkStrategy": {
308
+ "type": "string",
309
+ "enum": [
310
+ "auto",
311
+ "regex"
312
+ ],
313
+ "default": "auto",
314
+ "description": "QMD chunk strategy forwarded when the installed QMD supports it"
315
+ },
316
+ "qmdCandidateLimit": {
317
+ "type": "number",
318
+ "minimum": 1,
319
+ "description": "Optional candidate limit forwarded to supported QMD query paths"
320
+ },
321
+ "qmdQueryRerankEnabled": {
322
+ "type": "boolean",
323
+ "default": true,
324
+ "description": "When false, ask supported QMD versions to skip the built-in rerank step"
325
+ },
326
+ "qmdIndexName": {
327
+ "type": "string",
328
+ "description": "Optional QMD named index forwarded as qmd --index <name> when supported"
329
+ },
330
+ "qmdForceCpu": {
331
+ "type": "boolean",
332
+ "default": false,
333
+ "description": "Set QMD_FORCE_CPU=1 for QMD child processes to bypass GPU probing and run predictably on CPU"
334
+ },
335
+ "qmdGpuBackend": {
336
+ "type": [
337
+ "string",
338
+ "boolean"
339
+ ],
340
+ "enum": [
341
+ "auto",
342
+ "metal",
343
+ "cuda",
344
+ "vulkan",
345
+ "false",
346
+ false
347
+ ],
348
+ "description": "Optional QMD_LLAMA_GPU override for QMD child processes"
349
+ },
350
+ "qmdEmbedParallelism": {
351
+ "type": "number",
352
+ "minimum": 1,
353
+ "maximum": 8,
354
+ "description": "Optional QMD_EMBED_PARALLELISM override, clamped to 1-8"
355
+ },
356
+ "qmdEmbedModel": {
357
+ "type": "string",
358
+ "description": "Optional QMD_EMBED_MODEL override"
359
+ },
360
+ "qmdRerankModel": {
361
+ "type": "string",
362
+ "description": "Optional QMD_RERANK_MODEL override"
363
+ },
364
+ "qmdGenerateModel": {
365
+ "type": "string",
366
+ "description": "Optional QMD_GENERATE_MODEL override"
367
+ },
284
368
  "embeddingFallbackEnabled": {
285
369
  "type": "boolean",
286
370
  "default": true,
@@ -296,6 +380,10 @@
296
380
  "default": "auto",
297
381
  "description": "Embedding provider selection for semantic fallback"
298
382
  },
383
+ "embeddingFallbackModel": {
384
+ "type": "string",
385
+ "description": "Optional model identifier for embedding fallback requests. Defaults to localLlmModel for legacy installs."
386
+ },
299
387
  "qmdPath": {
300
388
  "type": "string",
301
389
  "description": "Optional absolute path to qmd binary (bypasses PATH/fallback discovery)"
@@ -1346,7 +1434,8 @@
1346
1434
  "description": "Include the most relevant open question in generated memory context"
1347
1435
  },
1348
1436
  "commitmentDecayDays": {
1349
- "type": "number",
1437
+ "type": "integer",
1438
+ "minimum": 1,
1350
1439
  "default": 90,
1351
1440
  "description": "Days before fulfilled/expired commitments are removed"
1352
1441
  },
@@ -1767,7 +1856,7 @@
1767
1856
  },
1768
1857
  "recallPlannerModel": {
1769
1858
  "type": "string",
1770
- "default": "gpt-5.2-mini",
1859
+ "default": "gpt-5.5",
1771
1860
  "description": "Model to use for the recall planner."
1772
1861
  },
1773
1862
  "recallPlannerTimeoutMs": {
@@ -3379,7 +3468,7 @@
3379
3468
  "conversationIndexFaissModelId": {
3380
3469
  "type": "string",
3381
3470
  "default": "text-embedding-3-small",
3382
- "description": "Embedding model identifier passed to the FAISS sidecar. By default the sidecar aliases OpenAI embedding ids to a local sentence-transformers model when ENGRAM_FAISS_ENABLE_ST=1, and otherwise falls back to deterministic hash embeddings."
3471
+ "description": "Embedding model identifier passed to the FAISS sidecar. By default the sidecar aliases OpenAI embedding ids to a local sentence-transformers model when REMNIC_FAISS_ENABLE_ST=1 (or legacy ENGRAM_FAISS_ENABLE_ST=1), and otherwise falls back to deterministic hash embeddings."
3383
3472
  },
3384
3473
  "conversationIndexFaissIndexDir": {
3385
3474
  "type": "string",
@@ -4764,7 +4853,7 @@
4764
4853
  "model": {
4765
4854
  "label": "Extraction Model",
4766
4855
  "advanced": true,
4767
- "placeholder": "gpt-5.2"
4856
+ "placeholder": "gpt-5.5"
4768
4857
  },
4769
4858
  "reasoningEffort": {
4770
4859
  "label": "Reasoning Effort",
@@ -4861,6 +4950,66 @@
4861
4950
  "advanced": true,
4862
4951
  "help": "Enable automated cold-tier backfill runs for parity repair"
4863
4952
  },
4953
+ "qmdSupportedVersion": {
4954
+ "label": "QMD Supported Version",
4955
+ "advanced": true,
4956
+ "placeholder": "2.5.1"
4957
+ },
4958
+ "qmdAutoUpgradeEnabled": {
4959
+ "label": "QMD Auto Upgrade",
4960
+ "advanced": true,
4961
+ "help": "Upgrade PATH/fallback QMD installs to the supported version; explicit qmdPath installs are skipped"
4962
+ },
4963
+ "qmdAutoUpgradeCheckIntervalMs": {
4964
+ "label": "QMD Auto Upgrade Interval",
4965
+ "advanced": true,
4966
+ "placeholder": "86400000"
4967
+ },
4968
+ "qmdChunkStrategy": {
4969
+ "label": "QMD Chunk Strategy",
4970
+ "advanced": true,
4971
+ "placeholder": "auto"
4972
+ },
4973
+ "qmdCandidateLimit": {
4974
+ "label": "QMD Candidate Limit",
4975
+ "advanced": true
4976
+ },
4977
+ "qmdQueryRerankEnabled": {
4978
+ "label": "QMD Query Rerank",
4979
+ "advanced": true
4980
+ },
4981
+ "qmdIndexName": {
4982
+ "label": "QMD Index Name",
4983
+ "advanced": true,
4984
+ "help": "Use a named QMD index when QMD 2.5+ supports --index"
4985
+ },
4986
+ "qmdForceCpu": {
4987
+ "label": "QMD Force CPU",
4988
+ "advanced": true,
4989
+ "help": "Set QMD_FORCE_CPU=1 for QMD child processes"
4990
+ },
4991
+ "qmdGpuBackend": {
4992
+ "label": "QMD GPU Backend",
4993
+ "advanced": true,
4994
+ "placeholder": "metal"
4995
+ },
4996
+ "qmdEmbedParallelism": {
4997
+ "label": "QMD Embed Parallelism",
4998
+ "advanced": true,
4999
+ "placeholder": "4"
5000
+ },
5001
+ "qmdEmbedModel": {
5002
+ "label": "QMD Embed Model",
5003
+ "advanced": true
5004
+ },
5005
+ "qmdRerankModel": {
5006
+ "label": "QMD Rerank Model",
5007
+ "advanced": true
5008
+ },
5009
+ "qmdGenerateModel": {
5010
+ "label": "QMD Generate Model",
5011
+ "advanced": true
5012
+ },
4864
5013
  "embeddingFallbackEnabled": {
4865
5014
  "label": "Embedding Fallback",
4866
5015
  "help": "Use semantic embeddings when QMD is unavailable or no results are found"
@@ -4870,6 +5019,12 @@
4870
5019
  "advanced": true,
4871
5020
  "placeholder": "auto"
4872
5021
  },
5022
+ "embeddingFallbackModel": {
5023
+ "label": "Embedding Model",
5024
+ "advanced": true,
5025
+ "placeholder": "(defaults to local LLM model)",
5026
+ "help": "Optional embedding model for semantic fallback. Use this when the local chat model and embedding model are different."
5027
+ },
4873
5028
  "qmdPath": {
4874
5029
  "label": "QMD Path",
4875
5030
  "advanced": true,
@@ -4936,7 +5091,8 @@
4936
5091
  "commitmentDecayDays": {
4937
5092
  "label": "Commitment Decay (days)",
4938
5093
  "advanced": true,
4939
- "placeholder": "90"
5094
+ "placeholder": "90",
5095
+ "help": "Positive integer days before fulfilled/expired commitments are removed."
4940
5096
  },
4941
5097
  "workspaceDir": {
4942
5098
  "label": "Workspace Directory",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@joshuaswarren/openclaw-engram",
3
- "version": "9.3.21",
3
+ "version": "9.3.23",
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",
@@ -18,7 +18,8 @@
18
18
  "files": [
19
19
  "dist",
20
20
  "bin/engram-access.js",
21
- "openclaw.plugin.json"
21
+ "openclaw.plugin.json",
22
+ "scripts/postinstall-banner.mjs"
22
23
  ],
23
24
  "publishConfig": {
24
25
  "access": "public",
@@ -36,8 +37,8 @@
36
37
  "pluginApi": ">=2026.5.16-beta.1"
37
38
  },
38
39
  "build": {
39
- "openclawVersion": "2026.5.16-beta.2",
40
- "pluginSdkVersion": "2026.5.16-beta.2"
40
+ "openclawVersion": "2026.5.19-beta.1",
41
+ "pluginSdkVersion": "2026.5.19-beta.1"
41
42
  },
42
43
  "install": {
43
44
  "clawhubSpec": "clawhub:@remnic/plugin-openclaw",
@@ -47,8 +48,8 @@
47
48
  }
48
49
  },
49
50
  "dependencies": {
50
- "@remnic/core": "^1.1.12",
51
- "@remnic/plugin-openclaw": "^1.0.35"
51
+ "@remnic/plugin-openclaw": "^1.0.37",
52
+ "@remnic/core": "^1.1.13"
52
53
  },
53
54
  "peerDependencies": {
54
55
  "openclaw": ">=2026.5.16-beta.1"
@@ -73,6 +74,7 @@
73
74
  ],
74
75
  "scripts": {
75
76
  "build": "node ./scripts/sync-openclaw-plugin.mjs && tsup --config tsup.config.ts",
77
+ "precheck-types": "node ../../scripts/ensure-bench-build-deps.mjs",
76
78
  "check-types": "tsc --noEmit",
77
79
  "postinstall": "node ./scripts/postinstall-banner.mjs"
78
80
  }
@@ -0,0 +1,19 @@
1
+ const lines = [
2
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
3
+ " Engram is now Remnic",
4
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
5
+ " Same product. New name. One-time auto-migration runs",
6
+ " on first use. Your memories, config, and tokens carry over.",
7
+ "",
8
+ " Why: namespace conflicts and a clearer identity for what",
9
+ " the product actually is — a Recall Engine for Memory",
10
+ " Networks powering Intelligent Collaboration across your",
11
+ " entire agent fleet.",
12
+ "",
13
+ " Next step: nothing. The plugin auto-migrates on first run.",
14
+ "",
15
+ " Learn more: https://remnic.ai/rename",
16
+ "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━",
17
+ ];
18
+
19
+ process.stderr.write(`\n${lines.join("\n")}\n\n`);