Author SHA1 Message Date
osobh 79dfa78e8f Merge pull request 'Withdraw the OpenClaw integration claims' (#9) from docs/withdraw-openclaw into main
CI / test-arm64 (push) Successful in 1m18s
CI / test (push) Successful in 5m40s
Reviewed-on: #9
2026-09-25 16:14:36 +00:00
osobh bdadf3447c Merge pull request 'Ed25519-signed checkpoints; remove the no-op agent feature' (#8) from feat/signed-checkpoints into main
CI / test-arm64 (push) Successful in 1m16s
CI / test (push) Successful in 5m42s
Reviewed-on: #8
2026-09-25 15:58:19 +00:00
osobh 7706697feb Merge pull request 'Complete the consolidation benchmark: cheaper novelty scoring' (#7) from feat/consolidation-scaling into main
CI / test-arm64 (push) Successful in 1m7s
CI / test (push) Successful in 5m28s
Reviewed-on: #7
2026-09-25 15:05:58 +00:00
osobh c0f704c381 Merge pull request 'clawhdf5-migrate writes real agent stores; knowledge-graph fix; dated benchmark re-run' (#6) from feat/migrate-and-benchmarks into main
CI / test-arm64 (push) Successful in 1m19s
CI / test (push) Successful in 5m34s
Reviewed-on: #6
2026-09-25 14:52:35 +00:00
osobh a7920bd4b3 Merge pull request 'Search options (source filters, re-ranking, confidence); float16 default' (#5) from feat/search-options into main
CI / test-arm64 (push) Successful in 1m8s
CI / test (push) Successful in 5m40s
Reviewed-on: #5
2026-09-25 12:44:15 +00:00
osobh 7e43b5366c Merge branch 'main' into feat/search-options
CI / test-arm64 (pull_request) Successful in 54s
CI / test (pull_request) Successful in 4m35s
2026-09-25 12:32:00 +00:00
osobh 73bb068264 Merge pull request 'Files open in h5py again; float16 embedding storage' (#4) from feat/float16-embeddings into main
CI / test-arm64 (push) Successful in 1m17s
CI / test (push) Successful in 5m10s
Reviewed-on: #4
2026-09-25 03:18:07 +00:00
9 changed files with 15 additions and 51 deletions
-8
View File
@@ -3,14 +3,6 @@
## Unreleased ## Unreleased
### Upgrade Notes ### Upgrade Notes
- **ZeroClaw does not use clawhdf5.** The project described itself as
ZeroClaw's memory backend ("imported as a `clawhdf5` Cargo feature"). Checked
against ZeroClaw v0.8.5 (the latest release), the `osobh/zeroclaw` fork and
their full history: no such feature or backend has ever existed. And
`clawhdf5-migrate`'s "ZeroClaw layout" (`memory_chunks`, `sessions`,
`entities`, `relations`) is not ZeroClaw's schema — ZeroClaw uses a single
`memories` table — so the migrator cannot read a ZeroClaw database. The
claims are withdrawn; the migrator's layout is documented as its own.
- **OpenClaw is not supported, and never was.** The docs described a - **OpenClaw is not supported, and never was.** The docs described a
"drop-in" OpenClaw memory backend enabled with `memory.backend = "clawhdf5"`. "drop-in" OpenClaw memory backend enabled with `memory.backend = "clawhdf5"`.
That config was never valid in any OpenClaw release (v2026.2–v2026.7 That config was never valid in any OpenClaw release (v2026.2–v2026.7
+3 -19
View File
@@ -1,7 +1,7 @@
# clawhdf5 # clawhdf5
## Purpose ## Purpose
Pure-Rust HDF5 format implementation with HNSW vector search, WAL-backed persistence, agent memory storage, and GPU-accelerated I/O. A standalone library. Its one verified consumer is ClawBrainHub (`.brain` files); no agent framework integrates it (OpenClaw and ZeroClaw claims were withdrawn on 2026-09-25 — neither was ever true). Pure-Rust HDF5 format implementation with HNSW vector search, WAL-backed persistence, agent memory storage, and GPU-accelerated I/O. Used by ZeroClaw as its persistent memory and knowledge graph backend.
## Architecture ## Architecture
@@ -109,15 +109,7 @@ Cargo workspace with 16 crates under `crates/` (plus `libaec-sys`, an internal F
- **OpenClaw is not supported** (decided 2026-09-25): clawhdf5 is not an - **OpenClaw is not supported** (decided 2026-09-25): clawhdf5 is not an
OpenClaw memory plugin and never was — the old `memory.backend = "clawhdf5"` OpenClaw memory plugin and never was — the old `memory.backend = "clawhdf5"`
config was never valid. Don't reintroduce OpenClaw claims; `docs/openclaw.md` config was never valid. Don't reintroduce OpenClaw claims; `docs/openclaw.md`
records what a real plugin would need. records what a real plugin would need. ZeroClaw is the integration target. Measure changes with
- **ZeroClaw does not use clawhdf5** (checked 2026-09-25 against upstream
v0.8.5 and the `osobh/zeroclaw` fork, and their full history): no
`clawhdf5` feature or backend exists; ZeroClaw's memory backends are
sqlite/lucid/postgres/qdrant/markdown/none behind its own `Memory` trait.
`clawhdf5-migrate`'s default SQLite layout (`memory_chunks`, `sessions`,
`entities`, `relations`) is not ZeroClaw's schema either (ZeroClaw's is a
`memories` table). Don't reintroduce integration claims without an
integration and a test against the real consumer. Measure changes with
`search_harness --options-study`. `search_harness --options-study`.
- `MemoryConfig::compression` is off by default; when on, embeddings are - `MemoryConfig::compression` is off by default; when on, embeddings are
deflate-compressed, or Zstd with the agent's `zstd` feature (links libzstd). deflate-compressed, or Zstd with the agent's `zstd` feature (links libzstd).
@@ -196,12 +188,4 @@ python -c "import clawhdf5; print(clawhdf5.__version__)"
``` ```
## Integration ## Integration
- **ClawBrainHub** (`clawverse/clawbrainhub` on git.redclaw.dev) is the one ZeroClaw imports this as a Cargo feature (`clawhdf5` feature flag) to persist agent memory with HNSW vector search for context retrieval.
verified consumer: `cbh-core` reads and writes `.brain` files through the
facade (`File`, `FileBuilder`, `AttrValue`, `Selection`), `cbh-scanner`
uses the facade, and `cbh-cli` uses `clawhdf5_agent::bm25::BM25Index`. It
depends on this repo by path (`../clawhdf5`), so it builds against whatever
is checked out — changes to those APIs reach it directly. Verified
2026-09-25 against main: builds, and its 204 tests pass.
- OpenClaw and ZeroClaw were both described as consumers; neither integrates
clawhdf5 (see Key Features and `docs/openclaw.md`).
+1 -3
View File
@@ -818,9 +818,7 @@ clawhdf5-migrate --sqlite old.db --hdf5 memory.h5 --agent-id my-agent --embedder
The output is an ordinary `clawhdf5-agent` store, written through the agent's The output is an ordinary `clawhdf5-agent` store, written through the agent's
own API: open it with `HDF5Memory::open` (or `clawhdf5-cli --path memory.h5 …`) own API: open it with `HDF5Memory::open` (or `clawhdf5-cli --path memory.h5 …`)
and search it straight away. The source must use the `memory_chunks` / `sessions` / `entities` / `relations` layout (names are and search it straight away. What carries over from the ZeroClaw tables:
configurable with `--*-table`); note that this is not ZeroClaw's schema, and
ZeroClaw does not use clawhdf5. What carries over:
| SQLite | Agent store | | SQLite | Agent store |
|--------|-------------| |--------|-------------|
+1 -1
View File
@@ -1,4 +1,4 @@
//! Agent memory stored in a single HDF5 file. //! ZeroClaw agent memory HDF5 backend.
//! //!
//! Provides persistent memory storage for AI agents using HDF5 files. //! Provides persistent memory storage for AI agents using HDF5 files.
//! All data is cached in-memory for fast access and flushed to disk //! All data is cached in-memory for fast access and flushed to disk
-3
View File
@@ -15,9 +15,6 @@ use crate::session::SessionCache;
use crate::wal::WalMark; use crate::wal::WalMark;
pub const SCHEMA_VERSION: &str = "1.0"; pub const SCHEMA_VERSION: &str = "1.0";
/// Writer-version tag stored in `/meta` as `edgehdf5_version`. Kept for file
/// compatibility; despite the name it has nothing to do with ZeroClaw, which
/// does not use clawhdf5.
pub const ZEROCLAW_VERSION: &str = "0.8.0"; pub const ZEROCLAW_VERSION: &str = "0.8.0";
/// `/meta` attributes holding the [`WalMark`] of the WAL prefix already folded /// `/meta` attributes holding the [`WalMark`] of the WAL prefix already folded
+2 -5
View File
@@ -3,11 +3,8 @@
[![crates.io](https://img.shields.io/crates/v/clawhdf5-migrate.svg)](https://crates.io/crates/clawhdf5-migrate) [![crates.io](https://img.shields.io/crates/v/clawhdf5-migrate.svg)](https://crates.io/crates/clawhdf5-migrate)
[![docs.rs](https://img.shields.io/docsrs/clawhdf5-migrate)](https://docs.rs/clawhdf5-migrate) [![docs.rs](https://img.shields.io/docsrs/clawhdf5-migrate)](https://docs.rs/clawhdf5-migrate)
CLI tool to migrate a SQLite agent-memory database in the `memory_chunks` / `sessions` / `entities` / `relations` layout (table and CLI tool to migrate SQLite agent memory databases (the ZeroClaw layout) to a
column names are configurable) to a [clawhdf5-agent](https://crates.io/crates/clawhdf5-agent) store.
[clawhdf5-agent](https://crates.io/crates/clawhdf5-agent) store. This is **not**
ZeroClaw's schema — ZeroClaw keeps memories in a single `memories` table and
does not use clawhdf5.
The output is written through `clawhdf5-agent`'s own API, so it opens with The output is written through `clawhdf5-agent`'s own API, so it opens with
`HDF5Memory::open` and is searchable immediately: memory records, sessions and `HDF5Memory::open` and is searchable immediately: memory records, sessions and
+2 -3
View File
@@ -12,8 +12,7 @@ use validate::ValidationSummary;
type BoxErr = Box<dyn std::error::Error>; type BoxErr = Box<dyn std::error::Error>;
/// Migrate agent memory from SQLite (memory_chunks / sessions / entities / /// Migrate ZeroClaw agent memory from SQLite to a clawhdf5-agent store.
/// relations tables) to a clawhdf5-agent store.
/// ///
/// The output is an ordinary agent store: open it with /// The output is an ordinary agent store: open it with
/// `HDF5Memory::open` (or `clawhdf5-cli --path <store> ...`). /// `HDF5Memory::open` (or `clawhdf5-cli --path <store> ...`).
@@ -271,7 +270,7 @@ mod tests {
use std::path::PathBuf; use std::path::PathBuf;
use tempfile::TempDir; use tempfile::TempDir;
/// Create a test SQLite database with the default migration layout. /// Create a test SQLite database with the ZeroClaw schema.
fn create_test_db(dir: &TempDir) -> String { fn create_test_db(dir: &TempDir) -> String {
let db_path = dir.path().join("test.db"); let db_path = dir.path().join("test.db");
let path_str = db_path.to_str().unwrap().to_string(); let path_str = db_path.to_str().unwrap().to_string();
+3 -5
View File
@@ -43,7 +43,7 @@ pub struct Relation {
pub timestamp: f64, pub timestamp: f64,
} }
/// All data read from a source SQLite database. /// All data read from a ZeroClaw SQLite database.
#[derive(Debug)] #[derive(Debug)]
pub struct SqliteData { pub struct SqliteData {
pub chunks: Vec<MemoryChunk>, pub chunks: Vec<MemoryChunk>,
@@ -63,9 +63,7 @@ pub struct TableSchema {
/// Configurable mapping from a SQLite layout to the migration's data model. /// Configurable mapping from a SQLite layout to the migration's data model.
/// ///
/// Defaults to the `memory_chunks` / `sessions` / `entities` / `relations` /// Defaults to the ZeroClaw schema; the CLI can override the table names so the
/// layout (not ZeroClaw's schema, despite what earlier docs said); the CLI can
/// override the table names so the
/// tool can migrate databases whose tables are named differently. Column names /// tool can migrate databases whose tables are named differently. Column names
/// (and order) are part of the config too, so a library caller can remap them. /// (and order) are part of the config too, so a library caller can remap them.
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
@@ -192,7 +190,7 @@ fn blob_to_f32(blob: &[u8]) -> Vec<f32> {
.collect() .collect()
} }
/// Read all data from a source SQLite database. /// Read all data from a ZeroClaw SQLite database.
/// ///
/// If `skip_deleted` is true, rows with `deleted=1` are excluded from chunks. /// If `skip_deleted` is true, rows with `deleted=1` are excluded from chunks.
/// If `embedding_dim` is `None`, auto-detect from the first row (0 when there /// If `embedding_dim` is `None`, auto-detect from the first row (0 when there
+3 -4
View File
@@ -9,10 +9,9 @@ keys, and since v2026.8.1 ("OpenClaw 2.0") the key no longer exists. A Gateway
given that config refuses to start. No plugin was ever built or tested against given that config refuses to start. No plugin was ever built or tested against
OpenClaw, and the `@redclaw/clawhdf5` npm package was never published. OpenClaw, and the `@redclaw/clawhdf5` npm package was never published.
As of 2026-09-25 we are not pursuing an OpenClaw plugin, and clawhdf5 has no As of 2026-09-25 we are not pursuing an OpenClaw plugin; the maintained
framework integration at all (ZeroClaw, also named as a consumer in older integration target is ZeroClaw. This page records what a plugin would need,
docs, does not use it either). This page records what an OpenClaw plugin would for when that changes.
need, for when that changes.
## What OpenClaw expects today (v2026.9.6) ## What OpenClaw expects today (v2026.9.6)