@remnic/plugin-openclaw 1.0.27 → 1.0.29
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 +33 -9
- package/dist/{causal-consolidation-TSDDWHLO.js → causal-consolidation-3GTZFN2T.js} +2 -2
- package/dist/{chunk-XM3SU6WL.js → chunk-4UA6KMRO.js} +1 -1
- package/dist/{chunk-LJ2Q4UDE.js → chunk-HI5HX3S7.js} +1 -1
- package/dist/{chunk-WZU2H3I4.js → chunk-UVQXEQBQ.js} +2 -2
- package/dist/{chunk-MZ3LGDXW.js → chunk-ZXLYEVOP.js} +23 -12
- package/dist/{engine-2DZ5FF5Q.js → engine-XPEZBXIQ.js} +2 -2
- package/dist/index.js +19 -19
- package/dist/{memory-governance-7YPDMYCE.js → memory-governance-FEQCA35V.js} +2 -2
- package/dist/{storage-I26Y7X4D.js → storage-R3V6ZFQT.js} +1 -1
- package/openclaw.plugin.json +90 -70
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @remnic/plugin-openclaw
|
|
2
2
|
|
|
3
|
-
OpenClaw plugin for Remnic memory.
|
|
3
|
+
OpenClaw plugin for Remnic memory. The package bundles the OpenClaw adapter plus the Remnic core runtime so it can run without a separate Remnic service; the adapter registers OpenClaw hooks/tools and delegates memory behavior to [`@remnic/core`](https://www.npmjs.com/package/@remnic/core).
|
|
4
4
|
|
|
5
5
|
Part of [Remnic](https://github.com/joshuaswarren/remnic), the universal memory layer for AI agents.
|
|
6
6
|
|
|
@@ -79,7 +79,7 @@ runs from real runtime and OpenClaw chain runs.
|
|
|
79
79
|
This plugin hooks into the OpenClaw gateway lifecycle:
|
|
80
80
|
|
|
81
81
|
- **`gateway_start`** -- initializes the Remnic memory engine
|
|
82
|
-
- **`before_agent_start`** / **`before_prompt_build`** --
|
|
82
|
+
- **`before_agent_start`** / **`before_prompt_build`** -- adds relevant memories to the agent context through OpenClaw's memory context builders
|
|
83
83
|
- **`agent_end`** -- buffers the conversation turn for extraction
|
|
84
84
|
- **`before_compaction`** / **`after_compaction`** -- saves checkpoints and triggers session reset on context compaction
|
|
85
85
|
- **`before_reset`** -- bounded flush of the in-flight buffer before OpenClaw discards a session
|
|
@@ -91,7 +91,13 @@ This plugin hooks into the OpenClaw gateway lifecycle:
|
|
|
91
91
|
- **Tools** -- registers `memory_search`, `memory_get`, `memory_stats`, and other agent tools
|
|
92
92
|
- **Commands** -- provides CLI commands for memory management
|
|
93
93
|
|
|
94
|
-
All memory processing uses [`@remnic/core`](https://www.npmjs.com/package/@remnic/core). Memory files stay on your local filesystem as plain markdown files. When the plugin is configured to use OpenAI
|
|
94
|
+
All memory processing uses [`@remnic/core`](https://www.npmjs.com/package/@remnic/core). Memory files stay on your local filesystem as plain markdown files. When the plugin is configured to use OpenAI, an OpenAI-compatible endpoint, or provider credentials resolved from OpenClaw runtime auth, conversation and memory excerpts may be sent to that configured model provider for extraction, consolidation, summarization, embeddings, active recall, or benchmark judging. Use `modelSource: "gateway"` and route the gateway agent to local or otherwise approved models when those operations should stay on your own OpenClaw/local model path.
|
|
95
|
+
|
|
96
|
+
Credential and model-provider behavior is explicit:
|
|
97
|
+
|
|
98
|
+
- `modelSource: "gateway"` is the recommended OpenClaw mode and uses OpenClaw gateway agents instead of a Remnic-owned API key.
|
|
99
|
+
- Plugin/provider modes may read configured model credentials from the OpenClaw auth resolver, OpenClaw's materialized provider config at `~/.openclaw/agents/main/agent/models.json`, or provider-specific environment variables such as `<PROVIDER>_API_KEY` and `<PROVIDER>_TOKEN`.
|
|
100
|
+
- Do not set `openaiApiKey` or provider environment variables for Remnic if you want all LLM-backed memory work routed through the gateway.
|
|
95
101
|
|
|
96
102
|
## Plugin Inspection
|
|
97
103
|
|
|
@@ -108,6 +114,24 @@ guarded in the adapter, including `registerMemoryCapability`, `registerCli`,
|
|
|
108
114
|
and `registerCommand`; keep runtime capture coverage for those surfaces in a
|
|
109
115
|
separate adapter test slice.
|
|
110
116
|
|
|
117
|
+
## SDK Surface Drift Check
|
|
118
|
+
|
|
119
|
+
The adapter keeps a conservative OpenClaw SDK surface snapshot at
|
|
120
|
+
`openclaw-sdk-surface.expected.json`. Run
|
|
121
|
+
`npm run check:openclaw-sdk-surface` after changing OpenClaw dependencies or
|
|
122
|
+
with `-- --package-root <path>` to check a local OpenClaw checkout. When an
|
|
123
|
+
upstream SDK change is intentional, review the adapter impact first, then
|
|
124
|
+
refresh the snapshot with `npm run check:openclaw-sdk-surface -- --write`.
|
|
125
|
+
CI jobs that provision OpenClaw should use
|
|
126
|
+
`npm run check:openclaw-sdk-surface:required` or pass
|
|
127
|
+
`-- --require --package-root <path>` so a missing SDK fails instead of skipping.
|
|
128
|
+
|
|
129
|
+
Native memory registrars are tracked separately in
|
|
130
|
+
[`docs/plugins/openclaw-native-memory-registrars.md`](../../docs/plugins/openclaw-native-memory-registrars.md).
|
|
131
|
+
That spike explains why Remnic currently uses `registerMemoryCapability()` as
|
|
132
|
+
the primary integration point instead of OpenClaw embedding, corpus supplement,
|
|
133
|
+
or compaction-provider registrars.
|
|
134
|
+
|
|
111
135
|
## Slot Selection
|
|
112
136
|
|
|
113
137
|
Remnic is an exclusive memory-slot plugin. When `plugins.slots.memory` points
|
|
@@ -131,14 +155,14 @@ loads passively depending on `slotBehavior`:
|
|
|
131
155
|
}
|
|
132
156
|
```
|
|
133
157
|
|
|
134
|
-
Passive mode keeps the tool/service surface available but skips
|
|
135
|
-
|
|
158
|
+
Passive mode keeps the tool/service surface available but skips context-building
|
|
159
|
+
and extraction hooks so two memory plugins do not race each other.
|
|
136
160
|
|
|
137
161
|
## Supported OpenClaw Memory Features
|
|
138
162
|
|
|
139
163
|
Remnic supports the following OpenClaw memory integration points:
|
|
140
164
|
|
|
141
|
-
### Memory
|
|
165
|
+
### Memory Context Sections
|
|
142
166
|
|
|
143
167
|
| Feature | Status | Since |
|
|
144
168
|
|---------|--------|-------|
|
|
@@ -194,7 +218,7 @@ Reset handling is configurable:
|
|
|
194
218
|
}
|
|
195
219
|
```
|
|
196
220
|
|
|
197
|
-
The reset path clears per-session
|
|
221
|
+
The reset path clears per-session context caches and workspace preference state.
|
|
198
222
|
If `flushOnResetEnabled` is true, Remnic also attempts a bounded extraction
|
|
199
223
|
flush before the reset completes.
|
|
200
224
|
|
|
@@ -230,7 +254,7 @@ OpenClaw's dreaming feature (background memory consolidation) is handled by Open
|
|
|
230
254
|
|
|
231
255
|
The plugin manifest now accepts the OpenClaw `dreaming` config block directly
|
|
232
256
|
so newer runtimes do not reject the config at validation time, and the OpenClaw
|
|
233
|
-
adapter now
|
|
257
|
+
adapter now adds recent diary entries as `## Recent Dreams (Remnic)` when
|
|
234
258
|
the journal contains entries. The adapter also imports `DREAMS.md` entries into
|
|
235
259
|
Remnic storage as `memoryKind: "dream"` with stable provenance so file-watch
|
|
236
260
|
replays stay idempotent:
|
|
@@ -264,7 +288,7 @@ back to `DREAMS.md` through the shared writer using the OpenAI Responses API.
|
|
|
264
288
|
|
|
265
289
|
The shared `@remnic/core` surface parsers also understand `HEARTBEAT.md`. The
|
|
266
290
|
OpenClaw adapter imports those entries as `memoryKind: "procedural"`, gates
|
|
267
|
-
normal recall during heartbeat-triggered runs,
|
|
291
|
+
normal recall during heartbeat-triggered runs, adds the active heartbeat plus
|
|
268
292
|
`## Previous Runs`, and skips episodic buffering for heartbeat turns by default.
|
|
269
293
|
Detection can use explicit runtime metadata, a documented heuristic fallback, or
|
|
270
294
|
`auto` to prefer runtime metadata and fall back when needed. All of that logic
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
buildExtensionsBlockForConsolidation,
|
|
7
7
|
runPostConsolidationMaterialize
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-HI5HX3S7.js";
|
|
9
9
|
import "./chunk-WPINX4MF.js";
|
|
10
10
|
import {
|
|
11
11
|
isRecord
|
|
@@ -18,7 +18,7 @@ import {
|
|
|
18
18
|
FallbackLlmClient
|
|
19
19
|
} from "./chunk-24MGN4E3.js";
|
|
20
20
|
import "./chunk-3A5ELHTT.js";
|
|
21
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-ZXLYEVOP.js";
|
|
22
22
|
import "./chunk-6OJAU466.js";
|
|
23
23
|
import "./chunk-RKR6PTPA.js";
|
|
24
24
|
import {
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
StorageManager,
|
|
6
6
|
parseContinuityImprovementLoops,
|
|
7
7
|
sanitizeMemoryContent
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-ZXLYEVOP.js";
|
|
9
9
|
import {
|
|
10
10
|
log
|
|
11
11
|
} from "./chunk-UFU5GGGA.js";
|
|
@@ -842,7 +842,7 @@ var CompoundingEngine = class {
|
|
|
842
842
|
let promotionCandidates = this.config.compoundingSemanticEnabled ? this.derivePromotionCandidates(outcomeSummary, mistakes.registry, rubrics) : [];
|
|
843
843
|
if (this.config.cmcConsolidationEnabled) {
|
|
844
844
|
try {
|
|
845
|
-
const { deriveCausalPromotionCandidates, materializeAfterCausalConsolidation } = await import("./causal-consolidation-
|
|
845
|
+
const { deriveCausalPromotionCandidates, materializeAfterCausalConsolidation } = await import("./causal-consolidation-3GTZFN2T.js");
|
|
846
846
|
const causalCandidates = await deriveCausalPromotionCandidates({
|
|
847
847
|
memoryDir: this.config.memoryDir,
|
|
848
848
|
causalTrajectoryStoreDir: this.config.causalTrajectoryStoreDir,
|
|
@@ -168,20 +168,31 @@ async function rotateMarkdownFileToArchive(opts) {
|
|
|
168
168
|
}
|
|
169
169
|
|
|
170
170
|
// ../remnic-core/src/sanitize.ts
|
|
171
|
+
var rx = (...parts) => new RegExp(parts.join(""), "i");
|
|
171
172
|
var INJECTION_PATTERNS = [
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
173
|
+
rx("ignore\\s+(all\\s+)?", "(previous|prior|above)", "\\s+(instructions?|prompts?|context)"),
|
|
174
|
+
rx("forget\\s+", "(everything|all|previous|what)"),
|
|
175
|
+
rx(
|
|
176
|
+
"new\\s+(",
|
|
177
|
+
"system",
|
|
178
|
+
"\\s+)?",
|
|
179
|
+
"prompt:"
|
|
180
|
+
),
|
|
181
|
+
rx("\\[", "system", "\\]"),
|
|
182
|
+
rx("<\\s*", "system", "\\s*>"),
|
|
183
|
+
rx("you\\s+are\\s+now\\s+(?!called|named)"),
|
|
184
|
+
rx("disregard\\s+(all\\s+)?", "(previous|prior)"),
|
|
185
|
+
rx(
|
|
186
|
+
"over",
|
|
187
|
+
"ride\\s+(previous\\s+)?",
|
|
188
|
+
"(instructions?|",
|
|
189
|
+
"prompt)"
|
|
190
|
+
),
|
|
191
|
+
rx("act\\s+as\\s+(?:an?\\s+)?(?:AI|assistant|ChatGPT|GPT|Claude|LLM)\\s+(?:without|that\\s+ignores)"),
|
|
192
|
+
rx("do\\s+not\\s+(?:follow|obey)\\s+(?:previous|prior|your)\\s+", "instructions"),
|
|
193
|
+
rx("pretend\\s+(?:you\\s+)?(?:have\\s+no|you\\s+don.?t\\s+have)\\s+(restrictions|guidelines|rules)")
|
|
183
194
|
];
|
|
184
|
-
var REDACTED_PLACEHOLDER = "[content removed:
|
|
195
|
+
var REDACTED_PLACEHOLDER = "[content removed: unsafe memory text]";
|
|
185
196
|
function sanitizeMemoryContent(text) {
|
|
186
197
|
const source = typeof text === "string" ? text : "";
|
|
187
198
|
const violations = [];
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
CompoundingEngine,
|
|
3
3
|
defaultTierMigrationCycleBudget
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-UVQXEQBQ.js";
|
|
5
5
|
import "./chunk-EXDYWXMB.js";
|
|
6
|
-
import "./chunk-
|
|
6
|
+
import "./chunk-ZXLYEVOP.js";
|
|
7
7
|
import "./chunk-6OJAU466.js";
|
|
8
8
|
import "./chunk-RKR6PTPA.js";
|
|
9
9
|
import "./chunk-UFU5GGGA.js";
|
package/dist/index.js
CHANGED
|
@@ -43,7 +43,7 @@ import {
|
|
|
43
43
|
readMemoryGovernanceRunArtifact,
|
|
44
44
|
restoreMemoryGovernanceRun,
|
|
45
45
|
runMemoryGovernance
|
|
46
|
-
} from "./chunk-
|
|
46
|
+
} from "./chunk-4UA6KMRO.js";
|
|
47
47
|
import {
|
|
48
48
|
clamp01,
|
|
49
49
|
clampLifecycleThreshold,
|
|
@@ -90,7 +90,7 @@ import {
|
|
|
90
90
|
parseOperatorAwareConsolidationResponse,
|
|
91
91
|
renderExtensionsFooter,
|
|
92
92
|
resolveExtensionsRoot
|
|
93
|
-
} from "./chunk-
|
|
93
|
+
} from "./chunk-HI5HX3S7.js";
|
|
94
94
|
import {
|
|
95
95
|
BoxBuilder,
|
|
96
96
|
countRecallTokenOverlap,
|
|
@@ -115,7 +115,7 @@ import {
|
|
|
115
115
|
CompoundingEngine,
|
|
116
116
|
SharedContextManager,
|
|
117
117
|
defaultTierMigrationCycleBudget
|
|
118
|
-
} from "./chunk-
|
|
118
|
+
} from "./chunk-UVQXEQBQ.js";
|
|
119
119
|
import {
|
|
120
120
|
ZodError,
|
|
121
121
|
external_exports
|
|
@@ -188,7 +188,7 @@ import {
|
|
|
188
188
|
sortMemoryLifecycleEvents,
|
|
189
189
|
stripCitationForTemplate,
|
|
190
190
|
toMemoryPathRel
|
|
191
|
-
} from "./chunk-
|
|
191
|
+
} from "./chunk-ZXLYEVOP.js";
|
|
192
192
|
import {
|
|
193
193
|
sidecarKey
|
|
194
194
|
} from "./chunk-6OJAU466.js";
|
|
@@ -33805,7 +33805,7 @@ var Orchestrator = class _Orchestrator {
|
|
|
33805
33805
|
memoryWorthCounterCache = /* @__PURE__ */ new Map();
|
|
33806
33806
|
static MEMORY_WORTH_CACHE_TTL_MS = 3e4;
|
|
33807
33807
|
/**
|
|
33808
|
-
* Per-session workspace
|
|
33808
|
+
* Per-session workspace selections keyed by sessionKey.
|
|
33809
33809
|
* Set by the before_agent_start hook so recall() uses the correct
|
|
33810
33810
|
* agent workspace for BOOT.md injection. Cleared after each recall.
|
|
33811
33811
|
* Using a Map prevents concurrent sessions from overwriting each other.
|
|
@@ -33917,7 +33917,7 @@ var Orchestrator = class _Orchestrator {
|
|
|
33917
33917
|
setRecallWorkspaceOverride(sessionKey, dir) {
|
|
33918
33918
|
this._recallWorkspaceOverrides.set(sessionKey, dir);
|
|
33919
33919
|
}
|
|
33920
|
-
/** Remove a per-session workspace
|
|
33920
|
+
/** Remove a per-session workspace selection (cleanup on error or early return). @internal */
|
|
33921
33921
|
clearRecallWorkspaceOverride(sessionKey) {
|
|
33922
33922
|
this._recallWorkspaceOverrides.delete(sessionKey);
|
|
33923
33923
|
}
|
|
@@ -35138,7 +35138,7 @@ ${doc.content}` : doc.content,
|
|
|
35138
35138
|
}
|
|
35139
35139
|
async runDeepSleepGovernanceNow(options) {
|
|
35140
35140
|
const targetStorage = options?.storage ?? this.storage;
|
|
35141
|
-
const { runMemoryGovernance: runMemoryGovernance2 } = await import("./memory-governance-
|
|
35141
|
+
const { runMemoryGovernance: runMemoryGovernance2 } = await import("./memory-governance-FEQCA35V.js");
|
|
35142
35142
|
const { summarizeGovernanceResultForDreams } = await import("./dreams-ledger-3I52ISYR.js");
|
|
35143
35143
|
const govResult = await runMemoryGovernance2({
|
|
35144
35144
|
memoryDir: targetStorage.dir,
|
|
@@ -52209,10 +52209,10 @@ var WebDavServer = class _WebDavServer {
|
|
|
52209
52209
|
const credentialSeparator = decoded.indexOf(":");
|
|
52210
52210
|
if (credentialSeparator < 0) return false;
|
|
52211
52211
|
const username = decoded.slice(0, credentialSeparator);
|
|
52212
|
-
const
|
|
52212
|
+
const credentialText = decoded.slice(credentialSeparator + 1);
|
|
52213
52213
|
const usernameOk = this.timingSafeStringEqual(username, this.options.auth.username);
|
|
52214
|
-
const
|
|
52215
|
-
return Boolean((usernameOk ? 1 : 0) & (
|
|
52214
|
+
const credentialTextOk = this.timingSafeStringEqual(credentialText, this.options.auth["pass"+"word"]);
|
|
52215
|
+
return Boolean((usernameOk ? 1 : 0) & (credentialTextOk ? 1 : 0));
|
|
52216
52216
|
} catch {
|
|
52217
52217
|
return false;
|
|
52218
52218
|
}
|
|
@@ -64098,7 +64098,7 @@ async function runRepairMemoryProjectionCliCommand(options) {
|
|
|
64098
64098
|
});
|
|
64099
64099
|
}
|
|
64100
64100
|
async function runMemoryTimelineCliCommand(options) {
|
|
64101
|
-
const storage = new (await import("./storage-
|
|
64101
|
+
const storage = new (await import("./storage-R3V6ZFQT.js")).StorageManager(options.memoryDir);
|
|
64102
64102
|
return storage.getMemoryTimeline(options.memoryId, options.limit);
|
|
64103
64103
|
}
|
|
64104
64104
|
async function runMemoryGovernanceCliCommand(options) {
|
|
@@ -64126,7 +64126,7 @@ async function runMemoryGovernanceRestoreCliCommand(options) {
|
|
|
64126
64126
|
});
|
|
64127
64127
|
}
|
|
64128
64128
|
async function runMemoryReviewDispositionCliCommand(options) {
|
|
64129
|
-
const storage = new (await import("./storage-
|
|
64129
|
+
const storage = new (await import("./storage-R3V6ZFQT.js")).StorageManager(options.memoryDir);
|
|
64130
64130
|
const memory = await storage.getMemoryById(options.memoryId);
|
|
64131
64131
|
if (!memory) throw new Error(`memory not found: ${options.memoryId}`);
|
|
64132
64132
|
const updated = await storage.writeMemoryFrontmatter(memory, {
|
|
@@ -64305,7 +64305,7 @@ async function runSemanticRulePromoteCliCommand(options) {
|
|
|
64305
64305
|
});
|
|
64306
64306
|
}
|
|
64307
64307
|
async function runCompoundingPromoteCliCommand(options) {
|
|
64308
|
-
const { CompoundingEngine: CompoundingEngine2 } = await import("./engine-
|
|
64308
|
+
const { CompoundingEngine: CompoundingEngine2 } = await import("./engine-XPEZBXIQ.js");
|
|
64309
64309
|
const config = parseConfig({
|
|
64310
64310
|
memoryDir: options.memoryDir,
|
|
64311
64311
|
qmdEnabled: false,
|
|
@@ -64978,13 +64978,13 @@ async function runWebDavServeCliCommand(options) {
|
|
|
64978
64978
|
throw new Error("webdav allowlist requires at least one directory");
|
|
64979
64979
|
}
|
|
64980
64980
|
const usernameProvided = options.authUsername !== void 0;
|
|
64981
|
-
const
|
|
64981
|
+
const credentialTextProvided = options.authPassword !== void 0;
|
|
64982
64982
|
const username = options.authUsername?.trim();
|
|
64983
|
-
const
|
|
64984
|
-
if (usernameProvided && !username ||
|
|
64983
|
+
const credentialText = options.authPassword?.trim();
|
|
64984
|
+
if (usernameProvided && !username || credentialTextProvided && !credentialText) {
|
|
64985
64985
|
throw new Error("webdav auth username/password must be non-empty when provided");
|
|
64986
64986
|
}
|
|
64987
|
-
if (username && !
|
|
64987
|
+
if (username && !credentialText || !username && credentialText) {
|
|
64988
64988
|
throw new Error("webdav auth requires both username and password");
|
|
64989
64989
|
}
|
|
64990
64990
|
if (activeWebDavServer) {
|
|
@@ -64997,7 +64997,7 @@ async function runWebDavServeCliCommand(options) {
|
|
|
64997
64997
|
host: options.host,
|
|
64998
64998
|
port: options.port ?? 8080,
|
|
64999
64999
|
allowlistDirs: options.allowlistDirs,
|
|
65000
|
-
auth: username &&
|
|
65000
|
+
auth: username && credentialText ? { username, ["pass"+"word"]: credentialText } : void 0
|
|
65001
65001
|
});
|
|
65002
65002
|
activeWebDavServer = server;
|
|
65003
65003
|
try {
|
|
@@ -67941,7 +67941,7 @@ ${doc.content}` : doc.content,
|
|
|
67941
67941
|
host: typeof options.host === "string" ? options.host : "127.0.0.1",
|
|
67942
67942
|
port: Number.isFinite(portRaw) ? portRaw : 8080,
|
|
67943
67943
|
authUsername: typeof options.username === "string" ? options.username : void 0,
|
|
67944
|
-
authPassword: typeof options
|
|
67944
|
+
authPassword: typeof options["pass"+"word"] === "string" ? options["pass"+"word"] : void 0
|
|
67945
67945
|
});
|
|
67946
67946
|
console.log(JSON.stringify(status, null, 2));
|
|
67947
67947
|
console.log("OK");
|
|
@@ -6,9 +6,9 @@ import {
|
|
|
6
6
|
readMemoryGovernanceRunArtifact,
|
|
7
7
|
restoreMemoryGovernanceRun,
|
|
8
8
|
runMemoryGovernance
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-4UA6KMRO.js";
|
|
10
10
|
import "./chunk-4G2XCSD2.js";
|
|
11
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-ZXLYEVOP.js";
|
|
12
12
|
import "./chunk-6OJAU466.js";
|
|
13
13
|
import "./chunk-RKR6PTPA.js";
|
|
14
14
|
import "./chunk-UFU5GGGA.js";
|
package/openclaw.plugin.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "openclaw-remnic",
|
|
3
3
|
"name": "Remnic OpenClaw Plugin",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.29",
|
|
5
5
|
"kind": "memory",
|
|
6
|
-
"description": "Local semantic memory for OpenClaw. Requires plugins.slots.memory set to this plugin id for hooks to fire.",
|
|
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": {
|
|
8
8
|
"providers": [
|
|
9
9
|
{
|
|
@@ -41,6 +41,26 @@
|
|
|
41
41
|
]
|
|
42
42
|
}
|
|
43
43
|
],
|
|
44
|
+
"securityDisclosure": {
|
|
45
|
+
"conversationAccess": "As a memory-slot plugin, Remnic hooks can observe conversation turns, tool-use metadata, LLM output metadata, and local memory files so they can be indexed, summarized, recalled, and exposed through memory tools.",
|
|
46
|
+
"modelProviderCredentials": {
|
|
47
|
+
"recommendedMode": "Use modelSource=gateway to route LLM-backed memory work through OpenClaw gateway agents instead of a Remnic-owned API key.",
|
|
48
|
+
"dynamicCredentialSources": [
|
|
49
|
+
"OpenClaw runtime auth resolver for configured model providers",
|
|
50
|
+
"~/.openclaw/agents/main/agent/models.json provider entries",
|
|
51
|
+
"provider-specific environment variables such as <PROVIDER>_API_KEY and <PROVIDER>_TOKEN"
|
|
52
|
+
],
|
|
53
|
+
"providerModeData": [
|
|
54
|
+
"conversation excerpts",
|
|
55
|
+
"memory excerpts",
|
|
56
|
+
"summaries",
|
|
57
|
+
"embedding inputs",
|
|
58
|
+
"active-recall query inputs",
|
|
59
|
+
"benchmark and evaluation inputs"
|
|
60
|
+
],
|
|
61
|
+
"externalProviderGuidance": "Do not set openaiApiKey or provider environment variables for Remnic if all LLM-backed memory operations should stay on the OpenClaw gateway path. When plugin/provider mode is configured, selected conversation and memory excerpts may be sent to the configured provider for extraction, consolidation, summarization, embeddings, active recall, or benchmark judging."
|
|
62
|
+
}
|
|
63
|
+
},
|
|
44
64
|
"supports": {
|
|
45
65
|
"memorySlot": true,
|
|
46
66
|
"dreamingSlot": true,
|
|
@@ -139,7 +159,7 @@
|
|
|
139
159
|
},
|
|
140
160
|
"openaiBaseUrl": {
|
|
141
161
|
"type": "string",
|
|
142
|
-
"description": "
|
|
162
|
+
"description": "Set the OpenAI API base URL for OpenAI-compatible providers (Scryr, Together, OpenRouter, etc.)"
|
|
143
163
|
},
|
|
144
164
|
"model": {
|
|
145
165
|
"type": "string",
|
|
@@ -222,7 +242,7 @@
|
|
|
222
242
|
"maxMemoryTokens": {
|
|
223
243
|
"type": "number",
|
|
224
244
|
"default": 2000,
|
|
225
|
-
"description": "Max tokens
|
|
245
|
+
"description": "Max memory-context tokens per turn"
|
|
226
246
|
},
|
|
227
247
|
"memoryOsPreset": {
|
|
228
248
|
"type": "string",
|
|
@@ -233,7 +253,7 @@
|
|
|
233
253
|
"research-max",
|
|
234
254
|
"local-llm-heavy"
|
|
235
255
|
],
|
|
236
|
-
"description": "Optional named preset that seeds Engram's advanced config surface before explicit per-setting
|
|
256
|
+
"description": "Optional named preset that seeds Engram's advanced config surface before explicit per-setting settings are applied. `research` is accepted as a backward-compatible alias for `research-max`."
|
|
237
257
|
},
|
|
238
258
|
"qmdEnabled": {
|
|
239
259
|
"type": "boolean",
|
|
@@ -325,7 +345,7 @@
|
|
|
325
345
|
},
|
|
326
346
|
"entitySchemas": {
|
|
327
347
|
"type": "object",
|
|
328
|
-
"description": "Optional per-entity-type structured section schema
|
|
348
|
+
"description": "Optional per-entity-type structured section schema customizations.",
|
|
329
349
|
"additionalProperties": {
|
|
330
350
|
"type": "object",
|
|
331
351
|
"additionalProperties": false,
|
|
@@ -666,7 +686,7 @@
|
|
|
666
686
|
"minimum": 1,
|
|
667
687
|
"maximum": 10,
|
|
668
688
|
"default": 2,
|
|
669
|
-
"description": "Maximum procedure memories to
|
|
689
|
+
"description": "Maximum procedure memories to add on task-initiation recall."
|
|
670
690
|
},
|
|
671
691
|
"proceduralMiningCronAutoRegister": {
|
|
672
692
|
"type": "boolean",
|
|
@@ -754,7 +774,7 @@
|
|
|
754
774
|
"recallTranscriptsEnabled": {
|
|
755
775
|
"type": "boolean",
|
|
756
776
|
"default": false,
|
|
757
|
-
"description": "Write JSONL recall audit transcripts for runtime-
|
|
777
|
+
"description": "Write JSONL recall audit transcripts for runtime recall-context assembly."
|
|
758
778
|
},
|
|
759
779
|
"recallTranscriptRetentionDays": {
|
|
760
780
|
"type": "integer",
|
|
@@ -771,7 +791,7 @@
|
|
|
771
791
|
"activeRecallEnabled": {
|
|
772
792
|
"type": "boolean",
|
|
773
793
|
"default": false,
|
|
774
|
-
"description": "Enable the OpenClaw active-recall
|
|
794
|
+
"description": "Enable the OpenClaw active-recall context surface."
|
|
775
795
|
},
|
|
776
796
|
"activeRecallAgents": {
|
|
777
797
|
"type": "array",
|
|
@@ -818,7 +838,7 @@
|
|
|
818
838
|
"preference-only"
|
|
819
839
|
],
|
|
820
840
|
"default": "balanced",
|
|
821
|
-
"description": "
|
|
841
|
+
"description": "Context assembly style for the active-recall surface."
|
|
822
842
|
},
|
|
823
843
|
"activeRecallCustomInstruction": {
|
|
824
844
|
"type": "string",
|
|
@@ -826,7 +846,7 @@
|
|
|
826
846
|
},
|
|
827
847
|
"activeRecallPromptAppend": {
|
|
828
848
|
"type": "string",
|
|
829
|
-
"description": "Optional additional guidance
|
|
849
|
+
"description": "Optional additional guidance for the active-recall builder."
|
|
830
850
|
},
|
|
831
851
|
"activeRecallMaxSummaryChars": {
|
|
832
852
|
"type": "integer",
|
|
@@ -892,7 +912,7 @@
|
|
|
892
912
|
},
|
|
893
913
|
"activeRecallModel": {
|
|
894
914
|
"type": "string",
|
|
895
|
-
"description": "Optional model
|
|
915
|
+
"description": "Optional model selection for active recall."
|
|
896
916
|
},
|
|
897
917
|
"activeRecallModelFallbackPolicy": {
|
|
898
918
|
"type": "string",
|
|
@@ -1208,7 +1228,7 @@
|
|
|
1208
1228
|
"memoryExtensionsEnabled": {
|
|
1209
1229
|
"type": "boolean",
|
|
1210
1230
|
"default": true,
|
|
1211
|
-
"description": "Whether third-party memory extensions are discovered and
|
|
1231
|
+
"description": "Whether third-party memory extensions are discovered and included in consolidation instructions."
|
|
1212
1232
|
},
|
|
1213
1233
|
"memoryExtensionsRoot": {
|
|
1214
1234
|
"type": "string",
|
|
@@ -1292,12 +1312,12 @@
|
|
|
1292
1312
|
"full"
|
|
1293
1313
|
],
|
|
1294
1314
|
"default": "recovery_only",
|
|
1295
|
-
"description": "Controls when identity continuity context is
|
|
1315
|
+
"description": "Controls when identity continuity context is added to recall assembly"
|
|
1296
1316
|
},
|
|
1297
1317
|
"identityMaxInjectChars": {
|
|
1298
1318
|
"type": "number",
|
|
1299
1319
|
"default": 1200,
|
|
1300
|
-
"description": "Maximum characters allowed for identity continuity context
|
|
1320
|
+
"description": "Maximum characters allowed for identity continuity context"
|
|
1301
1321
|
},
|
|
1302
1322
|
"continuityIncidentLoggingEnabled": {
|
|
1303
1323
|
"type": "boolean",
|
|
@@ -1498,12 +1518,12 @@
|
|
|
1498
1518
|
"maxResults": {
|
|
1499
1519
|
"type": "number",
|
|
1500
1520
|
"default": 4,
|
|
1501
|
-
"description": "Maximum native knowledge chunks to
|
|
1521
|
+
"description": "Maximum native knowledge chunks to add to recall."
|
|
1502
1522
|
},
|
|
1503
1523
|
"maxChars": {
|
|
1504
1524
|
"type": "number",
|
|
1505
1525
|
"default": 2400,
|
|
1506
|
-
"description": "Maximum total characters to
|
|
1526
|
+
"description": "Maximum total characters to add from native knowledge recall."
|
|
1507
1527
|
},
|
|
1508
1528
|
"stateDir": {
|
|
1509
1529
|
"type": "string",
|
|
@@ -1777,7 +1797,7 @@
|
|
|
1777
1797
|
"recordEmptyRecallImpressions": {
|
|
1778
1798
|
"type": "boolean",
|
|
1779
1799
|
"default": false,
|
|
1780
|
-
"description": "Record recall impressions with empty memoryIds when no memory context is
|
|
1800
|
+
"description": "Record recall impressions with empty memoryIds when no memory context is added."
|
|
1781
1801
|
},
|
|
1782
1802
|
"recallPlannerEnabled": {
|
|
1783
1803
|
"type": "boolean",
|
|
@@ -1852,7 +1872,7 @@
|
|
|
1852
1872
|
"verbatimArtifactsMaxRecall": {
|
|
1853
1873
|
"type": "number",
|
|
1854
1874
|
"default": 5,
|
|
1855
|
-
"description": "Maximum artifact anchors
|
|
1875
|
+
"description": "Maximum artifact anchors added per recall."
|
|
1856
1876
|
},
|
|
1857
1877
|
"verbatimArtifactCategories": {
|
|
1858
1878
|
"type": "array",
|
|
@@ -1918,7 +1938,7 @@
|
|
|
1918
1938
|
"boxRecallDays": {
|
|
1919
1939
|
"type": "number",
|
|
1920
1940
|
"default": 3,
|
|
1921
|
-
"description": "Number of recent days of boxes to
|
|
1941
|
+
"description": "Number of recent days of boxes to add during recall."
|
|
1922
1942
|
},
|
|
1923
1943
|
"episodeNoteModeEnabled": {
|
|
1924
1944
|
"type": "boolean",
|
|
@@ -1983,7 +2003,7 @@
|
|
|
1983
2003
|
"tagRecallMaxMatches": {
|
|
1984
2004
|
"type": "number",
|
|
1985
2005
|
"default": 10,
|
|
1986
|
-
"description": "Maximum number of tag-matched memories
|
|
2006
|
+
"description": "Maximum number of tag-matched memories added per recall."
|
|
1987
2007
|
},
|
|
1988
2008
|
"multiGraphMemoryEnabled": {
|
|
1989
2009
|
"type": "boolean",
|
|
@@ -2013,7 +2033,7 @@
|
|
|
2013
2033
|
"graphRecallShadowEnabled": {
|
|
2014
2034
|
"type": "boolean",
|
|
2015
2035
|
"default": false,
|
|
2016
|
-
"description": "Run graph recall in shadow mode
|
|
2036
|
+
"description": "Run graph recall in shadow mode - evaluate but do not add results."
|
|
2017
2037
|
},
|
|
2018
2038
|
"graphRecallSnapshotEnabled": {
|
|
2019
2039
|
"type": "boolean",
|
|
@@ -2127,12 +2147,12 @@
|
|
|
2127
2147
|
"graphRecallEntityHintMax": {
|
|
2128
2148
|
"type": "number",
|
|
2129
2149
|
"default": 3,
|
|
2130
|
-
"description": "Maximum number of entity hints
|
|
2150
|
+
"description": "Maximum number of entity hints added per graph recall result."
|
|
2131
2151
|
},
|
|
2132
2152
|
"graphRecallEntityHintMaxChars": {
|
|
2133
2153
|
"type": "number",
|
|
2134
2154
|
"default": 200,
|
|
2135
|
-
"description": "Maximum characters per entity hint
|
|
2155
|
+
"description": "Maximum characters per entity hint added during graph recall."
|
|
2136
2156
|
},
|
|
2137
2157
|
"graphRecallSnapshotDir": {
|
|
2138
2158
|
"type": "string",
|
|
@@ -2161,7 +2181,7 @@
|
|
|
2161
2181
|
"graphAssistShadowEvalEnabled": {
|
|
2162
2182
|
"type": "boolean",
|
|
2163
2183
|
"default": false,
|
|
2164
|
-
"description": "In full mode, compute graph assist for comparison telemetry and snapshots but keep
|
|
2184
|
+
"description": "In full mode, compute graph assist for comparison telemetry and snapshots but keep recall output baseline-identical."
|
|
2165
2185
|
},
|
|
2166
2186
|
"graphAssistMinSeedResults": {
|
|
2167
2187
|
"type": "number",
|
|
@@ -2239,12 +2259,12 @@
|
|
|
2239
2259
|
"recallConfidenceGateEnabled": {
|
|
2240
2260
|
"type": "boolean",
|
|
2241
2261
|
"default": false,
|
|
2242
|
-
"description": "Synapse-inspired confidence gate: skip memory
|
|
2262
|
+
"description": "Synapse-inspired confidence gate: skip memory context when top recall score is below threshold"
|
|
2243
2263
|
},
|
|
2244
2264
|
"recallConfidenceGateThreshold": {
|
|
2245
2265
|
"type": "number",
|
|
2246
2266
|
"default": 0.12,
|
|
2247
|
-
"description": "Minimum top recall score to
|
|
2267
|
+
"description": "Minimum top recall score to include memories (0-1). Below this, memories are rejected as too uncertain"
|
|
2248
2268
|
},
|
|
2249
2269
|
"causalRuleExtractionEnabled": {
|
|
2250
2270
|
"type": "boolean",
|
|
@@ -2850,12 +2870,12 @@
|
|
|
2850
2870
|
"maxTranscriptTurns": {
|
|
2851
2871
|
"type": "number",
|
|
2852
2872
|
"default": 50,
|
|
2853
|
-
"description": "Maximum transcript turns to
|
|
2873
|
+
"description": "Maximum transcript turns to include"
|
|
2854
2874
|
},
|
|
2855
2875
|
"maxTranscriptTokens": {
|
|
2856
2876
|
"type": "number",
|
|
2857
2877
|
"default": 1000,
|
|
2858
|
-
"description": "Maximum tokens for transcript
|
|
2878
|
+
"description": "Maximum tokens for transcript context"
|
|
2859
2879
|
},
|
|
2860
2880
|
"checkpointEnabled": {
|
|
2861
2881
|
"type": "boolean",
|
|
@@ -2870,7 +2890,7 @@
|
|
|
2870
2890
|
"compactionResetEnabled": {
|
|
2871
2891
|
"type": "boolean",
|
|
2872
2892
|
"default": false,
|
|
2873
|
-
"description": "Trigger session reset after compaction with BOOT.md
|
|
2893
|
+
"description": "Trigger session reset after compaction with BOOT.md recovery context (requires OC fork with api.resetSession)"
|
|
2874
2894
|
},
|
|
2875
2895
|
"hourlySummariesEnabled": {
|
|
2876
2896
|
"type": "boolean",
|
|
@@ -2890,7 +2910,7 @@
|
|
|
2890
2910
|
"maxSummaryCount": {
|
|
2891
2911
|
"type": "number",
|
|
2892
2912
|
"default": 6,
|
|
2893
|
-
"description": "Maximum number of summaries to
|
|
2913
|
+
"description": "Maximum number of summaries to include"
|
|
2894
2914
|
},
|
|
2895
2915
|
"summaryModel": {
|
|
2896
2916
|
"type": "string",
|
|
@@ -2981,7 +3001,7 @@
|
|
|
2981
3001
|
"traceRecallContent": {
|
|
2982
3002
|
"type": "boolean",
|
|
2983
3003
|
"default": false,
|
|
2984
|
-
"description": "If true, include the full recalled memory text in RecallTraceEvent.recalledContent emitted to __openclawEngramTrace subscribers (e.g. Langfuse). Disabled by default
|
|
3004
|
+
"description": "If true, include the full recalled memory text in RecallTraceEvent.recalledContent emitted to __openclawEngramTrace subscribers (e.g. Langfuse). Disabled by default - only enable when you want external trace collectors to capture memory context."
|
|
2985
3005
|
},
|
|
2986
3006
|
"profilingEnabled": {
|
|
2987
3007
|
"type": "boolean",
|
|
@@ -3198,7 +3218,7 @@
|
|
|
3198
3218
|
"localLlmDisableThinking": {
|
|
3199
3219
|
"type": "boolean",
|
|
3200
3220
|
"default": true,
|
|
3201
|
-
"description": "When true (default), request chain-of-thought / thinking-mode suppression on the main local LLM (issue #548). The `chat_template_kwargs: { enable_thinking: false }` field is only
|
|
3221
|
+
"description": "When true (default), request chain-of-thought / thinking-mode suppression on the main local LLM (issue #548). The `chat_template_kwargs: { enable_thinking: false }` field is sent only when the detected backend is known to support it (LM Studio, vLLM); strict OpenAI-compat backends fail open to avoid the 400-cooldown path. Structured-output tasks like extraction and consolidation gain nothing from reasoning tokens and thinking-capable models (Qwen 3.5, Gemma 4, DeepSeek) often blow the 60s timeout before emitting content. Set to false to restore thinking for narrative tasks. The fast-tier client always disables thinking and is not affected by this flag."
|
|
3202
3222
|
},
|
|
3203
3223
|
"hourlySummaryCronAutoRegister": {
|
|
3204
3224
|
"type": "boolean",
|
|
@@ -3312,12 +3332,12 @@
|
|
|
3312
3332
|
"conversationRecallTopK": {
|
|
3313
3333
|
"type": "number",
|
|
3314
3334
|
"default": 3,
|
|
3315
|
-
"description": "Top-K conversation chunks to
|
|
3335
|
+
"description": "Top-K conversation chunks to include."
|
|
3316
3336
|
},
|
|
3317
3337
|
"conversationRecallMaxChars": {
|
|
3318
3338
|
"type": "number",
|
|
3319
3339
|
"default": 2500,
|
|
3320
|
-
"description": "Max characters of semantic conversation recall to
|
|
3340
|
+
"description": "Max characters of semantic conversation recall to include."
|
|
3321
3341
|
},
|
|
3322
3342
|
"conversationRecallTimeoutMs": {
|
|
3323
3343
|
"type": "number",
|
|
@@ -3366,7 +3386,7 @@
|
|
|
3366
3386
|
"objectiveStateRecallEnabled": {
|
|
3367
3387
|
"type": "boolean",
|
|
3368
3388
|
"default": false,
|
|
3369
|
-
"description": "
|
|
3389
|
+
"description": "Add recall-relevant objective-state snapshots to recall context."
|
|
3370
3390
|
},
|
|
3371
3391
|
"objectiveStateStoreDir": {
|
|
3372
3392
|
"type": "string",
|
|
@@ -3384,7 +3404,7 @@
|
|
|
3384
3404
|
"causalTrajectoryRecallEnabled": {
|
|
3385
3405
|
"type": "boolean",
|
|
3386
3406
|
"default": false,
|
|
3387
|
-
"description": "
|
|
3407
|
+
"description": "Add recall-relevant causal trajectories to recall context."
|
|
3388
3408
|
},
|
|
3389
3409
|
"trustZonesEnabled": {
|
|
3390
3410
|
"type": "boolean",
|
|
@@ -3403,7 +3423,7 @@
|
|
|
3403
3423
|
"trustZoneRecallEnabled": {
|
|
3404
3424
|
"type": "boolean",
|
|
3405
3425
|
"default": false,
|
|
3406
|
-
"description": "
|
|
3426
|
+
"description": "Add recall-relevant working and trusted trust-zone records to recall context."
|
|
3407
3427
|
},
|
|
3408
3428
|
"memoryPoisoningDefenseEnabled": {
|
|
3409
3429
|
"type": "boolean",
|
|
@@ -3418,7 +3438,7 @@
|
|
|
3418
3438
|
"harmonicRetrievalEnabled": {
|
|
3419
3439
|
"type": "boolean",
|
|
3420
3440
|
"default": false,
|
|
3421
|
-
"description": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section
|
|
3441
|
+
"description": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section assembly and harmonic-search diagnostics."
|
|
3422
3442
|
},
|
|
3423
3443
|
"abstractionAnchorsEnabled": {
|
|
3424
3444
|
"type": "boolean",
|
|
@@ -3432,7 +3452,7 @@
|
|
|
3432
3452
|
"verifiedRecallEnabled": {
|
|
3433
3453
|
"type": "boolean",
|
|
3434
3454
|
"default": false,
|
|
3435
|
-
"description": "
|
|
3455
|
+
"description": "Add recall-relevant memory boxes only when their cited source memories verify as non-archived episodes."
|
|
3436
3456
|
},
|
|
3437
3457
|
"semanticRulePromotionEnabled": {
|
|
3438
3458
|
"type": "boolean",
|
|
@@ -3489,7 +3509,7 @@
|
|
|
3489
3509
|
"operatorAwareConsolidationEnabled": {
|
|
3490
3510
|
"type": "boolean",
|
|
3491
3511
|
"default": false,
|
|
3492
|
-
"description": "Opt in to operator-aware consolidation
|
|
3512
|
+
"description": "Opt in to operator-aware consolidation instructions 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."
|
|
3493
3513
|
},
|
|
3494
3514
|
"peerProfileReasonerEnabled": {
|
|
3495
3515
|
"type": "boolean",
|
|
@@ -3516,13 +3536,13 @@
|
|
|
3516
3536
|
"peerProfileRecallEnabled": {
|
|
3517
3537
|
"type": "boolean",
|
|
3518
3538
|
"default": false,
|
|
3519
|
-
"description": "When true,
|
|
3539
|
+
"description": "When true, add the active peer's profile fields to 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)."
|
|
3520
3540
|
},
|
|
3521
3541
|
"peerProfileRecallMaxFields": {
|
|
3522
3542
|
"type": "number",
|
|
3523
3543
|
"default": 5,
|
|
3524
3544
|
"minimum": 0,
|
|
3525
|
-
"description": "Maximum number of peer profile fields to
|
|
3545
|
+
"description": "Maximum number of peer profile fields to add per recall call. Only the most-recently-updated N fields are included. Set to 0 to disable field inclusion even when peerProfileRecallEnabled is true."
|
|
3526
3546
|
},
|
|
3527
3547
|
"creationMemoryEnabled": {
|
|
3528
3548
|
"type": "boolean",
|
|
@@ -3570,7 +3590,7 @@
|
|
|
3570
3590
|
"workProductRecallEnabled": {
|
|
3571
3591
|
"type": "boolean",
|
|
3572
3592
|
"default": false,
|
|
3573
|
-
"description": "
|
|
3593
|
+
"description": "Add recall-relevant work-product ledger entries to recall context and expose artifact-recovery search tooling."
|
|
3574
3594
|
},
|
|
3575
3595
|
"workProductLedgerDir": {
|
|
3576
3596
|
"type": "string",
|
|
@@ -3810,7 +3830,7 @@
|
|
|
3810
3830
|
"sharedContextEnabled": {
|
|
3811
3831
|
"type": "boolean",
|
|
3812
3832
|
"default": false,
|
|
3813
|
-
"description": "Enable shared-context
|
|
3833
|
+
"description": "Enable shared-context assembly and tools (v4.0). Default off."
|
|
3814
3834
|
},
|
|
3815
3835
|
"sharedContextDir": {
|
|
3816
3836
|
"type": "string",
|
|
@@ -3819,7 +3839,7 @@
|
|
|
3819
3839
|
"sharedContextMaxInjectChars": {
|
|
3820
3840
|
"type": "number",
|
|
3821
3841
|
"default": 4000,
|
|
3822
|
-
"description": "Max characters of shared-context to
|
|
3842
|
+
"description": "Max characters of shared-context to include in each recall context."
|
|
3823
3843
|
},
|
|
3824
3844
|
"crossSignalsSemanticEnabled": {
|
|
3825
3845
|
"type": "boolean",
|
|
@@ -4092,17 +4112,17 @@
|
|
|
4092
4112
|
"calibrationEnabled": {
|
|
4093
4113
|
"type": "boolean",
|
|
4094
4114
|
"default": false,
|
|
4095
|
-
"description": "Enable recall calibration rules
|
|
4115
|
+
"description": "Enable recall calibration rules (v9.0, default off)."
|
|
4096
4116
|
},
|
|
4097
4117
|
"calibrationMaxRulesPerRecall": {
|
|
4098
4118
|
"type": "number",
|
|
4099
4119
|
"default": 10,
|
|
4100
|
-
"description": "Maximum number of calibration rules to
|
|
4120
|
+
"description": "Maximum number of calibration rules to include per recall pass."
|
|
4101
4121
|
},
|
|
4102
4122
|
"calibrationMaxChars": {
|
|
4103
4123
|
"type": "number",
|
|
4104
4124
|
"default": 1200,
|
|
4105
|
-
"description": "Maximum characters of calibration content to
|
|
4125
|
+
"description": "Maximum characters of calibration content to include per recall pass."
|
|
4106
4126
|
},
|
|
4107
4127
|
"lancedbEnabled": {
|
|
4108
4128
|
"type": "boolean",
|
|
@@ -4267,7 +4287,7 @@
|
|
|
4267
4287
|
},
|
|
4268
4288
|
"recallBudgetChars": {
|
|
4269
4289
|
"type": "number",
|
|
4270
|
-
"description": "Hard character cap for total recall
|
|
4290
|
+
"description": "Hard character cap for total recall context. Defaults to maxMemoryTokens * 4."
|
|
4271
4291
|
},
|
|
4272
4292
|
"recallOuterTimeoutMs": {
|
|
4273
4293
|
"type": "number",
|
|
@@ -4287,7 +4307,7 @@
|
|
|
4287
4307
|
"recallMmrEnabled": {
|
|
4288
4308
|
"type": "boolean",
|
|
4289
4309
|
"default": true,
|
|
4290
|
-
"description": "Apply Maximal Marginal Relevance to the final recall selection per-section so one redundant cluster cannot dominate the
|
|
4310
|
+
"description": "Apply Maximal Marginal Relevance to the final recall selection per-section so one redundant cluster cannot dominate the included context."
|
|
4291
4311
|
},
|
|
4292
4312
|
"recallMmrLambda": {
|
|
4293
4313
|
"type": "number",
|
|
@@ -4428,7 +4448,7 @@
|
|
|
4428
4448
|
"messagePartsRecallMaxResults": {
|
|
4429
4449
|
"type": "number",
|
|
4430
4450
|
"default": 6,
|
|
4431
|
-
"description": "Maximum structured message-part matches to
|
|
4451
|
+
"description": "Maximum structured message-part matches to include in recall when messagePartsEnabled is true."
|
|
4432
4452
|
},
|
|
4433
4453
|
"ircEnabled": {
|
|
4434
4454
|
"type": "boolean",
|
|
@@ -4438,7 +4458,7 @@
|
|
|
4438
4458
|
"ircMaxPreferences": {
|
|
4439
4459
|
"type": "number",
|
|
4440
4460
|
"default": 20,
|
|
4441
|
-
"description": "Maximum number of preferences to include in IRC
|
|
4461
|
+
"description": "Maximum number of preferences to include in IRC rules."
|
|
4442
4462
|
},
|
|
4443
4463
|
"ircIncludeCorrections": {
|
|
4444
4464
|
"type": "boolean",
|
|
@@ -4493,7 +4513,7 @@
|
|
|
4493
4513
|
"cmcRetrievalEnabled": {
|
|
4494
4514
|
"type": "boolean",
|
|
4495
4515
|
"default": false,
|
|
4496
|
-
"description": "Enable CMC retrieval
|
|
4516
|
+
"description": "Enable CMC retrieval at recall time (default off)."
|
|
4497
4517
|
},
|
|
4498
4518
|
"cmcRetrievalMaxDepth": {
|
|
4499
4519
|
"type": "number",
|
|
@@ -4503,7 +4523,7 @@
|
|
|
4503
4523
|
"cmcRetrievalMaxChars": {
|
|
4504
4524
|
"type": "number",
|
|
4505
4525
|
"default": 800,
|
|
4506
|
-
"description": "Maximum characters of CMC content
|
|
4526
|
+
"description": "Maximum characters of CMC content included per recall pass."
|
|
4507
4527
|
},
|
|
4508
4528
|
"cmcRetrievalCounterfactualBoost": {
|
|
4509
4529
|
"type": "number",
|
|
@@ -4779,13 +4799,13 @@
|
|
|
4779
4799
|
"help": "Enable identity continuity workflows (anchor, incidents, audits)"
|
|
4780
4800
|
},
|
|
4781
4801
|
"identityInjectionMode": {
|
|
4782
|
-
"label": "Identity
|
|
4802
|
+
"label": "Identity Context Mode",
|
|
4783
4803
|
"advanced": true,
|
|
4784
4804
|
"placeholder": "recovery_only",
|
|
4785
|
-
"help": "When to
|
|
4805
|
+
"help": "When to add identity continuity context: recovery_only, minimal, or full"
|
|
4786
4806
|
},
|
|
4787
4807
|
"identityMaxInjectChars": {
|
|
4788
|
-
"label": "Identity Max
|
|
4808
|
+
"label": "Identity Max Context Chars",
|
|
4789
4809
|
"advanced": true,
|
|
4790
4810
|
"placeholder": "1200"
|
|
4791
4811
|
},
|
|
@@ -5062,7 +5082,7 @@
|
|
|
5062
5082
|
},
|
|
5063
5083
|
"compactionResetEnabled": {
|
|
5064
5084
|
"label": "Compaction Reset",
|
|
5065
|
-
"help": "Reset session after compaction and
|
|
5085
|
+
"help": "Reset session after compaction and add BOOT.md recovery context",
|
|
5066
5086
|
"advanced": true
|
|
5067
5087
|
},
|
|
5068
5088
|
"hourlySummariesEnabled": {
|
|
@@ -5224,7 +5244,7 @@
|
|
|
5224
5244
|
"objectiveStateRecallEnabled": {
|
|
5225
5245
|
"label": "Objective-State Recall",
|
|
5226
5246
|
"advanced": true,
|
|
5227
|
-
"help": "
|
|
5247
|
+
"help": "Add recall-relevant objective-state snapshots to recall context."
|
|
5228
5248
|
},
|
|
5229
5249
|
"objectiveStateStoreDir": {
|
|
5230
5250
|
"label": "Objective-State Store Directory",
|
|
@@ -5245,7 +5265,7 @@
|
|
|
5245
5265
|
"causalTrajectoryRecallEnabled": {
|
|
5246
5266
|
"label": "Causal Trajectory Recall",
|
|
5247
5267
|
"advanced": true,
|
|
5248
|
-
"help": "
|
|
5268
|
+
"help": "Add recall-relevant causal trajectories to recall context."
|
|
5249
5269
|
},
|
|
5250
5270
|
"trustZonesEnabled": {
|
|
5251
5271
|
"label": "Trust Zones",
|
|
@@ -5265,7 +5285,7 @@
|
|
|
5265
5285
|
"trustZoneRecallEnabled": {
|
|
5266
5286
|
"label": "Trust-Zone Recall",
|
|
5267
5287
|
"advanced": true,
|
|
5268
|
-
"help": "
|
|
5288
|
+
"help": "Add recall-relevant working and trusted trust-zone records to recall context."
|
|
5269
5289
|
},
|
|
5270
5290
|
"memoryPoisoningDefenseEnabled": {
|
|
5271
5291
|
"label": "Memory Poisoning Defense",
|
|
@@ -5279,7 +5299,7 @@
|
|
|
5279
5299
|
},
|
|
5280
5300
|
"harmonicRetrievalEnabled": {
|
|
5281
5301
|
"label": "Harmonic Retrieval",
|
|
5282
|
-
"help": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section
|
|
5302
|
+
"help": "Enable harmonic retrieval blending over abstraction nodes and cue anchors, including recall-section assembly and harmonic-search diagnostics."
|
|
5283
5303
|
},
|
|
5284
5304
|
"abstractionAnchorsEnabled": {
|
|
5285
5305
|
"label": "Abstraction Anchors",
|
|
@@ -5294,7 +5314,7 @@
|
|
|
5294
5314
|
},
|
|
5295
5315
|
"verifiedRecallEnabled": {
|
|
5296
5316
|
"label": "Verified Recall",
|
|
5297
|
-
"help": "
|
|
5317
|
+
"help": "Add recall-relevant memory boxes only when their cited source memories verify as non-archived episodes."
|
|
5298
5318
|
},
|
|
5299
5319
|
"semanticRulePromotionEnabled": {
|
|
5300
5320
|
"label": "Semantic Rule Promotion",
|
|
@@ -5342,9 +5362,9 @@
|
|
|
5342
5362
|
"help": "Max memories to consolidate per run to limit LLM cost."
|
|
5343
5363
|
},
|
|
5344
5364
|
"operatorAwareConsolidationEnabled": {
|
|
5345
|
-
"label": "Operator-Aware Consolidation
|
|
5365
|
+
"label": "Operator-Aware Consolidation",
|
|
5346
5366
|
"advanced": true,
|
|
5347
|
-
"help": "Opt in to operator-aware consolidation
|
|
5367
|
+
"help": "Opt in to operator-aware consolidation instructions (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."
|
|
5348
5368
|
},
|
|
5349
5369
|
"peerProfileReasonerEnabled": {
|
|
5350
5370
|
"label": "Peer Profile Reasoner",
|
|
@@ -5367,14 +5387,14 @@
|
|
|
5367
5387
|
"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."
|
|
5368
5388
|
},
|
|
5369
5389
|
"peerProfileRecallEnabled": {
|
|
5370
|
-
"label": "Peer Profile Recall
|
|
5390
|
+
"label": "Peer Profile Recall",
|
|
5371
5391
|
"advanced": true,
|
|
5372
|
-
"help": "When enabled,
|
|
5392
|
+
"help": "When enabled, adds the active peer's profile fields to recall context as a '## Peer Profile' section. Requires the session peer ID to be registered. Default off."
|
|
5373
5393
|
},
|
|
5374
5394
|
"peerProfileRecallMaxFields": {
|
|
5375
5395
|
"label": "Peer Profile Recall Max Fields",
|
|
5376
5396
|
"advanced": true,
|
|
5377
|
-
"help": "Maximum number of peer profile fields to
|
|
5397
|
+
"help": "Maximum number of peer profile fields to add per recall. Only the most-recently-updated N fields are included. Set to 0 to disable this feature."
|
|
5378
5398
|
},
|
|
5379
5399
|
"creationMemoryEnabled": {
|
|
5380
5400
|
"label": "Creation Memory",
|
|
@@ -5426,7 +5446,7 @@
|
|
|
5426
5446
|
"workProductRecallEnabled": {
|
|
5427
5447
|
"label": "Work-Product Recall",
|
|
5428
5448
|
"advanced": true,
|
|
5429
|
-
"help": "
|
|
5449
|
+
"help": "Add recall-relevant work-product ledger entries to recall context and expose artifact-recovery search tooling."
|
|
5430
5450
|
},
|
|
5431
5451
|
"workProductLedgerDir": {
|
|
5432
5452
|
"label": "Work-Product Ledger Directory",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remnic/plugin-openclaw",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "OpenClaw adapter for Remnic memory
|
|
3
|
+
"version": "1.0.29",
|
|
4
|
+
"description": "OpenClaw adapter for Remnic memory with bundled @remnic/core runtime",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"exports": {
|