@joshuaswarren/openclaw-engram 9.0.105 → 9.0.107
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 +36 -0
- package/dist/access-cli.js +3 -3
- package/dist/{chunk-LTELW5MZ.js → chunk-4E3TGUFK.js} +2 -2
- package/dist/{chunk-H7LMMCVZ.js → chunk-GCQN37AR.js} +34 -11
- package/dist/chunk-GCQN37AR.js.map +1 -0
- package/dist/{chunk-6ZL6J6ZZ.js → chunk-TVZ2RTQZ.js} +5254 -4830
- package/dist/chunk-TVZ2RTQZ.js.map +1 -0
- package/dist/{engine-CE2K7LA5.js → engine-L4EPIXXX.js} +3 -3
- package/dist/index.js +6 -6
- package/dist/{storage-DO5TURPO.js → storage-SHA5TWS7.js} +2 -2
- package/openclaw.plugin.json +24 -5
- package/package.json +1 -1
- package/dist/chunk-6ZL6J6ZZ.js.map +0 -1
- package/dist/chunk-H7LMMCVZ.js.map +0 -1
- /package/dist/{chunk-LTELW5MZ.js.map → chunk-4E3TGUFK.js.map} +0 -0
- /package/dist/{engine-CE2K7LA5.js.map → engine-L4EPIXXX.js.map} +0 -0
- /package/dist/{storage-DO5TURPO.js.map → storage-SHA5TWS7.js.map} +0 -0
package/README.md
CHANGED
|
@@ -207,6 +207,7 @@ Start with zero config. Enable features as your needs grow:
|
|
|
207
207
|
| **+ Capture control** | `implicit`, `explicit`, or `hybrid` capture modes for memory write policy |
|
|
208
208
|
| **+ Memory OS** | Memory boxes, graph reasoning, compounding, shared context, identity continuity |
|
|
209
209
|
| **+ LCM** | Lossless Context Management — never lose conversation context to compaction |
|
|
210
|
+
| **+ Parallel retrieval** | Three specialized agents (DirectFact, Contextual, Temporal) run in parallel — same latency, broader coverage |
|
|
210
211
|
| **+ Advanced** | Trust zones, causal trajectories, harmonic retrieval, evaluation harness, poisoning defense |
|
|
211
212
|
|
|
212
213
|
Use a preset to jump to a recommended level: `conservative`, `balanced`, `research-max`, or `local-llm-heavy`.
|
|
@@ -298,6 +299,41 @@ Enable it in your `openclaw.json`:
|
|
|
298
299
|
|
|
299
300
|
See the [LCM Guide](docs/guides/lossless-context-management.md) for architecture details, configuration options, and how it complements native compaction.
|
|
300
301
|
|
|
302
|
+
### Parallel Specialized Retrieval (opt-in)
|
|
303
|
+
|
|
304
|
+
Engram's default retrieval runs a single hybrid search pass. Parallel Specialized Retrieval (inspired by [Supermemory's ASMR technique](https://blog.supermemory.ai/we-broke-the-frontier-in-agent-memory-introducing-99-sota-memory-system/)) runs three specialized agents in parallel so total latency equals `max(agents)` not `sum(agents)`.
|
|
305
|
+
|
|
306
|
+
| Agent | What It Does | Cost |
|
|
307
|
+
|-------|-------------|------|
|
|
308
|
+
| **DirectFact** | Scans entity filenames for keyword overlap with the query | File I/O only, <5ms |
|
|
309
|
+
| **Contextual** | Existing hybrid BM25+vector search (unchanged) | Same as current |
|
|
310
|
+
| **Temporal** | Reads the temporal date index, returns recent memories with recency decay scoring | File I/O + math, <10ms |
|
|
311
|
+
|
|
312
|
+
**Zero additional LLM cost.** The DirectFact and Temporal agents reuse existing indexes with no new embeddings or inference. The Contextual agent is the same hybrid search already running.
|
|
313
|
+
|
|
314
|
+
Results from all three agents are merged by path, deduplicated, and weighted (`direct=1.0×, temporal=0.85×, contextual=0.7×`) before returning the top N results. Any agent error degrades gracefully without blocking the others.
|
|
315
|
+
|
|
316
|
+
Enable it in your `openclaw.json`:
|
|
317
|
+
|
|
318
|
+
```jsonc
|
|
319
|
+
{
|
|
320
|
+
"plugins": {
|
|
321
|
+
"entries": {
|
|
322
|
+
"openclaw-engram": {
|
|
323
|
+
"config": {
|
|
324
|
+
"parallelRetrievalEnabled": true
|
|
325
|
+
// Optional tuning:
|
|
326
|
+
// "parallelMaxResultsPerAgent": 20,
|
|
327
|
+
// "parallelAgentWeights": { "direct": 1.0, "contextual": 0.7, "temporal": 0.85 }
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
```
|
|
334
|
+
|
|
335
|
+
Set `parallelMaxResultsPerAgent: 0` to disable an individual agent's results without disabling the feature entirely.
|
|
336
|
+
|
|
301
337
|
### Advanced (opt-in)
|
|
302
338
|
|
|
303
339
|
- **Objective-State Recall** — Surfaces file/process/tool state snapshots alongside semantic memory
|
package/dist/access-cli.js
CHANGED
|
@@ -3,10 +3,10 @@ import {
|
|
|
3
3
|
EngramAccessService,
|
|
4
4
|
Orchestrator,
|
|
5
5
|
parseConfig
|
|
6
|
-
} from "./chunk-
|
|
7
|
-
import "./chunk-
|
|
6
|
+
} from "./chunk-TVZ2RTQZ.js";
|
|
7
|
+
import "./chunk-4E3TGUFK.js";
|
|
8
8
|
import "./chunk-WSXU2GHQ.js";
|
|
9
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-GCQN37AR.js";
|
|
10
10
|
import "./chunk-BNBG2XP6.js";
|
|
11
11
|
import "./chunk-AFMNQR7H.js";
|
|
12
12
|
import "./chunk-V2E2ORE5.js";
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
parseContinuityImprovementLoops,
|
|
5
5
|
parseContinuityIncident,
|
|
6
6
|
sanitizeMemoryContent
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-GCQN37AR.js";
|
|
8
8
|
import {
|
|
9
9
|
log
|
|
10
10
|
} from "./chunk-SSIIJJKA.js";
|
|
@@ -1837,4 +1837,4 @@ export {
|
|
|
1837
1837
|
defaultTierMigrationCycleBudget,
|
|
1838
1838
|
CompoundingEngine
|
|
1839
1839
|
};
|
|
1840
|
-
//# sourceMappingURL=chunk-
|
|
1840
|
+
//# sourceMappingURL=chunk-4E3TGUFK.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./chunk-SSIIJJKA.js";
|
|
5
5
|
|
|
6
6
|
// src/storage.ts
|
|
7
|
-
import { access, readdir, readFile as readFile2, writeFile as writeFile2, mkdir as mkdir2, unlink, rename, appendFile } from "fs/promises";
|
|
7
|
+
import { access, readdir, readFile as readFile2, stat as stat2, writeFile as writeFile2, mkdir as mkdir2, unlink, rename, appendFile } from "fs/promises";
|
|
8
8
|
import { appendFileSync, mkdirSync, statSync } from "fs";
|
|
9
9
|
import { createHash } from "crypto";
|
|
10
10
|
import path4 from "path";
|
|
@@ -2186,15 +2186,38 @@ ${sanitized.text}
|
|
|
2186
2186
|
try {
|
|
2187
2187
|
const raw = await readFile2(filePath, "utf-8");
|
|
2188
2188
|
const parsed = parseFrontmatter2(raw);
|
|
2189
|
-
if (
|
|
2190
|
-
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
|
|
2197
|
-
|
|
2189
|
+
if (parsed) {
|
|
2190
|
+
return {
|
|
2191
|
+
path: filePath,
|
|
2192
|
+
frontmatter: normalizeFrontmatterForPath(
|
|
2193
|
+
parsed.frontmatter,
|
|
2194
|
+
toMemoryPathRel(this.baseDir, filePath)
|
|
2195
|
+
),
|
|
2196
|
+
content: parsed.content
|
|
2197
|
+
};
|
|
2198
|
+
}
|
|
2199
|
+
const normalizedPath = filePath.split(path4.sep).join("/");
|
|
2200
|
+
if (normalizedPath.includes("/entities/") && filePath.endsWith(".md")) {
|
|
2201
|
+
const entity = parseEntityFile(raw);
|
|
2202
|
+
if (!entity.name) return null;
|
|
2203
|
+
const nameWithoutExt = path4.basename(filePath, ".md");
|
|
2204
|
+
const fileMtime = entity.updated || await stat2(filePath).then((s) => s.mtime.toISOString()).catch(() => (/* @__PURE__ */ new Date(0)).toISOString());
|
|
2205
|
+
return {
|
|
2206
|
+
path: filePath,
|
|
2207
|
+
frontmatter: {
|
|
2208
|
+
id: nameWithoutExt,
|
|
2209
|
+
category: "entity",
|
|
2210
|
+
created: fileMtime,
|
|
2211
|
+
updated: fileMtime,
|
|
2212
|
+
source: "entity_extraction",
|
|
2213
|
+
confidence: 0.9,
|
|
2214
|
+
confidenceTier: confidenceTier(0.9),
|
|
2215
|
+
tags: entity.type ? [entity.type] : []
|
|
2216
|
+
},
|
|
2217
|
+
content: raw
|
|
2218
|
+
};
|
|
2219
|
+
}
|
|
2220
|
+
return null;
|
|
2198
2221
|
} catch {
|
|
2199
2222
|
return null;
|
|
2200
2223
|
}
|
|
@@ -3888,4 +3911,4 @@ export {
|
|
|
3888
3911
|
serializeEntityFile,
|
|
3889
3912
|
StorageManager
|
|
3890
3913
|
};
|
|
3891
|
-
//# sourceMappingURL=chunk-
|
|
3914
|
+
//# sourceMappingURL=chunk-GCQN37AR.js.map
|