@remnic/plugin-openclaw 9.3.612 → 9.3.614

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
@@ -43,14 +43,15 @@ launchctl kickstart -k gui/501/ai.openclaw.gateway
43
43
 
44
44
  ## Compatibility Policy
45
45
 
46
- Remnic supports OpenClaw releases from at least the previous 60 days. For the
47
- June 3, 2026 compatibility sweep, that means releases back to April 4, 2026.
46
+ Remnic supports OpenClaw releases from at least the previous 60 days. As of
47
+ June 7, 2026, that means releases back to April 8, 2026.
48
48
  The package metadata keeps the installer compatibility floor at the single
49
49
  `>=2026.4.1` shape OpenClaw setup expects because that older floor is still
50
50
  more permissive than the active 60-day requirement. The peer and plugin-API
51
51
  compatibility ranges explicitly include reviewed prerelease hosts in that
52
- window. The adapter separately records `2026.6.3-alpha.1` as the latest
53
- reviewed OpenClaw source-tag target.
52
+ window. The adapter separately records `2026.6.6-alpha.1` as the latest
53
+ reviewed OpenClaw source-tag target (plugin SDK surface verified against the
54
+ newest npm-published build, `2026.6.5-beta.2`).
54
55
 
55
56
  When adding newer OpenClaw manifest surfaces, keep older-compatible metadata in
56
57
  place for hosts inside that 60-day window unless an upstream breaking change is
@@ -179,7 +180,12 @@ CI jobs that provision OpenClaw should use
179
180
  `npm run check:openclaw-sdk-surface:required` or pass
180
181
  `-- --require --package-root <path>` so a missing SDK fails instead of skipping.
181
182
 
