@remnic/plugin-openclaw 9.3.672 → 9.3.673
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 +2 -2
- package/dist/index.js +38 -11
- package/openclaw.plugin.json +6 -6
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -124,7 +124,7 @@ This plugin hooks into the OpenClaw gateway lifecycle:
|
|
|
124
124
|
- **`session_start`** / **`session_end`** -- session lifecycle tracking
|
|
125
125
|
- **`before_tool_call`** / **`after_tool_call`** -- tool usage observation for analytics
|
|
126
126
|
- **`llm_output`** -- LLM token usage tracking
|
|
127
|
-
- **`
|
|
127
|
+
- **`subagent_spawned`** / **`subagent_ended`** -- subagent lifecycle observation (replaced the deprecated `subagent_spawning` hook in issue #1550; core handles thread-bound subagent bindings)
|
|
128
128
|
- **Tools** -- registers `memory_search`, `memory_get`, `memory_stats`, and other agent tools
|
|
129
129
|
- **Commands** -- provides CLI commands for memory management
|
|
130
130
|
|
|
@@ -441,7 +441,7 @@ and can optionally persist JSONL recall transcripts under
|
|
|
441
441
|
|---------|--------|-------|
|
|
442
442
|
| `before_tool_call` / `after_tool_call` | Supported | 2026.3.22 |
|
|
443
443
|
| `llm_output` (token tracking) | Supported | 2026.3.22 |
|
|
444
|
-
| `
|
|
444
|
+
| `subagent_spawned` / `subagent_ended` | Supported (replaced `subagent_spawning`) | 2026.3.22 |
|
|
445
445
|
|
|
446
446
|
### Dreaming
|
|
447
447
|
|
package/dist/index.js
CHANGED
|
@@ -5364,6 +5364,7 @@ function hasEnabledLiveConnectorConfig(config) {
|
|
|
5364
5364
|
var ENGRAM_MIGRATION_PROMISE = "__openclawEngramMigrationPromise";
|
|
5365
5365
|
var CLI_REGISTERED_GUARD = "__openclawEngramCliRegistered";
|
|
5366
5366
|
var SESSION_COMMANDS_REGISTERED_GUARD = "__openclawEngramSessionCommandsRegistered";
|
|
5367
|
+
var ACTIVE_RECALL_OVERLAP_WARNED = "__openclawEngramActiveRecallOverlapWarned";
|
|
5367
5368
|
var CLI_ACTIVE_SERVICE_COUNT = "__openclawEngramCliActiveServiceCount";
|
|
5368
5369
|
var SECRET_REF_RESOLVER_TEST_KEY = "__openclawEngramSecretRefResolverForTest";
|
|
5369
5370
|
var NODE_FS_MODULE_ID = ["node", "fs"].join(":");
|
|
@@ -5656,7 +5657,11 @@ function loadPluginEntryFromFile(pluginId) {
|
|
|
5656
5657
|
}
|
|
5657
5658
|
}
|
|
5658
5659
|
function loadPluginConfigFromFile(pluginId) {
|
|
5659
|
-
|
|
5660
|
+
const entry = loadPluginEntryFromFile(pluginId);
|
|
5661
|
+
const cfg = entry?.config;
|
|
5662
|
+
if (cfg === null || cfg === void 0) return void 0;
|
|
5663
|
+
if (typeof cfg !== "object" || Array.isArray(cfg)) return void 0;
|
|
5664
|
+
return cfg;
|
|
5660
5665
|
}
|
|
5661
5666
|
function loadRawConfigFromFile() {
|
|
5662
5667
|
try {
|
|
@@ -6066,14 +6071,30 @@ var pluginDefinition = {
|
|
|
6066
6071
|
}
|
|
6067
6072
|
const fileConfig = loadPluginConfigFromFile(serviceId);
|
|
6068
6073
|
const openclawFlushPlanProcessingEnabled = resolveOpenClawFlushPlanProcessingEnabledFromConfig(fileConfig, api.pluginConfig);
|
|
6069
|
-
const
|
|
6070
|
-
|
|
6071
|
-
|
|
6072
|
-
|
|
6073
|
-
|
|
6074
|
-
|
|
6075
|
-
|
|
6076
|
-
|
|
6074
|
+
const runtimeSet = /* @__PURE__ */ new Set();
|
|
6075
|
+
const cfg = (0, config_exports.parseConfig)(
|
|
6076
|
+
{
|
|
6077
|
+
...fileConfig,
|
|
6078
|
+
// File-backed fallback for runtimes that omit pluginConfig
|
|
6079
|
+
...api.pluginConfig,
|
|
6080
|
+
// Runtime/plugin-supplied config must win
|
|
6081
|
+
gatewayConfig: api.config
|
|
6082
|
+
// Pass gateway config for fallback AI
|
|
6083
|
+
},
|
|
6084
|
+
// `rawOperatorConfig` distinguishes "operator wrote this key in
|
|
6085
|
+
// openclaw.json" from "OpenClaw materialized a schema default into
|
|
6086
|
+
// api.pluginConfig" — the resolvers use it to keep the sticky-legacy
|
|
6087
|
+
// `emitLegacyTools` default reachable on upgraded installs where no
|
|
6088
|
+
// operator override exists (#1550, Cursor Bugbot PR #1593).
|
|
6089
|
+
//
|
|
6090
|
+
// When `fileConfig` is missing entirely (no openclaw.json on disk),
|
|
6091
|
+
// pass \`{}\` rather than undefined so the resolver treats the
|
|
6092
|
+
// absence the same as "file layer present but authored nothing" —
|
|
6093
|
+
// i.e. fall through to env / sticky-legacy instead of trusting a
|
|
6094
|
+
// materialized schema default (Cursor Bugbot PR #1593 round 3).
|
|
6095
|
+
fileConfig ?? {},
|
|
6096
|
+
runtimeSet
|
|
6097
|
+
);
|
|
6077
6098
|
cfg.providerApiKeyResolver = resolveOpenClawProviderCredential;
|
|
6078
6099
|
cfg.runtimeAuthForModelResolver = getOpenClawRuntimeAuthForModel;
|
|
6079
6100
|
(0, logger_exports.initLogger)(api.logger, cfg.debug);
|
|
@@ -7444,6 +7465,12 @@ Keep the reflection grounded in the evidence below.
|
|
|
7444
7465
|
}
|
|
7445
7466
|
let memoryPromptBuilder;
|
|
7446
7467
|
if (useMemoryPromptSection && api.registerMemoryPromptSection) {
|
|
7468
|
+
if (cfg.activeRecallEnabled && !globalThis[ACTIVE_RECALL_OVERLAP_WARNED]) {
|
|
7469
|
+
globalThis[ACTIVE_RECALL_OVERLAP_WARNED] = true;
|
|
7470
|
+
logger_exports.log.warn(
|
|
7471
|
+
"activeRecallEnabled=true while memory-slot prompt injection is active (registerMemoryPromptSection). Prompt injection does NOT require active recall; this runs a second blocking retrieval per turn. Disable activeRecallEnabled unless the secondary pre-reply summary block is intentional (issue #1550)."
|
|
7472
|
+
);
|
|
7473
|
+
}
|
|
7447
7474
|
api.on(
|
|
7448
7475
|
"before_prompt_build",
|
|
7449
7476
|
async (event, ctx) => {
|
|
@@ -8343,10 +8370,10 @@ Keep the reflection grounded in the evidence below.
|
|
|
8343
8370
|
}
|
|
8344
8371
|
);
|
|
8345
8372
|
api.on(
|
|
8346
|
-
"
|
|
8373
|
+
"subagent_spawned",
|
|
8347
8374
|
async (event, _ctx) => {
|
|
8348
8375
|
logger_exports.log.debug(
|
|
8349
|
-
`
|
|
8376
|
+
`subagent_spawned: ${event.subagentId ?? "?"} purpose=${event.purpose ?? "?"} parent=${event.parentSessionKey ?? "?"}`
|
|
8350
8377
|
);
|
|
8351
8378
|
}
|
|
8352
8379
|
);
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "openclaw-remnic",
|
|
3
3
|
"name": "Remnic OpenClaw Plugin",
|
|
4
|
-
"version": "9.3.
|
|
4
|
+
"version": "9.3.673",
|
|
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": {
|
|
@@ -1171,12 +1171,12 @@
|
|
|
1171
1171
|
"respectBundledActiveMemoryToggle": {
|
|
1172
1172
|
"type": "boolean",
|
|
1173
1173
|
"default": true,
|
|
1174
|
-
"description": "
|
|
1174
|
+
"description": "Compat-only (issue #1550): honor the bundled active-memory session toggle file when resolving Remnic recall toggles. Modern OpenClaw memory-slot mode + registerMemoryPromptSection is the primary prompt-injection path; this knob only matters when explicitly chaining Remnic active recall into the bundled `active-memory` plugin."
|
|
1175
1175
|
},
|
|
1176
1176
|
"activeRecallEnabled": {
|
|
1177
1177
|
"type": "boolean",
|
|
1178
1178
|
"default": false,
|
|
1179
|
-
"description": "
|
|
1179
|
+
"description": "Compat-only (issue #1550): enables the Remnic-native active-recall pre-reply summary block. NOT required for OpenClaw prompt injection — when Remnic is the memory slot, prompt injection runs through registerMemoryPromptSection / memory capability promptBuilder. Enable only to layer a second blocking pre-reply retrieval; a startup warning is logged when both this and memory-slot prompt injection are on."
|
|
1180
1180
|
},
|
|
1181
1181
|
"activeRecallAgents": {
|
|
1182
1182
|
"type": "array",
|
|
@@ -1343,7 +1343,7 @@
|
|
|
1343
1343
|
"activeRecallAllowChainedActiveMemory": {
|
|
1344
1344
|
"type": "boolean",
|
|
1345
1345
|
"default": false,
|
|
1346
|
-
"description": "
|
|
1346
|
+
"description": "Compat-only (issue #1550): allow the Remnic active-recall block to chain into the bundled active-memory surface. Redundant in modern OpenClaw memory-slot mode; only set true when intentionally layering Remnic + bundled active-memory for the same agent."
|
|
1347
1347
|
},
|
|
1348
1348
|
"codex": {
|
|
1349
1349
|
"type": "object",
|
|
@@ -1602,8 +1602,8 @@
|
|
|
1602
1602
|
},
|
|
1603
1603
|
"emitLegacyTools": {
|
|
1604
1604
|
"type": "boolean",
|
|
1605
|
-
"default":
|
|
1606
|
-
"description": "Advertise legacy engram_* / engram.* MCP tool aliases alongside the canonical remnic_* names
|
|
1605
|
+
"default": false,
|
|
1606
|
+
"description": "Advertise legacy engram_* / engram.* MCP tool aliases alongside the canonical remnic_* names. Issue #1550: defaults to false on fresh installs (halving the advertised tools/list surface); when existing legacy connector entries are present on disk the default stays true so upgrades never silently break a configured legacy client. An explicit value always wins."
|
|
1607
1607
|
},
|
|
1608
1608
|
"citationsEnabled": {
|
|
1609
1609
|
"type": "boolean",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/plugin-openclaw",
|
|
3
|
-
"version": "9.3.
|
|
3
|
+
"version": "9.3.673",
|
|
4
4
|
"description": "OpenClaw adapter for Remnic memory with bundled @remnic/core runtime",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"dependencies": {
|
|
73
73
|
"@sinclair/typebox": "^0.34.0",
|
|
74
74
|
"openai": "^6.0.0",
|
|
75
|
-
"@remnic/core": "^9.3.
|
|
75
|
+
"@remnic/core": "^9.3.673"
|
|
76
76
|
},
|
|
77
77
|
"peerDependencies": {
|
|
78
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-beta.1 || 2026.5.3-beta.2 || 2026.5.3-beta.3 || 2026.5.3-beta.4 || 2026.5.3-1 || 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.5-beta.3 || 2026.6.5-beta.5 || 2026.6.5-beta.6 || 2026.6.6-alpha.1 || 2026.6.6-beta.2 || 2026.6.6 || 2026.6.7-beta.1 || 2026.6.8-beta.1 || 2026.6.8-beta.2 || 2026.6.9-beta.1 || 2026.6.10-beta.1 || 2026.6.10-beta.2 || 2026.6.11-beta.1"
|
|
@@ -82,7 +82,7 @@
|
|
|
82
82
|
"acorn": "^8.16.0",
|
|
83
83
|
"tsup": "^8.5.1",
|
|
84
84
|
"typescript": "^5.9.3",
|
|
85
|
-
"@remnic/core": "^9.3.
|
|
85
|
+
"@remnic/core": "^9.3.673"
|
|
86
86
|
},
|
|
87
87
|
"license": "MIT",
|
|
88
88
|
"repository": {
|