@psiclawops/hypermem 0.9.4 → 0.9.5
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/CHANGELOG.md +12 -3
- package/INSTALL.md +38 -34
- package/README.md +10 -10
- package/assets/default-config.json +1 -7
- package/bench/data-access-bench.mjs +1 -1
- package/dist/background-indexer.js +9 -9
- package/dist/cross-agent.d.ts +1 -1
- package/dist/cross-agent.js +17 -17
- package/dist/index.d.ts +6 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -9
- package/dist/seed.d.ts +1 -1
- package/dist/seed.js +1 -1
- package/dist/session-flusher.d.ts +2 -2
- package/dist/session-flusher.js +2 -2
- package/dist/spawn-context.d.ts +1 -1
- package/dist/spawn-context.js +1 -1
- package/dist/topic-store.js +5 -5
- package/dist/topic-synthesizer.js +1 -1
- package/dist/trigger-registry.d.ts +1 -1
- package/dist/trigger-registry.js +4 -4
- package/dist/types.d.ts +2 -2
- package/docs/DIAGNOSTICS.md +1 -1
- package/docs/MIGRATION.md +1 -1
- package/docs/TUNING.md +5 -5
- package/install.sh +2 -2
- package/memory-plugin/package.json +2 -2
- package/package.json +9 -3
- package/plugin/dist/index.js +3 -3
- package/plugin/dist/index.js.map +1 -1
- package/plugin/package.json +2 -2
- package/scripts/install-packed-runtime.mjs +0 -0
- package/ARCHITECTURE.md +0 -298
- package/docs/KNOWN_LIMITATIONS.md +0 -35
- package/docs/PHASE1-VALIDATION.md +0 -132
- package/docs/RELEASE_0.8.0_VALIDATION.md +0 -70
- package/docs/RELEASE_PROCESS.md +0 -10
- package/docs/ROADMAP.md +0 -279
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to hypermem are documented here.
|
|
4
4
|
|
|
5
|
+
## 0.9.5 - 2026-04-29
|
|
6
|
+
|
|
7
|
+
- **Install-readiness defaults hardened.** Fresh installs now stage `embedding.provider: "none"` by default, making the first-install path FTS5-only and free of Ollama or hosted-provider dependencies.
|
|
8
|
+
- **Install states documented.** README, INSTALL, and TUNING now classify fresh installs as GREEN/YELLOW/RED, with FTS5/no-embedding installs explicitly YELLOW rather than failed.
|
|
9
|
+
- **Semantic recall is opt-in after baseline install.** Ollama and hosted embedding setup moved behind the verified baseline path so operators can bring HyperMem online before adding vector recall.
|
|
10
|
+
- **OpenClaw command guidance updated.** Install docs now use the current `openclaw gateway` command surface instead of stale daemon commands.
|
|
11
|
+
- **Public package payload tightened.** npm package files now include operator-facing docs only; internal architecture and release-process docs are excluded from the published artifact.
|
|
12
|
+
- **Fresh-install smoke covers the FTS5 default.** The release gate now validates the no-embedding default path directly.
|
|
13
|
+
|
|
5
14
|
## 0.9.4 - 2026-04-28
|
|
6
15
|
|
|
7
16
|
- **Recall surface re-enriched.** Bootstrap, warmup, and steady lifecycle bands now carry larger warming fractions, `/new` and topic-shift recall surge harder, and topic-bearing warmup avoids heartbeat/small-talk decay.
|
|
@@ -13,7 +22,7 @@ All notable changes to hypermem are documented here.
|
|
|
13
22
|
## 0.9.3 - OpenClaw 2026.4.26 compatibility hardening
|
|
14
23
|
|
|
15
24
|
- **Plugin manifests declare runtime config schema.** HyperCompositor and HyperMem memory manifests now expose the supported config surface for OpenClaw 2026.4.26 registry/config validation.
|
|
16
|
-
- **Install and doctor flow aligned with persisted plugin registry.**
|
|
25
|
+
- **Install and doctor flow aligned with persisted plugin registry.** operator guidance and `hypermem-doctor` now include registry refresh, doctor repair, and plugin-list verification steps.
|
|
17
26
|
- **Native compaction collision guard added.** `hypermem-doctor` warns when `agents.defaults.compaction.maxActiveTranscriptBytes` is set; HyperMem deployments should leave it unset so HyperMem remains the single trim/compose pressure owner.
|
|
18
27
|
- **Embedding query/document asymmetry supported.** HyperMem config now supports query/document input types and prefixes, with defaults for `nomic-embed-text`, `qwen3-embedding`, and `mxbai-embed-large`.
|
|
19
28
|
- **Forked subagent warm-start repair.** `prepareSubagentSpawn()` falls back to durable runtime history when the hot cache is empty, so forked children inherit parent working context instead of silently starting cold.
|
|
@@ -32,7 +41,7 @@ All notable changes to hypermem are documented here.
|
|
|
32
41
|
- **Vector store init log shows actual provider/model/dims.** Diagnostic log line at startup now reflects the resolved configuration instead of the static placeholder, so misconfiguration is visible immediately.
|
|
33
42
|
- **Tool artifact API arity + hydration docs aligned.** Doc-only follow-ups; no runtime behavior change.
|
|
34
43
|
|
|
35
|
-
**
|
|
44
|
+
**operator action:** upgrade from 0.9.0 is recommended. 0.9.0 in production with a configured non-default embedder may have written mismatched vectors; check `hypermem-status` for vector-store init line after upgrade.
|
|
36
45
|
|
|
37
46
|
## 0.9.0 - adaptive context lifecycle
|
|
38
47
|
|
|
@@ -65,7 +74,7 @@ All notable changes to hypermem are documented here.
|
|
|
65
74
|
- **Provider + model identity is now tracked explicitly in HyperCompositor model state.** Mid-session routing changes are detected on the full `provider/model` key, not budget alone, so `github-copilot/claude-sonnet-4-6` and `anthropic/claude-sonnet-4-6` are treated as different operational envelopes.
|
|
66
75
|
- **Downshift detection now keys off provider/model-aware state.** Budget-downshift handling still stays conservative, but verbose logs now surface provider swaps, model swaps, and budget deltas clearly during `context:assemble`.
|
|
67
76
|
- **Install docs now declare the full operator path.** README, INSTALL.md, and TUNING.md now separate staging from activation, document install states explicitly, add merge-safe wiring guidance, and clarify what healthy-but-empty looks like on a first run.
|
|
68
|
-
- **0.8.5 release parity.** Package versions are aligned for the next publish while preserving the npm-first installer and merge-safe config guidance landed from
|
|
77
|
+
- **0.8.5 release parity.** Package versions are aligned for the next publish while preserving the npm-first installer and merge-safe config guidance landed from Hank's install review.
|
|
69
78
|
|
|
70
79
|
## 0.8.4 — compaction fence fix, install-path fixes, zod runtime packaging
|
|
71
80
|
|
package/INSTALL.md
CHANGED
|
@@ -5,17 +5,17 @@ This is the canonical install procedure. Keep README shorter and point operators
|
|
|
5
5
|
## Prerequisites
|
|
6
6
|
|
|
7
7
|
- **Node.js 22+** (uses built-in `node:sqlite`)
|
|
8
|
-
- **OpenClaw** must already be installed, onboarded, and running. HyperMem is a plugin for an existing OpenClaw deployment -- it does not bootstrap OpenClaw itself. If you have
|
|
8
|
+
- **OpenClaw** must already be installed, onboarded, and running. HyperMem is a plugin for an existing OpenClaw deployment -- it does not bootstrap OpenClaw itself. If you have not completed OpenClaw onboarding, do that first. The HyperMem install guide picks up after OpenClaw is operational.
|
|
9
9
|
- **Disk space:** allow at least 2 GB free. Plugin builds pull OpenClaw as a dev dependency.
|
|
10
10
|
|
|
11
11
|
**Verify before starting:**
|
|
12
12
|
|
|
13
13
|
```bash
|
|
14
|
-
openclaw
|
|
14
|
+
openclaw gateway status # should show "running" or "ready"
|
|
15
15
|
openclaw config get gateway # should return gateway config, not an error
|
|
16
16
|
```
|
|
17
17
|
|
|
18
|
-
If `gateway status` shows "disabled" or "not configured", complete OpenClaw onboarding first. `openclaw
|
|
18
|
+
If `openclaw gateway status` shows "disabled" or "not configured", complete OpenClaw onboarding first. `openclaw gateway restart` only works when the gateway service is already set up. On a brand-new OpenClaw install that has never been onboarded, complete the OpenClaw onboarding flow before installing plugins.
|
|
19
19
|
|
|
20
20
|
## Non-OpenClaw usage
|
|
21
21
|
|
|
@@ -68,29 +68,23 @@ The shell installer is now a thin npm-first wrapper around this same path:
|
|
|
68
68
|
curl -fsSL https://raw.githubusercontent.com/PsiClawOps/hypermem/main/install.sh | bash
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
It installs the npm package into `~/.hypermem`, backs up any existing staged runtime when confirmed, stages the runtime with `hypermem-install`, writes the
|
|
71
|
+
It installs the npm package into `~/.hypermem`, backs up any existing staged runtime when confirmed, stages the runtime with `hypermem-install`, writes the FTS5 starter config only if no config exists, and prints merge-safe OpenClaw activation commands. It does not edit OpenClaw config and does not restart the gateway.
|
|
72
72
|
|
|
73
73
|
Release validation details live in [docs/INTEGRATION_VALIDATION.md](./docs/INTEGRATION_VALIDATION.md). Diagnostic surfaces live in [docs/DIAGNOSTICS.md](./docs/DIAGNOSTICS.md).
|
|
74
74
|
|
|
75
|
-
> **Prerequisites:** OpenClaw must be installed and onboarded. Run `openclaw
|
|
75
|
+
> **Prerequisites:** OpenClaw must be installed and onboarded. Run `openclaw gateway status` to confirm. If the gateway is not configured, complete OpenClaw setup first.
|
|
76
76
|
>
|
|
77
77
|
> **Config merge warning:** if you already have values in `plugins.load.paths` or `plugins.allow`, merge them instead of overwriting blindly.
|
|
78
78
|
|
|
79
|
-
`hypermem-install` creates the current recommended starter config automatically when `~/.openclaw/hypermem/config.json` is missing. The shipped starter config is
|
|
79
|
+
`hypermem-install` creates the current recommended starter config automatically when `~/.openclaw/hypermem/config.json` is missing. The shipped starter config is installation-safe FTS5 mode:
|
|
80
80
|
|
|
81
|
-
- `embedding.provider: "
|
|
81
|
+
- `embedding.provider: "none"`
|
|
82
82
|
- `warmHistoryBudgetFraction: 0.45`
|
|
83
83
|
- standard fact, keystone, and history caps
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
This is intentional. A clean first install should load, compose, and verify without requiring Ollama or an external API key. The result is **YELLOW** install readiness: HyperMem is active with keyword recall, but semantic vector recall is disabled. Upgrade to Ollama, OpenRouter, or Gemini after the baseline install is active.
|
|
86
86
|
|
|
87
|
-
|
|
88
|
-
npx hypermem-install --skip-embedding-check
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
or pre-create `~/.openclaw/hypermem/config.json` with `{"embedding":{"provider":"none"}}` before running the installer. Existing config files are preserved unchanged.
|
|
92
|
-
|
|
93
|
-
If you want a lighter or richer memory profile later, adjust from this baseline using the tuning guidance below instead of starting from the older code defaults.
|
|
87
|
+
Existing config files are preserved unchanged. If an existing config selects `embedding.provider: "ollama"`, `hypermem-install` checks that Ollama and `nomic-embed-text` are available unless you pass `--skip-embedding-check`.
|
|
94
88
|
|
|
95
89
|
### Install states
|
|
96
90
|
|
|
@@ -106,6 +100,16 @@ Treat the install as 5 explicit states:
|
|
|
106
100
|
|
|
107
101
|
Do not stop at state 2 and call the install done.
|
|
108
102
|
|
|
103
|
+
Install readiness states:
|
|
104
|
+
|
|
105
|
+
| State | Meaning | Action |
|
|
106
|
+
|---|---|---|
|
|
107
|
+
| **GREEN** | Runtime active and semantic embeddings/reranker are configured as intended | Ready for normal use |
|
|
108
|
+
| **YELLOW** | Runtime active with FTS5 fallback or model-audit warnings | Usable, but finish provider/model tuning before production claims |
|
|
109
|
+
| **RED** | Runtime not staged, not loaded, not wired, or falling back to `legacy` | Not installed |
|
|
110
|
+
|
|
111
|
+
A no-embedding FTS5 install is **YELLOW**, not failed. A `legacy` context-engine fallback is **RED**.
|
|
112
|
+
|
|
109
113
|
Wire both plugins into OpenClaw:
|
|
110
114
|
|
|
111
115
|
**Step 1: Check your existing config (mandatory — do this before wiring).**
|
|
@@ -141,7 +145,7 @@ openclaw config set plugins.allow '["existing-plugin","hypercompositor","hyperme
|
|
|
141
145
|
**Step 3: Restart.**
|
|
142
146
|
|
|
143
147
|
```bash
|
|
144
|
-
openclaw
|
|
148
|
+
openclaw gateway restart
|
|
145
149
|
```
|
|
146
150
|
|
|
147
151
|
OpenClaw loads the plugin runtime from `~/.openclaw/plugins/hypermem/`.
|
|
@@ -219,7 +223,7 @@ Upgrades preserve the HyperMem data directory and existing config. The runtime s
|
|
|
219
223
|
cp -a ~/.openclaw/plugins/hypermem ~/.openclaw/plugins/hypermem.backup.$(date +%Y%m%d-%H%M%S) 2>/dev/null || true
|
|
220
224
|
npm install @psiclawops/hypermem@latest
|
|
221
225
|
npx hypermem-install
|
|
222
|
-
openclaw
|
|
226
|
+
openclaw gateway restart
|
|
223
227
|
```
|
|
224
228
|
|
|
225
229
|
Then validate:
|
|
@@ -244,7 +248,7 @@ Rollback disables HyperMem without deleting data:
|
|
|
244
248
|
```bash
|
|
245
249
|
openclaw config set plugins.slots.contextEngine legacy
|
|
246
250
|
openclaw config set plugins.slots.memory none
|
|
247
|
-
openclaw
|
|
251
|
+
openclaw gateway restart
|
|
248
252
|
```
|
|
249
253
|
|
|
250
254
|
---
|
|
@@ -278,7 +282,7 @@ Everything runs in-process on SQLite memory databases. No external database serv
|
|
|
278
282
|
|
|
279
283
|
> **Package versions:** the root package (`hypermem`) and the two plugins (`hypercompositor`, `hypermem-memory`) are versioned independently. Plugin versions trail the core by one minor version when no plugin-facing API changes ship in a release — this is expected.
|
|
280
284
|
|
|
281
|
-
The **embedding layer** (L3 semantic search)
|
|
285
|
+
The **embedding layer** (L3 semantic search) is optional at install time. The packaged starter config uses `provider: "none"`, so HyperMem starts in FTS5 keyword mode with no external service dependency. This is functional and easy to verify, but recall quality improves when you later enable Ollama, OpenRouter, or Gemini. See [Setup Styles](#setup-styles) below.
|
|
282
286
|
|
|
283
287
|
---
|
|
284
288
|
|
|
@@ -309,7 +313,7 @@ Pick a tier based on your hardware:
|
|
|
309
313
|
|
|
310
314
|
### Minimal (no embedder)
|
|
311
315
|
|
|
312
|
-
No Ollama, no API key. This
|
|
316
|
+
No Ollama, no API key. This is the default clean-install posture. `hypermem-install` writes this config when `~/.openclaw/hypermem/config.json` is missing:
|
|
313
317
|
|
|
314
318
|
```json
|
|
315
319
|
{
|
|
@@ -319,7 +323,7 @@ No Ollama, no API key. This config must exist **before gateway restart and runti
|
|
|
319
323
|
}
|
|
320
324
|
```
|
|
321
325
|
|
|
322
|
-
|
|
326
|
+
With `provider: 'none'`, HyperMem does not attempt vector initialization. The install should verify cleanly as FTS5 mode, then you can opt into semantic recall later.
|
|
323
327
|
|
|
324
328
|
You'll see in the logs:
|
|
325
329
|
```
|
|
@@ -563,8 +567,8 @@ openclaw config set plugins.allow '["existing-plugin","hypercompositor","hyperme
|
|
|
563
567
|
|
|
564
568
|
See [Embedding Providers](#embedding-providers) above.
|
|
565
569
|
|
|
566
|
-
- **Lightweight (no embedder):**
|
|
567
|
-
- **Local:** `ollama pull nomic-embed-text
|
|
570
|
+
- **Lightweight (no embedder):** keep the starter `{"embedding":{"provider":"none"}}` config. This is the default first-install path and verifies as YELLOW until you intentionally enable semantic recall.
|
|
571
|
+
- **Local:** install Ollama, run `ollama pull nomic-embed-text`, then set `embedding.provider` to `"ollama"` with `model: "nomic-embed-text"`. HyperMem applies retrieval query/document prefixes for supported Ollama embedders (`nomic-embed-text`, `qwen3-embedding`, `mxbai-embed-large`) unless `queryPrefix` / `documentPrefix` are set explicitly.
|
|
568
572
|
- **Hosted/Gemini:** create `~/.openclaw/hypermem/config.json` with the provider config block from the relevant section above.
|
|
569
573
|
|
|
570
574
|
### Step 4 — Restart and verify
|
|
@@ -572,7 +576,7 @@ See [Embedding Providers](#embedding-providers) above.
|
|
|
572
576
|
Do not start tuning before this section passes. If HyperMem is not loaded and composing, the next problem is installation, not tuning.
|
|
573
577
|
|
|
574
578
|
```bash
|
|
575
|
-
openclaw
|
|
579
|
+
openclaw gateway restart
|
|
576
580
|
```
|
|
577
581
|
|
|
578
582
|
> **If restart reports the gateway is disabled or not configured:** you need to complete OpenClaw onboarding before this step. See [Prerequisites](#prerequisites). `gateway restart` only works on an already-running gateway.
|
|
@@ -583,7 +587,7 @@ Send a message to any agent, then check:
|
|
|
583
587
|
openclaw logs --limit 50 | grep hypermem
|
|
584
588
|
```
|
|
585
589
|
|
|
586
|
-
> **If `openclaw logs` fails with an auth or token error:** the gateway API requires authentication. Run `openclaw
|
|
590
|
+
> **If `openclaw logs` fails with an auth or token error:** the gateway API requires authentication. Run `openclaw gateway status` to confirm the gateway is running and accessible. If the gateway is running but logs fail, check your OpenClaw CLI auth context.
|
|
587
591
|
|
|
588
592
|
Expected:
|
|
589
593
|
```
|
|
@@ -612,7 +616,7 @@ openclaw status # look for hypermem in plugi
|
|
|
612
616
|
|
|
613
617
|
### Step 5 — Configure your fleet
|
|
614
618
|
|
|
615
|
-
hypermem works out of the box for both single-agent and multi-agent installs. The source ships with generic placeholder agent names (`
|
|
619
|
+
hypermem works out of the box for both single-agent and multi-agent installs. The source ships with generic placeholder agent names (`alice`, `bob`, `director1`, etc.) in two files that define fleet topology:
|
|
616
620
|
|
|
617
621
|
| File | What it defines |
|
|
618
622
|
|---|---|
|
|
@@ -639,7 +643,7 @@ Facts, episodes, and topics are all scoped to your agent ID automatically. Cross
|
|
|
639
643
|
|
|
640
644
|
#### Multi-agent installs
|
|
641
645
|
|
|
642
|
-
hypermem ships with generic placeholder agent names (`
|
|
646
|
+
hypermem ships with generic placeholder agent names (`alice`, `bob`, `director1`, etc.) in the two fleet topology files listed above.
|
|
643
647
|
|
|
644
648
|
Replace the placeholder names with your fleet:
|
|
645
649
|
|
|
@@ -647,7 +651,7 @@ Replace the placeholder names with your fleet:
|
|
|
647
651
|
|
|
648
652
|
```typescript
|
|
649
653
|
// Before (placeholder):
|
|
650
|
-
|
|
654
|
+
alice: { agentId: 'alice', tier: 'council' },
|
|
651
655
|
|
|
652
656
|
// After (your fleet):
|
|
653
657
|
architect: { agentId: 'architect', tier: 'council' },
|
|
@@ -657,7 +661,7 @@ architect: { agentId: 'architect', tier: 'council' },
|
|
|
657
661
|
|
|
658
662
|
```typescript
|
|
659
663
|
// Before (placeholder):
|
|
660
|
-
|
|
664
|
+
alice: 'infrastructure',
|
|
661
665
|
|
|
662
666
|
// After (your fleet):
|
|
663
667
|
architect: 'infrastructure',
|
|
@@ -668,7 +672,7 @@ architect: 'infrastructure',
|
|
|
668
672
|
```bash
|
|
669
673
|
npm run build
|
|
670
674
|
npm --prefix plugin run build
|
|
671
|
-
openclaw
|
|
675
|
+
openclaw gateway restart
|
|
672
676
|
```
|
|
673
677
|
|
|
674
678
|
Agents not listed in `AGENT_DOMAIN_MAP` default to domain `'general'`, which is fine for most setups. The org registry only matters if you use cross-agent memory visibility (org-scoped or council-scoped facts). If all your facts are agent-private or fleet-wide, you can skip the org structure entirely.
|
|
@@ -686,7 +690,7 @@ npm install
|
|
|
686
690
|
npm run build
|
|
687
691
|
npm --prefix plugin install && npm --prefix plugin run build
|
|
688
692
|
npm --prefix memory-plugin install && npm --prefix memory-plugin run build
|
|
689
|
-
openclaw
|
|
693
|
+
openclaw gateway restart
|
|
690
694
|
```
|
|
691
695
|
|
|
692
696
|
What changed on the path from 0.5.x to current:
|
|
@@ -1000,7 +1004,7 @@ Expected on fresh installs. Facts and episodes accumulate over real conversation
|
|
|
1000
1004
|
|
|
1001
1005
|
**Lost bundled plugins after setting `plugins.allow`**
|
|
1002
1006
|
|
|
1003
|
-
If you set `plugins.allow` to only `["hypercompositor","hypermem"]` without including your pre-existing allowed plugins, OpenClaw can stop loading bundled CLI surfaces and channel plugins. Fix: restore the prior allowlist, append `hypercompositor` and `hypermem`, then `openclaw
|
|
1007
|
+
If you set `plugins.allow` to only `["hypercompositor","hypermem"]` without including your pre-existing allowed plugins, OpenClaw can stop loading bundled CLI surfaces and channel plugins. Fix: restore the prior allowlist, append `hypercompositor` and `hypermem`, then `openclaw gateway restart`. If `plugins.allow` was previously unset or empty, remove the HyperMem-only allowlist instead of keeping it.
|
|
1004
1008
|
|
|
1005
1009
|
**Plugin not found**
|
|
1006
1010
|
|
|
@@ -1048,7 +1052,7 @@ To return to OpenClaw's default context engine:
|
|
|
1048
1052
|
```bash
|
|
1049
1053
|
openclaw config set plugins.slots.contextEngine legacy
|
|
1050
1054
|
openclaw config set plugins.slots.memory none
|
|
1051
|
-
openclaw
|
|
1055
|
+
openclaw gateway restart
|
|
1052
1056
|
```
|
|
1053
1057
|
|
|
1054
1058
|
Data in `~/.openclaw/hypermem/` is untouched. Re-enable by switching back.
|
|
@@ -1066,7 +1070,7 @@ Example:
|
|
|
1066
1070
|
```bash
|
|
1067
1071
|
# Point hypermem at a different data location:
|
|
1068
1072
|
export HYPERMEM_DATA_DIR=/mnt/data/hypermem
|
|
1069
|
-
openclaw
|
|
1073
|
+
openclaw gateway restart
|
|
1070
1074
|
```
|
|
1071
1075
|
|
|
1072
1076
|
> The config file path (`~/.openclaw/hypermem/config.json`) is separate from the data directory. Moving `HYPERMEM_DATA_DIR` does not move the config file.
|
package/README.md
CHANGED
|
@@ -332,7 +332,7 @@ Diagnostics expose reranker status, candidate count, and provider, so operators
|
|
|
332
332
|
| Knowledge / wiki | Domain knowledge and synthesized topic pages with full-text search |
|
|
333
333
|
| Episodes | Significant events, decisions, discoveries, participants, and source links |
|
|
334
334
|
| Topics | Cross-session thread tracking and topic lifecycle state |
|
|
335
|
-
| Preferences |
|
|
335
|
+
| Preferences | operator and agent behavior patterns |
|
|
336
336
|
| Documents | Chunked workspace/governance docs, doc sources, and trigger retrieval metadata |
|
|
337
337
|
| Knowledge graph | Links between facts, knowledge, topics, episodes, agents, and preferences |
|
|
338
338
|
| Fleet registry | Agents, orgs, tiers, capabilities, and fleet topology |
|
|
@@ -386,7 +386,7 @@ Slot-level budget allocation is shown in the [hypercompositor diagram](#what-the
|
|
|
386
386
|
|
|
387
387
|
## Requirements
|
|
388
388
|
|
|
389
|
-
**Current release: hypermem 0.9.
|
|
389
|
+
**Current release: hypermem 0.9.5.** Changelog: [CHANGELOG.md](./CHANGELOG.md)
|
|
390
390
|
|
|
391
391
|
| Requirement | Version | Notes |
|
|
392
392
|
|---|---|---|
|
|
@@ -398,10 +398,10 @@ SQLite is a library, not a service. All four layers run in-process with no exter
|
|
|
398
398
|
**Runtime version constants** (importable from the package):
|
|
399
399
|
```typescript
|
|
400
400
|
import {
|
|
401
|
-
ENGINE_VERSION, // '0.9.
|
|
401
|
+
ENGINE_VERSION, // '0.9.5'
|
|
402
402
|
MIN_NODE_VERSION, // '22.0.0'
|
|
403
403
|
SQLITE_VEC_VERSION, // '0.1.9'
|
|
404
|
-
MAIN_SCHEMA_VERSION, //
|
|
404
|
+
MAIN_SCHEMA_VERSION, // 11 (messages.db)
|
|
405
405
|
LIBRARY_SCHEMA_VERSION_EXPORT, // 19 (library.db)
|
|
406
406
|
} from '@psiclawops/hypermem';
|
|
407
407
|
```
|
|
@@ -437,7 +437,7 @@ Install states:
|
|
|
437
437
|
| Runtime loaded | gateway restarted and both plugins loaded |
|
|
438
438
|
| Runtime active | logs show `hypermem initialized` and compose activity |
|
|
439
439
|
|
|
440
|
-
The installer writes the starter config for you when `~/.openclaw/hypermem/config.json` is missing. The default is
|
|
440
|
+
The installer writes the starter config for you when `~/.openclaw/hypermem/config.json` is missing. The default first-install posture is FTS5/no-embedding mode with `{"embedding":{"provider":"none"}}`, so HyperMem can load and compose without Ollama or an API key. That verifies as **YELLOW** install readiness: runtime active, semantic vector recall disabled. Enable Ollama, OpenRouter, or Gemini after the baseline install is active.
|
|
441
441
|
|
|
442
442
|
Then merge the staged plugin paths into OpenClaw config and set the slots:
|
|
443
443
|
|
|
@@ -477,7 +477,7 @@ If you prefer, hand the install to your OpenClaw agent:
|
|
|
477
477
|
|
|
478
478
|
> "Install hypermem following INSTALL.md. I'm running a [solo / multi-agent] setup."
|
|
479
479
|
|
|
480
|
-
###
|
|
480
|
+
### operator guides
|
|
481
481
|
|
|
482
482
|
- **[docs/MEMORY_MD_AUTHORING.md](./docs/MEMORY_MD_AUTHORING.md)**, how to keep `MEMORY.md` compact, durable, and reviewable
|
|
483
483
|
- **[docs/TUNING.md](./docs/TUNING.md)**, context assembly and output shaping profiles
|
|
@@ -495,7 +495,7 @@ Two independent surfaces: **context assembly** (what fills the context window) a
|
|
|
495
495
|
| `standard` | 128k | Normal deployments, small fleets |
|
|
496
496
|
| `full` | 200k+ | Multi-agent fleets, large-context models |
|
|
497
497
|
|
|
498
|
-
Start
|
|
498
|
+
Start from the installed baseline. Use `light` for constrained/no-embedding installs, `standard` once semantic recall is enabled, and `full` for large-context fleets. Use `mergeProfile()` to adjust individual settings:
|
|
499
499
|
|
|
500
500
|
```typescript
|
|
501
501
|
import { mergeProfile } from '@psiclawops/hypermem';
|
|
@@ -546,7 +546,7 @@ README keeps the interface surface short. Use the detailed docs for exact exampl
|
|
|
546
546
|
|
|
547
547
|
**Runtime API:** import `HyperMem` from `@psiclawops/hypermem` for direct Node.js use, custom tests, and non-OpenClaw integrations. See **[INSTALL.md § Non-OpenClaw usage](./INSTALL.md#non-openclaw-usage)** and package TypeScript declarations for the current interface.
|
|
548
548
|
|
|
549
|
-
**
|
|
549
|
+
**operator CLIs:**
|
|
550
550
|
|
|
551
551
|
```bash
|
|
552
552
|
hypermem-status --health
|
|
@@ -594,7 +594,7 @@ hypermem composes context fresh on every turn, but a long-running session still
|
|
|
594
594
|
| Symptom | Cause | Fix |
|
|
595
595
|
|---|---|---|
|
|
596
596
|
| `falling back to default engine "legacy"` in logs | Plugin not loaded or slot misconfigured | Check `openclaw config get plugins.slots.contextEngine` is `hypercompositor`, paths are correct, and both plugins are in `plugins.allow` |
|
|
597
|
-
| `openclaw gateway restart` says disabled/not configured | OpenClaw not fully onboarded | Complete OpenClaw setup first. `gateway restart` requires
|
|
597
|
+
| `openclaw gateway restart` says disabled/not configured | OpenClaw not fully onboarded | Complete OpenClaw setup first. `openclaw gateway restart` requires an onboarded gateway. |
|
|
598
598
|
| `openclaw logs` fails with auth/token error | Gateway auth not set up for CLI | Run `openclaw gateway status` to confirm the gateway is accessible |
|
|
599
599
|
| `facts=0 semantic=0` every turn | Fresh install, no data yet | Expected. Facts accumulate over real conversations. |
|
|
600
600
|
| Health check says "no sessions ingested" | No agent has run a session yet | Send a test message, then re-run |
|
|
@@ -613,7 +613,7 @@ The migration guide includes worked examples showing how to bring data from Open
|
|
|
613
613
|
|
|
614
614
|
All examples default to dry-run. Nothing is written until you add `--apply`.
|
|
615
615
|
|
|
616
|
-
|
|
616
|
+
operator guide: **[docs/MIGRATION_GUIDE.md](./docs/MIGRATION_GUIDE.md)**
|
|
617
617
|
|
|
618
618
|
|
|
619
619
|
---
|
|
@@ -16,7 +16,7 @@ function argValue(name, fallback = null) {
|
|
|
16
16
|
return process.argv.find((a, i) => process.argv[i - 1] === name) ?? fallback;
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
const DATA_DIR = argValue('--data-dir', process.env.HYPERMEM_DATA_DIR ?? path.join(process.env.HOME ||
|
|
19
|
+
const DATA_DIR = argValue('--data-dir', process.env.HYPERMEM_DATA_DIR ?? path.join(process.env.HOME || os.homedir(), '.openclaw', 'hypermem'));
|
|
20
20
|
const ITERATIONS = parseInt(argValue('--iterations', '100'), 10);
|
|
21
21
|
const WARMUP = parseInt(argValue('--warmup', '3'), 10);
|
|
22
22
|
const TARGET_AGENT = argValue('--agent', null);
|
|
@@ -37,27 +37,27 @@ import { isSafeForSharedVisibility } from './secret-scanner.js';
|
|
|
37
37
|
// returns results. New agents default to 'general'.
|
|
38
38
|
//
|
|
39
39
|
// ── EXAMPLE DATA ──────────────────────────────────────────────────
|
|
40
|
-
// The agent names below (
|
|
40
|
+
// The agent names below (alice, director1, etc.) are PLACEHOLDERS.
|
|
41
41
|
// Replace them with your own agent IDs and domain labels to match
|
|
42
42
|
// your fleet. Single-agent installs don't need to edit this:
|
|
43
43
|
// unknown agents fall through to 'general' automatically.
|
|
44
44
|
// See INSTALL.md § "Configure your fleet" for details.
|
|
45
45
|
// ─────────────────────────────────────────────────────────────────
|
|
46
46
|
const AGENT_DOMAIN_MAP = {
|
|
47
|
-
|
|
47
|
+
alice: 'infrastructure',
|
|
48
48
|
director2: 'infrastructure',
|
|
49
49
|
director1: 'infrastructure',
|
|
50
50
|
director3: 'infrastructure',
|
|
51
|
-
|
|
51
|
+
bob: 'product',
|
|
52
52
|
director4: 'product',
|
|
53
53
|
director5: 'product',
|
|
54
54
|
director6: 'product',
|
|
55
|
-
|
|
55
|
+
dave: 'security',
|
|
56
56
|
director7: 'security',
|
|
57
57
|
director8: 'security',
|
|
58
58
|
agent4: 'ux',
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
carol: 'governance',
|
|
60
|
+
oscar: 'strategy',
|
|
61
61
|
specialist1: 'development',
|
|
62
62
|
specialist2: 'communications',
|
|
63
63
|
main: 'general',
|
|
@@ -94,7 +94,7 @@ function extractFactCandidates(content) {
|
|
|
94
94
|
// Preference patterns — medium confidence (0.60)
|
|
95
95
|
const preferencePatterns = [
|
|
96
96
|
/(?:prefer|always use|never use|don't use|avoid) (.{10,150})/gi,
|
|
97
|
-
/(?:operator
|
|
97
|
+
/(?:operator) (?:wants|prefers|likes|hates|dislikes) (.{10,150})/gi,
|
|
98
98
|
];
|
|
99
99
|
// Operational patterns: deployments, incidents, fixes — high confidence (0.70)
|
|
100
100
|
const operationalPatterns = [
|
|
@@ -148,7 +148,7 @@ const OPERATIONAL_BOILERPLATE = [
|
|
|
148
148
|
/still\s*waiting/i,
|
|
149
149
|
/will\s*pick\s*(it\s*)?up\s*(on\s*(next|the))?/i,
|
|
150
150
|
/message\s*is\s*in\s*(his|her|their|the)\s*queue/i,
|
|
151
|
-
/sent\s+to\s+(
|
|
151
|
+
/sent\s+to\s+(carol|bob|agent4|dave|oscar|alice)/i,
|
|
152
152
|
/dispatched\s+(it\s+)?to/i,
|
|
153
153
|
/timed\s*out\s*after/i,
|
|
154
154
|
/\bNO_REPLY\b/,
|
|
@@ -393,7 +393,7 @@ function detectTopic(content) {
|
|
|
393
393
|
if (!content || content.length < 50)
|
|
394
394
|
return null;
|
|
395
395
|
// Product/project name detection
|
|
396
|
-
const productMatch = content.match(/\b(HyperMem|ClawText|
|
|
396
|
+
const productMatch = content.match(/\b(HyperMem|ClawText|dashboard|canvas|council|automation|OpenClaw|dispatch)\b/i);
|
|
397
397
|
if (productMatch)
|
|
398
398
|
return productMatch[1];
|
|
399
399
|
// Infrastructure topic detection
|
package/dist/cross-agent.d.ts
CHANGED
|
@@ -27,7 +27,7 @@ export interface OrgRegistry {
|
|
|
27
27
|
* Default fleet org structure.
|
|
28
28
|
*
|
|
29
29
|
* ── EXAMPLE DATA ──────────────────────────────────────────────────────────
|
|
30
|
-
* The agent names below (
|
|
30
|
+
* The agent names below (alice, bob, director1, etc.) are PLACEHOLDERS.
|
|
31
31
|
* Replace them with your own agent IDs to match your fleet configuration.
|
|
32
32
|
*
|
|
33
33
|
* Single-agent installs: you don't need to edit this. Your agent ID is
|
package/dist/cross-agent.js
CHANGED
|
@@ -21,7 +21,7 @@ import { FleetStore } from './fleet-store.js';
|
|
|
21
21
|
* Default fleet org structure.
|
|
22
22
|
*
|
|
23
23
|
* ── EXAMPLE DATA ──────────────────────────────────────────────────────────
|
|
24
|
-
* The agent names below (
|
|
24
|
+
* The agent names below (alice, bob, director1, etc.) are PLACEHOLDERS.
|
|
25
25
|
* Replace them with your own agent IDs to match your fleet configuration.
|
|
26
26
|
*
|
|
27
27
|
* Single-agent installs: you don't need to edit this. Your agent ID is
|
|
@@ -34,27 +34,27 @@ import { FleetStore } from './fleet-store.js';
|
|
|
34
34
|
*/
|
|
35
35
|
export function defaultOrgRegistry() {
|
|
36
36
|
const agents = {
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
alice: { agentId: 'alice', tier: 'council' },
|
|
38
|
+
bob: { agentId: 'bob', tier: 'council' },
|
|
39
39
|
agent4: { agentId: 'agent4', tier: 'council' },
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
director1: { agentId: 'director1', tier: 'director', org: '
|
|
44
|
-
director2: { agentId: 'director2', tier: 'director', org: '
|
|
45
|
-
director3: { agentId: 'director3', tier: 'director', org: '
|
|
46
|
-
director4: { agentId: 'director4', tier: 'director', org: '
|
|
47
|
-
director5: { agentId: 'director5', tier: 'director', org: '
|
|
48
|
-
director6: { agentId: 'director6', tier: 'director', org: '
|
|
49
|
-
director7: { agentId: 'director7', tier: 'director', org: '
|
|
50
|
-
director8: { agentId: 'director8', tier: 'director', org: '
|
|
40
|
+
dave: { agentId: 'dave', tier: 'council' },
|
|
41
|
+
carol: { agentId: 'carol', tier: 'council' },
|
|
42
|
+
oscar: { agentId: 'oscar', tier: 'council' },
|
|
43
|
+
director1: { agentId: 'director1', tier: 'director', org: 'alice-org', councilLead: 'alice' },
|
|
44
|
+
director2: { agentId: 'director2', tier: 'director', org: 'alice-org', councilLead: 'alice' },
|
|
45
|
+
director3: { agentId: 'director3', tier: 'director', org: 'alice-org', councilLead: 'alice' },
|
|
46
|
+
director4: { agentId: 'director4', tier: 'director', org: 'bob-org', councilLead: 'bob' },
|
|
47
|
+
director5: { agentId: 'director5', tier: 'director', org: 'bob-org', councilLead: 'bob' },
|
|
48
|
+
director6: { agentId: 'director6', tier: 'director', org: 'bob-org', councilLead: 'bob' },
|
|
49
|
+
director7: { agentId: 'director7', tier: 'director', org: 'dave-org', councilLead: 'dave' },
|
|
50
|
+
director8: { agentId: 'director8', tier: 'director', org: 'dave-org', councilLead: 'dave' },
|
|
51
51
|
specialist1: { agentId: 'specialist1', tier: 'specialist' },
|
|
52
52
|
specialist2: { agentId: 'specialist2', tier: 'specialist' },
|
|
53
53
|
};
|
|
54
54
|
const orgs = {
|
|
55
|
-
'
|
|
56
|
-
'
|
|
57
|
-
'
|
|
55
|
+
'alice-org': ['alice', 'director1', 'director2', 'director3'],
|
|
56
|
+
'bob-org': ['bob', 'director4', 'director5', 'director6'],
|
|
57
|
+
'dave-org': ['dave', 'director7', 'director8'],
|
|
58
58
|
};
|
|
59
59
|
return { orgs, agents };
|
|
60
60
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -135,8 +135,8 @@ export interface StartupFleetSeedResult {
|
|
|
135
135
|
*
|
|
136
136
|
* Usage:
|
|
137
137
|
* const hm = await hypermem.create({ dataDir: '~/.openclaw/hypermem' });
|
|
138
|
-
* await hm.record('
|
|
139
|
-
* const result = await hm.compose({ agentId: '
|
|
138
|
+
* await hm.record('alice', 'agent:alice:webchat:main', userMsg);
|
|
139
|
+
* const result = await hm.compose({ agentId: 'alice', sessionKey: '...', ... });
|
|
140
140
|
*/
|
|
141
141
|
export declare class HyperMem {
|
|
142
142
|
readonly dbManager: DatabaseManager;
|
|
@@ -202,7 +202,7 @@ export declare class HyperMem {
|
|
|
202
202
|
/**
|
|
203
203
|
* List archived or forked contexts for an agent.
|
|
204
204
|
*
|
|
205
|
-
*
|
|
205
|
+
* operator-safe enumeration path. This is the approved archived-context
|
|
206
206
|
* listing surface. Active composition remains separate.
|
|
207
207
|
*/
|
|
208
208
|
listArchivedContexts(agentId: string, opts?: {
|
|
@@ -226,11 +226,9 @@ export declare class HyperMem {
|
|
|
226
226
|
* Routes to MessageStore.queryHistory which owns all history SQL.
|
|
227
227
|
* No general SQL execution, no bypass of compaction fences.
|
|
228
228
|
*
|
|
229
|
-
* Plugin surface: preferred shape is
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
* or equivalent action-routing surface in definePluginEntry. This method is the
|
|
233
|
-
* public API; agents can call it directly via HyperMem.queryHistory().
|
|
229
|
+
* Plugin surface: preferred shape is the history_query OpenClaw agent tool,
|
|
230
|
+
* labeled history.query for operator-facing output. This method is the core
|
|
231
|
+
* public API that backs the tool via HyperMem.queryHistory().
|
|
234
232
|
*/
|
|
235
233
|
queryHistory(query: HistoryQuery): HistoryQueryResult;
|
|
236
234
|
/**
|