182
- Last compatibility sweep: June 3, 2026. The SDK surface check passed against
183
+ Last compatibility sweep: June 6, 2026 (issues #1338, #1348, #1387, #1412,
184
+ #1423, #1424), with a June 7, 2026 follow-up adding `openclaw@2026.6.5-beta.2`.
185
+ The latest reviewed npm build is `openclaw@2026.6.5-beta.2`; its
186
+ plugin SDK surface is additive-only versus the recorded snapshot (no removals),
187
+ so no Remnic adapter change was required — see `docs/plugins/openclaw.md` for
188
+ the full sweep notes. Earlier sweeps: the SDK surface check passed against
183
189
  `openclaw@2026.5.3`, `openclaw@2026.5.3-1`, `openclaw@2026.5.4-beta.1`,
184
190
  `openclaw@2026.5.4-beta.2`, `openclaw@2026.5.4-beta.3`,
185
191
  `openclaw@2026.5.4`, `openclaw@2026.5.5`, `openclaw@2026.5.6`,
package/dist/index.js CHANGED
@@ -2902,6 +2902,7 @@ Returns: Performance trace data with timing breakdown`,
2902
2902
  import { registerLcmTools } from "@remnic/core/lcm/index";
2903
2903
  import { estimateTokens as estimateLcmTokens } from "@remnic/core/lcm/archive";
2904
2904
  import { registerCli } from "@remnic/core/cli";
2905
+ import { FallbackLlmClient, fallbackLlmRuntimeContextFromConfig } from "@remnic/core/fallback-llm";
2905
2906
 
2906
2907
  // ../../src/objective-state.ts
2907
2908
  var objective_state_exports = {};
@@ -2998,7 +2999,7 @@ function escapeRegExp(value) {
2998
2999
  }
2999
3000
 
3000
3001
  // src/public-artifacts.ts
3001
- import { readdir, access, stat, lstat, realpath } from "fs/promises";
3002
+ import { access, lstat, readdir, realpath, stat } from "fs/promises";
3002
3003
  import path from "path";
3003
3004
  var PUBLIC_DIRS = [
3004
3005
  { dir: "facts", kind: "fact", contentType: "markdown" },
@@ -3006,16 +3007,20 @@ var PUBLIC_DIRS = [
3006
3007
  { dir: "corrections", kind: "correction", contentType: "markdown" },
3007
3008
  { dir: "artifacts", kind: "artifact", contentType: "markdown" }
3008
3009
  ];
3009
- var PUBLIC_FILES = [
3010
- { relativePath: "profile.md", kind: "memory-root", contentType: "markdown" }
3011
- ];
3010
+ var PUBLIC_FILES = [{ relativePath: "profile.md", kind: "memory-root", contentType: "markdown" }];
3012
3011
  async function isContainedWithin(target, boundary) {
3012
+ return await resolveContainedPath(target, boundary) !== void 0;
3013
+ }
3014
+ async function resolveContainedPath(target, boundary) {
3013
3015
  try {
3014
3016
  const resolvedTarget = await realpath(target);
3015
3017
  const resolvedBoundary = await realpath(boundary);
3016
- return resolvedTarget === resolvedBoundary || resolvedTarget.startsWith(resolvedBoundary + path.sep);
3018
+ if (resolvedTarget === resolvedBoundary || resolvedTarget.startsWith(resolvedBoundary + path.sep)) {
3019
+ return resolvedTarget;
3020
+ }
3021
+ return void 0;
3017
3022
  } catch {
3018
- return false;
3023
+ return void 0;
3019
3024
  }
3020
3025
  }
3021
3026
  async function listMarkdownFilesRecursive(rootDir, boundary, ancestorRealPaths) {
@@ -3059,7 +3064,10 @@ async function listMarkdownFilesRecursive(rootDir, boundary, ancestorRealPaths)
3059
3064
  continue;
3060
3065
  }
3061
3066
  if (isFile && String(entry.name).endsWith(".md")) {
3062
- files.push(fullPath);
3067
+ const resolvedFilePath = await resolveContainedPath(fullPath, boundaryDir);
3068
+ if (resolvedFilePath !== void 0) {
3069
+ files.push(resolvedFilePath);
3070
+ }
3063
3071
  }
3064
3072
  }
3065
3073
  return files.sort((a, b) => a.localeCompare(b));
@@ -3075,6 +3083,12 @@ async function pathExists(inputPath) {
3075
3083
  async function listRemnicPublicArtifacts(params) {
3076
3084
  const { memoryDir, workspaceDir, agentIds } = params;
3077
3085
  const artifacts = [];
3086
+ let resolvedMemoryDir;
3087
+ try {
3088
+ resolvedMemoryDir = await realpath(memoryDir);
3089
+ } catch {
3090
+ return [];
3091
+ }
3078
3092
  for (const spec of PUBLIC_DIRS) {
3079
3093
  const dirPath = path.join(memoryDir, spec.dir);
3080
3094
  if (!await pathExists(dirPath)) continue;
@@ -3090,7 +3104,7 @@ async function listRemnicPublicArtifacts(params) {
3090
3104
  }
3091
3105
  const files = await listMarkdownFilesRecursive(dirPath, dirPath);
3092
3106
  for (const absolutePath of files) {
3093
- const relativePath = path.relative(memoryDir, absolutePath).replace(/\\/g, "/");
3107
+ const relativePath = path.relative(resolvedMemoryDir, absolutePath).replace(/\\/g, "/");
3094
3108
  artifacts.push({
3095
3109
  kind: spec.kind,
3096
3110
  workspaceDir,
@@ -3104,20 +3118,16 @@ async function listRemnicPublicArtifacts(params) {
3104
3118
  for (const spec of PUBLIC_FILES) {
3105
3119
  const absolutePath = path.join(memoryDir, spec.relativePath);
3106
3120
  if (!await pathExists(absolutePath)) continue;
3107
- if (!await isContainedWithin(absolutePath, memoryDir)) continue;
3121
+ const resolvedPath = await resolveContainedPath(absolutePath, memoryDir);
3122
+ if (resolvedPath === void 0) continue;
3108
3123
  try {
3109
3124
  const linkStat = await lstat(absolutePath);
3110
- if (linkStat.isSymbolicLink()) {
3111
- const resolvedPath = await realpath(absolutePath);
3112
- const expectedParent = await realpath(memoryDir);
3113
- if (path.dirname(resolvedPath) !== expectedParent) continue;
3114
- if (path.basename(resolvedPath) !== path.basename(spec.relativePath)) continue;
3115
- }
3125
+ if (linkStat.isSymbolicLink()) continue;
3116
3126
  } catch {
3117
3127
  continue;
3118
3128
  }
3119
3129
  try {
3120
- const fileStat = await stat(absolutePath);
3130
+ const fileStat = await stat(resolvedPath);
3121
3131
  if (!fileStat.isFile()) continue;
3122
3132
  } catch {
3123
3133
  continue;
@@ -3126,16 +3136,14 @@ async function listRemnicPublicArtifacts(params) {
3126
3136
  kind: spec.kind,
3127
3137
  workspaceDir,
3128
3138
  relativePath: spec.relativePath,
3129
- absolutePath,
3139
+ absolutePath: resolvedPath,
3130
3140
  agentIds: [...agentIds],
3131
3141
  contentType: spec.contentType
3132
3142
  });
3133
3143
  }
3134
3144
  const deduped = /* @__PURE__ */ new Map();
3135
3145
  for (const artifact of artifacts) {
3136
- const key = [artifact.workspaceDir, artifact.relativePath, artifact.kind].join(
3137
- String.fromCharCode(0)
3138
- );
3146
+ const key = [artifact.workspaceDir, artifact.relativePath, artifact.kind].join(String.fromCharCode(0));
3139
3147
  deduped.set(key, artifact);
3140
3148
  }
3141
3149
  return [...deduped.values()];
@@ -3224,6 +3232,22 @@ function buildMemorySearchTool(orchestrator, options = {}) {
3224
3232
  }
3225
3233
 
3226
3234
  // src/runtime-surfaces.ts
3235
+ import { gatewayTaskChainOptions } from "@remnic/core/fallback-llm";
3236
+ function resolveDreamNarrativeRoute(config, directClientAvailable) {
3237
+ if (config.modelSource === "gateway") {
3238
+ const narrativeModel = typeof config.dreaming.narrativeModel === "string" ? config.dreaming.narrativeModel.trim() : "";
3239
+ const hasExplicitModel = narrativeModel.length > 0;
3240
+ return {
3241
+ kind: "gateway",
3242
+ hasExplicitModel,
3243
+ options: {
3244
+ ...gatewayTaskChainOptions(config),
3245
+ ...hasExplicitModel ? { model: narrativeModel } : {}
3246
+ }
3247
+ };
3248
+ }
3249
+ return directClientAvailable ? { kind: "direct" } : { kind: "skip" };
3250
+ }
3227
3251
  var DREAM_SURFACE_TYPE = "dream";
3228
3252
  var HEARTBEAT_SURFACE_TYPE = "heartbeat";
3229
3253
  var DREAM_ENTRY_ID_KEY = "remnicDreamEntryId";
@@ -4963,7 +4987,8 @@ var pluginDefinition = {
4963
4987
  principal: cfg.agentAccessHttp.principal,
4964
4988
  maxBodyBytes: cfg.agentAccessHttp.maxBodyBytes,
4965
4989
  citationsEnabled: cfg.citationsEnabled,
4966
- citationsAutoDetect: cfg.citationsAutoDetect
4990
+ citationsAutoDetect: cfg.citationsAutoDetect,
4991
+ emitLegacyTools: cfg.emitLegacyTools
4967
4992
  });
4968
4993
  globalThis[keys.ACCESS_HTTP_SERVER] = accessHttpServer;
4969
4994
  const pluginStateDir = path3.join(cfg.memoryDir, "state", "plugins", serviceId);
@@ -5066,8 +5091,11 @@ var pluginDefinition = {
5066
5091
  }
5067
5092
  async function maybeAppendDreamFromConsolidation(observation) {
5068
5093
  if (!cfg.dreaming.enabled) return;
5069
- if (!dreamNarrativeClient) {
5070
- logger_exports.log.debug("dreaming narrative skipped: direct OpenAI Responses client unavailable");
5094
+ const route = resolveDreamNarrativeRoute(cfg, !!dreamNarrativeClient);
5095
+ if (route.kind === "skip") {
5096
+ logger_exports.log.debug(
5097
+ "dreaming narrative skipped: no LLM available (set openaiApiKey or use modelSource=gateway)"
5098
+ );
5071
5099
  return;
5072
5100
  }
5073
5101
  const journalPath = resolveDreamJournalPath();
@@ -5079,23 +5107,46 @@ var pluginDefinition = {
5079
5107
  });
5080
5108
  if (!plan) return;
5081
5109
  const styleInstruction = cfg.dreaming.narrativePromptStyle === "diary" ? "Write like a compact private diary entry." : cfg.dreaming.narrativePromptStyle === "analytical" ? "Write like an analytical retrospective with explicit patterns." : "Write like a reflective narrative that notices patterns and emotional tone.";
5082
- let rawNarrative = "";
5083
- try {
5084
- const response = await dreamNarrativeClient.responses.create({
5085
- model: cfg.dreaming.narrativeModel ?? cfg.model,
5086
- instructions: `You write short reflective dream-journal entries for an AI memory system. ${styleInstruction} Return exactly this structure:
5110
+ const instructions = `You write short reflective dream-journal entries for an AI memory system. ${styleInstruction} Return exactly this structure:
5087
5111
  Title: <short title>
5088
5112
  Tags: #tag #tag
5089
5113
  Body:
5090
- <2-4 concise paragraphs>`,
5091
- input: `The last consolidation spanned ${plan.sessionLikeCount} session-like windows.
5114
+ <2-4 concise paragraphs>`;
5115
+ const input = `The last consolidation spanned ${plan.sessionLikeCount} session-like windows.
5092
5116
  Keep the reflection grounded in the evidence below.
5093
5117
 
5094
- ` + plan.memoryContext.join("\n"),
5095
- temperature: 0.4,
5096
- max_output_tokens: 400
5097
- });
5098
- rawNarrative = typeof response.output_text === "string" ? response.output_text : JSON.stringify(response.output_text ?? "");
5118
+ ` + plan.memoryContext.join("\n");
5119
+ let rawNarrative = "";
5120
+ try {
5121
+ if (route.kind === "gateway") {
5122
+ const llm = new FallbackLlmClient(
5123
+ cfg.gatewayConfig,
5124
+ fallbackLlmRuntimeContextFromConfig(cfg)
5125
+ );
5126
+ if (!route.hasExplicitModel && !llm.isAvailable(route.options)) {
5127
+ logger_exports.log.debug(
5128
+ "dreaming narrative skipped: no gateway model configured (set dreaming.narrativeModel or taskModelChain)"
5129
+ );
5130
+ return;
5131
+ }
5132
+ const response = await llm.chatCompletion(
5133
+ [
5134
+ { role: "system", content: instructions },
5135
+ { role: "user", content: input }
5136
+ ],
5137
+ { temperature: 0.4, maxTokens: 400, ...route.options }
5138
+ );
5139
+ rawNarrative = response?.content ?? "";
5140
+ } else {
5141
+ const response = await dreamNarrativeClient.responses.create({
5142
+ model: cfg.dreaming.narrativeModel ?? cfg.model,
5143
+ instructions,
5144
+ input,
5145
+ temperature: 0.4,
5146
+ max_output_tokens: 400
5147
+ });
5148
+ rawNarrative = typeof response.output_text === "string" ? response.output_text : JSON.stringify(response.output_text ?? "");
5149
+ }
5099
5150
  } catch (error) {
5100
5151
  logger_exports.log.warn(`dreaming narrative generation failed: ${String(error)}`);
5101
5152
  return;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "id": "openclaw-remnic",
3
3
  "name": "Remnic OpenClaw Plugin",
4
- "version": "9.3.612",
4
+ "version": "9.3.614",
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": {
@@ -314,6 +314,32 @@
314
314
  "default": true,
315
315
  "description": "When false, ask supported QMD versions to skip the built-in rerank step"
316
316
  },
317
+ "qmdSearchStrategy": {
318
+ "type": "string",
319
+ "enum": [
320
+ "hybrid",
321
+ "lex-vec",
322
+ "lex"
323
+ ],
324
+ "default": "hybrid",
325
+ "description": "Daemon search plan. 'hybrid' (default) runs lex+vec+hyde for best recall; 'lex-vec' drops the expensive HyDE generate leg; 'lex' is BM25-only (fastest). Lower tiers trade recall for latency on CPU-only models. Default preserves existing behavior (issue #1335)."
326
+ },
327
+ "qmdSubprocessStrategy": {
328
+ "type": "string",
329
+ "enum": [
330
+ "query",
331
+ "search"
332
+ ],
333
+ "default": "query",
334
+ "description": "Command for the QMD CLI subprocess fallback, used only when the daemon is unavailable. 'query' (default) keeps LLM query expansion + rerank; 'search' is BM25-only and faster on very large collections but loses expansion/rerank. Default preserves existing behavior (issue #1335)."
335
+ },
336
+ "qmdDaemonTimeoutMs": {
337
+ "type": "number",
338
+ "minimum": 1000,
339
+ "maximum": 120000,
340
+ "default": 8000,
341
+ "description": "Per-call timeout (ms) for QMD daemon searches. Default 8000; raise (e.g. 20000) to give CPU-only HyDE queries more headroom before the daemon call times out (issue #1335)."
342
+ },
317
343
  "qmdIndexName": {
318
344
  "type": "string",
319
345
  "description": "Optional QMD named index forwarded as qmd --index <name> when supported. Leave unset during upgrades unless existing QMD data already lives in that named index."
@@ -485,7 +511,8 @@
485
511
  },
486
512
  "narrativeModel": {
487
513
  "type": "string",
488
- "default": ""
514
+ "default": "",
515
+ "description": "Model used to write dream-journal narratives. Under modelSource=plugin this must be an OpenAI model id used with the direct OpenAI key. Under modelSource=gateway it accepts a provider-qualified id (e.g. zai/glm-4.7-flash) routed through gateway providers — no direct OpenAI key required; leave empty to fall back to taskModelChain / the gateway default chain."
489
516
  },
490
517
  "narrativePromptStyle": {
491
518
  "type": "string",
@@ -1288,6 +1315,11 @@
1288
1315
  "default": true,
1289
1316
  "description": "Auto-regenerate RESOLVER.md when the taxonomy changes."
1290
1317
  },
1318
+ "emitLegacyTools": {
1319
+ "type": "boolean",
1320
+ "default": true,
1321
+ "description": "Advertise legacy engram_* / engram.* MCP tool aliases alongside the canonical remnic_* names (issue #1427). Default true for backward compatibility. Set false to halve the advertised tools/list surface (only remnic_* names); tools remain callable under both names. Also settable via REMNIC_EMIT_LEGACY_TOOLS."
1322
+ },
1291
1323
  "citationsEnabled": {
1292
1324
  "type": "boolean",
1293
1325
  "default": false,
@@ -1878,10 +1910,15 @@
1878
1910
  "default": true,
1879
1911
  "description": "Use lightweight retrieve-vs-think planning to avoid unnecessary recall work."
1880
1912
  },
1913
+ "recallPlannerLlmEnabled": {
1914
+ "type": "boolean",
1915
+ "default": false,
1916
+ "description": "Opt in to LLM-based recall planning (issue #1367). When false, recall mode is decided by the regex heuristic. When true, the configured recallPlannerModel classifies recall intent via the gateway/fallback LLM chain (provider-agnostic) and falls back to the heuristic on timeout/error. Requires recallPlannerEnabled."
1917
+ },
1881
1918
  "recallPlannerModel": {
1882
1919
  "type": "string",
1883
1920
  "default": "gpt-5.5",
1884
- "description": "Model to use for the recall planner."
1921
+ "description": "Model for LLM-based recall planning (recallPlannerLlmEnabled). A 'provider/model' string resolved through the gateway providers/chain — any configured provider works (OpenAI, Anthropic, Ollama, Codex, gateway personas). Tried first, with taskModelChain / gateway defaults as fallback."
1885
1922
  },
1886
1923
  "recallPlannerTimeoutMs": {
1887
1924
  "type": "number",
@@ -1891,7 +1928,7 @@
1891
1928
  "recallPlannerUseResponsesApi": {
1892
1929
  "type": "boolean",
1893
1930
  "default": true,
1894
- "description": "Use OpenAI Responses API for recall planner calls."
1931
+ "description": "Reserved. The chat vs Responses API dialect is chosen per-provider by the gateway/fallback client based on each provider's api field, so this flag does not override routing; OpenAI providers already use Responses (gotcha #1)."
1895
1932
  },
1896
1933
  "recallPlannerMaxPromptChars": {
1897
1934
  "type": "number",
@@ -1901,7 +1938,7 @@
1901
1938
  "recallPlannerMaxMemoryHints": {
1902
1939
  "type": "number",
1903
1940
  "default": 24,
1904
- "description": "Maximum number of recent memory hints included in the recall planner prompt."
1941
+ "description": "Reserved. Caps recent-memory hints in the recall planner prompt when a caller supplies them; the default recall path does not populate hints (the LLM planner classifies on the prompt alone)."
1905
1942
  },
1906
1943
  "recallPlannerShadowMode": {
1907
1944
  "type": "boolean",
@@ -3125,6 +3162,30 @@
3125
3162
  "default": "",
3126
3163
  "description": "Agent persona ID for fast-tier ops (rerank, entity summaries, compression guidelines). When modelSource is 'gateway' and this is empty, fast ops use the same chain as gatewayAgentId."
3127
3164
  },
3165
+ "taskModelChain": {
3166
+ "type": "object",
3167
+ "description": "Optional task-specific gateway model chain for Remnic's background LLM work (extraction, fact/profile/identity consolidation, summarization, causal consolidation). When set, this chain is resolved through gateway providers instead of gatewayAgentId or agents.defaults.model. Only applies when modelSource is 'gateway'.",
3168
+ "required": [
3169
+ "primary"
3170
+ ],
3171
+ "additionalProperties": false,
3172
+ "properties": {
3173
+ "primary": {
3174
+ "type": "string",
3175
+ "minLength": 1,
3176
+ "description": "Primary gateway model, e.g. zai/glm-4.7-flash"
3177
+ },
3178
+ "fallbacks": {
3179
+ "type": "array",
3180
+ "items": {
3181
+ "type": "string",
3182
+ "minLength": 1
3183
+ },
3184
+ "default": [],
3185
+ "description": "Fallback gateway models tried after primary"
3186
+ }
3187
+ }
3188
+ },
3128
3189
  "localLlmEnabled": {
3129
3190
  "type": "boolean",
3130
3191
  "default": false,
@@ -5037,6 +5098,23 @@
5037
5098
  "label": "QMD Query Rerank",
5038
5099
  "advanced": true
5039
5100
  },
5101
+ "qmdSearchStrategy": {
5102
+ "label": "QMD Search Strategy",
5103
+ "advanced": true,
5104
+ "placeholder": "hybrid",
5105
+ "help": "hybrid = lex+vec+hyde (default, best recall). lex-vec drops HyDE. lex = BM25-only (fastest). Lower tiers reduce CPU latency at the cost of recall."
5106
+ },
5107
+ "qmdSubprocessStrategy": {
5108
+ "label": "QMD Subprocess Strategy",
5109
+ "advanced": true,
5110
+ "placeholder": "query",
5111
+ "help": "query = qmd query with LLM expansion + rerank (default). search = BM25-only fallback, faster on huge collections but loses expansion/rerank."
5112
+ },
5113
+ "qmdDaemonTimeoutMs": {
5114
+ "label": "QMD Daemon Timeout (ms)",
5115
+ "advanced": true,
5116
+ "placeholder": "8000"
5117
+ },
5040
5118
  "qmdIndexName": {
5041
5119
  "label": "QMD Index Name",
5042
5120
  "advanced": true,
@@ -5430,6 +5508,11 @@
5430
5508
  "placeholder": "engram-llm-fast",
5431
5509
  "help": "Agent persona ID for fast-tier ops. Leave empty to use the primary gatewayAgentId."
5432
5510
  },
5511
+ "taskModelChain": {
5512
+ "label": "Task Model Chain",
5513
+ "advanced": true,
5514
+ "help": "Optional primary/fallback gateway model chain for Remnic background tasks (extraction, consolidation, summarization). Overrides gatewayAgentId/defaults for these tasks only. Requires modelSource: 'gateway'."
5515
+ },
5433
5516
  "localLlmEnabled": {
5434
5517
  "label": "Enable Local LLM",
5435
5518
  "help": "Use local LLM (LM Studio, Ollama, etc.) for extraction and summaries. Falls back to OpenAI if unavailable."
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remnic/plugin-openclaw",
3
- "version": "9.3.612",
3
+ "version": "9.3.614",
4
4
  "description": "OpenClaw adapter for Remnic memory with bundled @remnic/core runtime",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -28,11 +28,11 @@
28
28
  "./dist/index.js"
29
29
  ],
30
30
  "compat": {
31
- "pluginApi": ">=2026.4.1 || 2026.4.7-1 || 2026.4.9-beta.1 || 2026.4.11-beta.1 || 2026.4.12-beta.1 || 2026.4.14-beta.1 || 2026.4.15-beta.1 || 2026.4.15-beta.2 || 2026.4.19-beta.1 || 2026.4.19-beta.2 || 2026.4.20-beta.1 || 2026.4.20-beta.2 || 2026.4.22-beta.1 || 2026.4.23-beta.1 || 2026.4.23-beta.2 || 2026.4.23-beta.3 || 2026.4.23-beta.4 || 2026.4.23-beta.5 || 2026.4.23-beta.6 || 2026.4.24-beta.1 || 2026.4.24-beta.2 || 2026.4.24-beta.3 || 2026.4.24-beta.4 || 2026.4.24-beta.5 || 2026.4.24-beta.6 || 2026.4.25-beta.1 || 2026.4.25-beta.2 || 2026.4.25-beta.3 || 2026.4.25-beta.4 || 2026.4.25-beta.5 || 2026.4.25-beta.6 || 2026.4.25-beta.7 || 2026.4.25-beta.8 || 2026.4.25-beta.9 || 2026.4.25-beta.10 || 2026.4.25-beta.11 || 2026.4.26-beta.1 || 2026.4.27-beta.1 || 2026.4.29-beta.1 || 2026.4.29-beta.2 || 2026.4.29-beta.3 || 2026.4.29-beta.4 || 2026.4.30-beta.1 || 2026.5.2-beta.1 || 2026.5.2-beta.2 || 2026.5.2-beta.3 || 2026.5.3-1 || 2026.5.3-beta.1 || 2026.5.3-beta.2 || 2026.5.3-beta.3 || 2026.5.3-beta.4 || 2026.5.4-beta.1 || 2026.5.4-beta.2 || 2026.5.4-beta.3 || 2026.5.5-beta.1 || 2026.5.5-beta.2 || 2026.5.6-beta.1 || 2026.5.7-beta.1 || 2026.5.9-beta.1 || 2026.5.10-beta.1 || 2026.5.10-beta.2 || 2026.5.10-beta.3 || 2026.5.10-beta.4 || 2026.5.10-beta.5 || 2026.5.10-beta.6 || 2026.5.12-beta.1 || 2026.5.12-beta.2 || 2026.5.12-beta.3 || 2026.5.12-beta.4 || 2026.5.12-beta.5 || 2026.5.12-beta.6 || 2026.5.12-beta.7 || 2026.5.12-beta.8 || 2026.5.14-beta.1 || 2026.5.14-beta.2 || 2026.5.16-beta.1 || 2026.5.16-beta.2 || 2026.5.16-beta.3 || 2026.5.16-beta.4 || 2026.5.16-beta.5 || 2026.5.16-beta.6 || 2026.5.16-beta.7 || 2026.5.18-beta.1 || 2026.5.19-alpha.1 || 2026.5.19-beta.1 || 2026.5.19-beta.2 || 2026.5.20-beta.1 || 2026.5.20-beta.2 || 2026.5.21-alpha.1 || 2026.5.21-beta.1 || 2026.5.22-beta.1 || 2026.5.23-alpha.1 || 2026.5.24-alpha.1 || 2026.5.24-beta.1 || 2026.5.24-beta.2 || 2026.5.25-alpha.1 || 2026.5.25-alpha.2 || 2026.5.25-beta.1 || 2026.5.26-beta.1 || 2026.5.26-beta.2 || 2026.5.27-alpha.1 || 2026.5.27-beta.1 || 2026.5.28-alpha.1 || 2026.5.28-beta.1 || 2026.5.28-beta.2 || 2026.5.28-beta.3 || 2026.5.28-beta.4 || 2026.5.29-alpha.1 || 2026.5.30-beta.1 || 2026.5.30-beta.2 || 2026.5.31-alpha.1 || 2026.5.31-beta.1 || 2026.5.31-beta.2 || 2026.5.31-beta.3 || 2026.5.31-beta.4 || 2026.6.1-alpha.1 || 2026.6.1-alpha.2 || 2026.6.1-alpha.3 || 2026.6.1-beta.1 || 2026.6.1-beta.2 || 2026.6.1-beta.3 || 2026.6.2-alpha.1 || 2026.6.2-alpha.2 || 2026.6.3-alpha.1"
31
+ "pluginApi": ">=2026.4.1 || 2026.4.7-1 || 2026.4.9-beta.1 || 2026.4.11-beta.1 || 2026.4.12-beta.1 || 2026.4.14-beta.1 || 2026.4.15-beta.1 || 2026.4.15-beta.2 || 2026.4.19-beta.1 || 2026.4.19-beta.2 || 2026.4.20-beta.1 || 2026.4.20-beta.2 || 2026.4.22-beta.1 || 2026.4.23-beta.1 || 2026.4.23-beta.2 || 2026.4.23-beta.3 || 2026.4.23-beta.4 || 2026.4.23-beta.5 || 2026.4.23-beta.6 || 2026.4.24-beta.1 || 2026.4.24-beta.2 || 2026.4.24-beta.3 || 2026.4.24-beta.4 || 2026.4.24-beta.5 || 2026.4.24-beta.6 || 2026.4.25-beta.1 || 2026.4.25-beta.2 || 2026.4.25-beta.3 || 2026.4.25-beta.4 || 2026.4.25-beta.5 || 2026.4.25-beta.6 || 2026.4.25-beta.7 || 2026.4.25-beta.8 || 2026.4.25-beta.9 || 2026.4.25-beta.10 || 2026.4.25-beta.11 || 2026.4.26-beta.1 || 2026.4.27-beta.1 || 2026.4.29-beta.1 || 2026.4.29-beta.2 || 2026.4.29-beta.3 || 2026.4.29-beta.4 || 2026.4.30-beta.1 || 2026.5.2-beta.1 || 2026.5.2-beta.2 || 2026.5.2-beta.3 || 2026.5.3-1 || 2026.5.3-beta.1 || 2026.5.3-beta.2 || 2026.5.3-beta.3 || 2026.5.3-beta.4 || 2026.5.4-beta.1 || 2026.5.4-beta.2 || 2026.5.4-beta.3 || 2026.5.5-beta.1 || 2026.5.5-beta.2 || 2026.5.6-beta.1 || 2026.5.7-beta.1 || 2026.5.9-beta.1 || 2026.5.10-beta.1 || 2026.5.10-beta.2 || 2026.5.10-beta.3 || 2026.5.10-beta.4 || 2026.5.10-beta.5 || 2026.5.10-beta.6 || 2026.5.12-beta.1 || 2026.5.12-beta.2 || 2026.5.12-beta.3 || 2026.5.12-beta.4 || 2026.5.12-beta.5 || 2026.5.12-beta.6 || 2026.5.12-beta.7 || 2026.5.12-beta.8 || 2026.5.14-beta.1 || 2026.5.14-beta.2 || 2026.5.16-beta.1 || 2026.5.16-beta.2 || 2026.5.16-beta.3 || 2026.5.16-beta.4 || 2026.5.16-beta.5 || 2026.5.16-beta.6 || 2026.5.16-beta.7 || 2026.5.18-beta.1 || 2026.5.19-alpha.1 || 2026.5.19-beta.1 || 2026.5.19-beta.2 || 2026.5.20-beta.1 || 2026.5.20-beta.2 || 2026.5.21-alpha.1 || 2026.5.21-beta.1 || 2026.5.22-beta.1 || 2026.5.23-alpha.1 || 2026.5.24-alpha.1 || 2026.5.24-beta.1 || 2026.5.24-beta.2 || 2026.5.25-alpha.1 || 2026.5.25-alpha.2 || 2026.5.25-beta.1 || 2026.5.26-beta.1 || 2026.5.26-beta.2 || 2026.5.27-alpha.1 || 2026.5.27-beta.1 || 2026.5.28-alpha.1 || 2026.5.28-beta.1 || 2026.5.28-beta.2 || 2026.5.28-beta.3 || 2026.5.28-beta.4 || 2026.5.29-alpha.1 || 2026.5.30-beta.1 || 2026.5.30-beta.2 || 2026.5.31-alpha.1 || 2026.5.31-beta.1 || 2026.5.31-beta.2 || 2026.5.31-beta.3 || 2026.5.31-beta.4 || 2026.6.1-alpha.1 || 2026.6.1-alpha.2 || 2026.6.1-alpha.3 || 2026.6.1-beta.1 || 2026.6.1-beta.2 || 2026.6.1-beta.3 || 2026.6.2-alpha.1 || 2026.6.2-alpha.2 || 2026.6.2-beta.1 || 2026.6.3-alpha.1 || 2026.6.4-alpha.1 || 2026.6.5-alpha.1 || 2026.6.5-alpha.2 || 2026.6.5-beta.1 || 2026.6.5-beta.2 || 2026.6.6-alpha.1"
32
32
  },
33
33
  "build": {
34
- "openclawVersion": "2026.6.3-alpha.1",
35
- "pluginSdkVersion": "2026.6.3-alpha.1"
34
+ "openclawVersion": "2026.6.6-alpha.1",
35
+ "pluginSdkVersion": "2026.6.6-alpha.1"
36
36
  },
37
37
  "install": {
38
38
  "clawhubSpec": "clawhub:@remnic/plugin-openclaw",
@@ -72,17 +72,17 @@
72
72
  "dependencies": {
73
73
  "@sinclair/typebox": "^0.34.0",
74
74
  "openai": "^6.0.0",
75
- "@remnic/core": "^9.3.612"
75
+ "@remnic/core": "^9.3.614"
76
76
  },
77
77
  "peerDependencies": {
78
- "openclaw": ">=2026.4.1 || 2026.4.7-1 || 2026.4.9-beta.1 || 2026.4.11-beta.1 || 2026.4.12-beta.1 || 2026.4.14-beta.1 || 2026.4.15-beta.1 || 2026.4.15-beta.2 || 2026.4.19-beta.1 || 2026.4.19-beta.2 || 2026.4.20-beta.1 || 2026.4.20-beta.2 || 2026.4.22-beta.1 || 2026.4.23-beta.1 || 2026.4.23-beta.2 || 2026.4.23-beta.3 || 2026.4.23-beta.4 || 2026.4.23-beta.5 || 2026.4.23-beta.6 || 2026.4.24-beta.1 || 2026.4.24-beta.2 || 2026.4.24-beta.3 || 2026.4.24-beta.4 || 2026.4.24-beta.5 || 2026.4.24-beta.6 || 2026.4.25-beta.1 || 2026.4.25-beta.2 || 2026.4.25-beta.3 || 2026.4.25-beta.4 || 2026.4.25-beta.5 || 2026.4.25-beta.6 || 2026.4.25-beta.7 || 2026.4.25-beta.8 || 2026.4.25-beta.9 || 2026.4.25-beta.10 || 2026.4.25-beta.11 || 2026.4.26-beta.1 || 2026.4.27-beta.1 || 2026.4.29-beta.1 || 2026.4.29-beta.2 || 2026.4.29-beta.3 || 2026.4.29-beta.4 || 2026.4.30-beta.1 || 2026.5.2-beta.1 || 2026.5.2-beta.2 || 2026.5.2-beta.3 || 2026.5.3-1 || 2026.5.3-beta.1 || 2026.5.3-beta.2 || 2026.5.3-beta.3 || 2026.5.3-beta.4 || 2026.5.4-beta.1 || 2026.5.4-beta.2 || 2026.5.4-beta.3 || 2026.5.5-beta.1 || 2026.5.5-beta.2 || 2026.5.6-beta.1 || 2026.5.7-beta.1 || 2026.5.9-beta.1 || 2026.5.10-beta.1 || 2026.5.10-beta.2 || 2026.5.10-beta.3 || 2026.5.10-beta.4 || 2026.5.10-beta.5 || 2026.5.10-beta.6 || 2026.5.12-beta.1 || 2026.5.12-beta.2 || 2026.5.12-beta.3 || 2026.5.12-beta.4 || 2026.5.12-beta.5 || 2026.5.12-beta.6 || 2026.5.12-beta.7 || 2026.5.12-beta.8 || 2026.5.14-beta.1 || 2026.5.14-beta.2 || 2026.5.16-beta.1 || 2026.5.16-beta.2 || 2026.5.16-beta.3 || 2026.5.16-beta.4 || 2026.5.16-beta.5 || 2026.5.16-beta.6 || 2026.5.16-beta.7 || 2026.5.18-beta.1 || 2026.5.19-alpha.1 || 2026.5.19-beta.1 || 2026.5.19-beta.2 || 2026.5.20-beta.1 || 2026.5.20-beta.2 || 2026.5.21-alpha.1 || 2026.5.21-beta.1 || 2026.5.22-beta.1 || 2026.5.23-alpha.1 || 2026.5.24-alpha.1 || 2026.5.24-beta.1 || 2026.5.24-beta.2 || 2026.5.25-alpha.1 || 2026.5.25-alpha.2 || 2026.5.25-beta.1 || 2026.5.26-beta.1 || 2026.5.26-beta.2 || 2026.5.27-alpha.1 || 2026.5.27-beta.1 || 2026.5.28-alpha.1 || 2026.5.28-beta.1 || 2026.5.28-beta.2 || 2026.5.28-beta.3 || 2026.5.28-beta.4 || 2026.5.29-alpha.1 || 2026.5.30-beta.1 || 2026.5.30-beta.2 || 2026.5.31-alpha.1 || 2026.5.31-beta.1 || 2026.5.31-beta.2 || 2026.5.31-beta.3 || 2026.5.31-beta.4 || 2026.6.1-alpha.1 || 2026.6.1-alpha.2 || 2026.6.1-alpha.3 || 2026.6.1-beta.1 || 2026.6.1-beta.2 || 2026.6.1-beta.3 || 2026.6.2-alpha.1 || 2026.6.2-alpha.2 || 2026.6.3-alpha.1"
78
+ "openclaw": ">=2026.4.1 || 2026.4.7-1 || 2026.4.9-beta.1 || 2026.4.11-beta.1 || 2026.4.12-beta.1 || 2026.4.14-beta.1 || 2026.4.15-beta.1 || 2026.4.15-beta.2 || 2026.4.19-beta.1 || 2026.4.19-beta.2 || 2026.4.20-beta.1 || 2026.4.20-beta.2 || 2026.4.22-beta.1 || 2026.4.23-beta.1 || 2026.4.23-beta.2 || 2026.4.23-beta.3 || 2026.4.23-beta.4 || 2026.4.23-beta.5 || 2026.4.23-beta.6 || 2026.4.24-beta.1 || 2026.4.24-beta.2 || 2026.4.24-beta.3 || 2026.4.24-beta.4 || 2026.4.24-beta.5 || 2026.4.24-beta.6 || 2026.4.25-beta.1 || 2026.4.25-beta.2 || 2026.4.25-beta.3 || 2026.4.25-beta.4 || 2026.4.25-beta.5 || 2026.4.25-beta.6 || 2026.4.25-beta.7 || 2026.4.25-beta.8 || 2026.4.25-beta.9 || 2026.4.25-beta.10 || 2026.4.25-beta.11 || 2026.4.26-beta.1 || 2026.4.27-beta.1 || 2026.4.29-beta.1 || 2026.4.29-beta.2 || 2026.4.29-beta.3 || 2026.4.29-beta.4 || 2026.4.30-beta.1 || 2026.5.2-beta.1 || 2026.5.2-beta.2 || 2026.5.2-beta.3 || 2026.5.3-1 || 2026.5.3-beta.1 || 2026.5.3-beta.2 || 2026.5.3-beta.3 || 2026.5.3-beta.4 || 2026.5.4-beta.1 || 2026.5.4-beta.2 || 2026.5.4-beta.3 || 2026.5.5-beta.1 || 2026.5.5-beta.2 || 2026.5.6-beta.1 || 2026.5.7-beta.1 || 2026.5.9-beta.1 || 2026.5.10-beta.1 || 2026.5.10-beta.2 || 2026.5.10-beta.3 || 2026.5.10-beta.4 || 2026.5.10-beta.5 || 2026.5.10-beta.6 || 2026.5.12-beta.1 || 2026.5.12-beta.2 || 2026.5.12-beta.3 || 2026.5.12-beta.4 || 2026.5.12-beta.5 || 2026.5.12-beta.6 || 2026.5.12-beta.7 || 2026.5.12-beta.8 || 2026.5.14-beta.1 || 2026.5.14-beta.2 || 2026.5.16-beta.1 || 2026.5.16-beta.2 || 2026.5.16-beta.3 || 2026.5.16-beta.4 || 2026.5.16-beta.5 || 2026.5.16-beta.6 || 2026.5.16-beta.7 || 2026.5.18-beta.1 || 2026.5.19-alpha.1 || 2026.5.19-beta.1 || 2026.5.19-beta.2 || 2026.5.20-beta.1 || 2026.5.20-beta.2 || 2026.5.21-alpha.1 || 2026.5.21-beta.1 || 2026.5.22-beta.1 || 2026.5.23-alpha.1 || 2026.5.24-alpha.1 || 2026.5.24-beta.1 || 2026.5.24-beta.2 || 2026.5.25-alpha.1 || 2026.5.25-alpha.2 || 2026.5.25-beta.1 || 2026.5.26-beta.1 || 2026.5.26-beta.2 || 2026.5.27-alpha.1 || 2026.5.27-beta.1 || 2026.5.28-alpha.1 || 2026.5.28-beta.1 || 2026.5.28-beta.2 || 2026.5.28-beta.3 || 2026.5.28-beta.4 || 2026.5.29-alpha.1 || 2026.5.30-beta.1 || 2026.5.30-beta.2 || 2026.5.31-alpha.1 || 2026.5.31-beta.1 || 2026.5.31-beta.2 || 2026.5.31-beta.3 || 2026.5.31-beta.4 || 2026.6.1-alpha.1 || 2026.6.1-alpha.2 || 2026.6.1-alpha.3 || 2026.6.1-beta.1 || 2026.6.1-beta.2 || 2026.6.1-beta.3 || 2026.6.2-alpha.1 || 2026.6.2-alpha.2 || 2026.6.2-beta.1 || 2026.6.3-alpha.1 || 2026.6.4-alpha.1 || 2026.6.5-alpha.1 || 2026.6.5-alpha.2 || 2026.6.5-beta.1 || 2026.6.5-beta.2 || 2026.6.6-alpha.1"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@openclaw/plugin-inspector": "0.3.10",
82
82
  "acorn": "^8.16.0",
83
83
  "tsup": "^8.5.1",
84
84
  "typescript": "^5.9.3",
85
- "@remnic/core": "^9.3.612"
85
+ "@remnic/core": "^9.3.614"
86
86
  },
87
87
  "license": "MIT",
88
88
  "repository": {