@metaharness/kernel 0.1.3 → 0.1.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/README.md +60 -2
- package/dist/memory-rvf.d.ts +63 -14
- package/dist/memory-rvf.d.ts.map +1 -1
- package/dist/memory-rvf.js +191 -51
- package/dist/memory-rvf.js.map +1 -1
- package/dist/session.d.ts +8 -1
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +40 -11
- package/dist/session.js.map +1 -1
- package/package.json +27 -11
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ A Rust kernel compiled to two npm-shippable targets:
|
|
|
9
9
|
- **WebAssembly** (primary distribution — runs on Node, browser, Cloudflare Workers, Deno, Bun, edge)
|
|
10
10
|
- **NAPI-RS native** (per-platform `.node` binaries — escape hatch for Node hot paths)
|
|
11
11
|
|
|
12
|
-
At load time, `loadKernel()` prefers
|
|
12
|
+
At load time, `loadKernel()` prefers an installed per-platform native package, then wasm, then the dependency-free JavaScript backend.
|
|
13
13
|
|
|
14
14
|
## Install
|
|
15
15
|
|
|
@@ -17,7 +17,7 @@ At load time, `loadKernel()` prefers the per-platform native package; falls back
|
|
|
17
17
|
npm install @metaharness/kernel
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
The native packages (`@metaharness/kernel-darwin-arm64`, `-linux-x64-gnu`, etc.) are
|
|
20
|
+
The native packages (`@metaharness/kernel-darwin-arm64`, `-linux-x64-gnu`, etc.) are optional peers. They are not yet available from the public npm registry (checked 2026-10-27), so they are not installed automatically. The native loader still discovers a compatible package when explicitly installed; otherwise wasm or JavaScript is used. Restore automatic native installation only after the platform packages are published and clean npm 10/11 installs are verified. This source change does not alter already-published kernel versions.
|
|
21
21
|
|
|
22
22
|
## Usage
|
|
23
23
|
|
|
@@ -49,6 +49,64 @@ const ranked = await rankWithDecay(hits, {
|
|
|
49
49
|
|
|
50
50
|
Wraps `@ruvector/emergent-time` for HNSW decay scoring.
|
|
51
51
|
|
|
52
|
+
### RVF memory backend (optional, persistent)
|
|
53
|
+
|
|
54
|
+
`@metaharness/kernel/memory-rvf` stores memory vectors on disk in
|
|
55
|
+
[`@ruvector/rvf`](https://www.npmjs.com/package/@ruvector/rvf) files and searches
|
|
56
|
+
them with RVF's HNSW index. RVF is an optional peer dependency. Install it to
|
|
57
|
+
enable the backend:
|
|
58
|
+
|
|
59
|
+
```sh
|
|
60
|
+
npm install @metaharness/kernel @ruvector/rvf
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
```js
|
|
64
|
+
import { createRvfBackend } from '@metaharness/kernel/memory-rvf';
|
|
65
|
+
|
|
66
|
+
const mem = await createRvfBackend({ dimensions: 384, dir: './.harness/memory' });
|
|
67
|
+
if (!mem) {
|
|
68
|
+
// @ruvector/rvf is not installed: keep using the default in-process memory.
|
|
69
|
+
} else {
|
|
70
|
+
await mem.insertBatch([{ id: 'note-1', embedding }], 'notes'); // re-insert = replace
|
|
71
|
+
const hits = await mem.search(query, 10, 'notes'); // [{ id, score, distance, namespace }]
|
|
72
|
+
const exact = await mem.search(query, 10, 'notes', { exact: true }); // brute force
|
|
73
|
+
await mem.delete(['note-1'], 'notes');
|
|
74
|
+
await mem.close(); // releases the file lock; reopen the same dir later to continue
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
- Each namespace is one file, `<dir>/<namespace>.rvf`, plus its `.rvf.idmap.json`
|
|
79
|
+
id map. Keep the two together. Writes are committed when their promise
|
|
80
|
+
resolves. `flush()` is a no-op.
|
|
81
|
+
- `createRvfBackend()` returns `null` only when `@ruvector/rvf` is not installed.
|
|
82
|
+
Errors after that are thrown, not swallowed: a missing native binding, a
|
|
83
|
+
dimension mismatch, or a second writer on the same file (RVF holds a
|
|
84
|
+
single-writer lock until `close()`).
|
|
85
|
+
- With the default `cosine` metric, `score` is cosine similarity
|
|
86
|
+
(`1 - distance`). With `l2` it is `1 / (1 + distance)`, which ranks the same
|
|
87
|
+
way but is not a cosine similarity.
|
|
88
|
+
- Not supported: RVF has no per-vector metadata yet (ruvector issue #704), so
|
|
89
|
+
hits carry no `storedAt`, and `rankWithDecay` treats them all as age 0.
|
|
90
|
+
`{ exact: true }` needs `@ruvector/rvf` 0.4.6 or later. Earlier versions ignore it.
|
|
91
|
+
- Supported range: `@ruvector/rvf` `^0.3.0 || ^0.4.6`. On 0.2.3, deletes did not
|
|
92
|
+
survive a reopen. In the 0.4 line the floor is 0.4.6, which adds `forceExact` and the
|
|
93
|
+
filtered-HNSW recall fallback.
|
|
94
|
+
|
|
95
|
+
Measured with `bench/memory-rvf-bench.mjs` on `@ruvector/rvf` 0.4.6 and Node 22.
|
|
96
|
+
The data was seeded uniform random vectors with cosine distance. Each run used
|
|
97
|
+
200 queries at k = 10, scored against brute force after closing and reopening the
|
|
98
|
+
store. The figures are medians of 5 runs (10k) and 3 runs (1k) on a shared,
|
|
99
|
+
heavily loaded host, so the latencies are indicative only.
|
|
100
|
+
|
|
101
|
+
| Set | recall@10 (HNSW, unfiltered, efSearch 100) | recall p50 / p95 | exact scan p50 | `insert()` p50 / p95 | `insertBatch` per vector |
|
|
102
|
+
|---|---|---|---|---|---|
|
|
103
|
+
| 1k × 128 | 1.000 | 0.11 ms / – | – | – | – |
|
|
104
|
+
| 10k × 128 | 0.972 | 1.26 ms / 2.09 ms | 0.74 ms (recall 1.0) | 5.2 ms / 17.1 ms | 0.031 ms |
|
|
105
|
+
| 10k × 384 | 0.8745 | – | – | – | – |
|
|
106
|
+
|
|
107
|
+
At this scale the exact scan was as fast as HNSW or faster. Each `insert()` is
|
|
108
|
+
its own durable commit, so batch your writes.
|
|
109
|
+
|
|
52
110
|
## Subsystems
|
|
53
111
|
|
|
54
112
|
| Subsystem | What it does |
|
package/dist/memory-rvf.d.ts
CHANGED
|
@@ -1,22 +1,71 @@
|
|
|
1
1
|
import type { MemoryHit } from './memory.js';
|
|
2
|
+
export type RvfMetric = 'cosine' | 'l2';
|
|
3
|
+
/** A memory hit from the RVF backend; carries RVF's raw distance as well. */
|
|
4
|
+
export interface RvfMemoryHit extends MemoryHit {
|
|
5
|
+
/**
|
|
6
|
+
* RVF distance (lower = closer). Cosine: `1 - cos_sim`. L2: squared
|
|
7
|
+
* Euclidean distance.
|
|
8
|
+
*/
|
|
9
|
+
distance: number;
|
|
10
|
+
}
|
|
11
|
+
export interface RvfSearchOptions {
|
|
12
|
+
/** Exact brute-force scan instead of HNSW (@ruvector/rvf >= 0.4.6; ignored earlier). */
|
|
13
|
+
exact?: boolean;
|
|
14
|
+
/** HNSW ef_search beam width. RVF default: 100. */
|
|
15
|
+
efSearch?: number;
|
|
16
|
+
}
|
|
17
|
+
export interface RvfBackendOptions {
|
|
18
|
+
dimensions: number;
|
|
19
|
+
/**
|
|
20
|
+
* Distance metric. Default `'cosine'`, where `score = 1 - distance` is the
|
|
21
|
+
* cosine similarity. For `'l2'`, `score = 1 / (1 + distance)`: a monotone
|
|
22
|
+
* similarity in (0, 1], NOT a cosine similarity. The metric is fixed when a
|
|
23
|
+
* namespace file is created; reopening must use the same metric.
|
|
24
|
+
*/
|
|
25
|
+
metric?: RvfMetric;
|
|
26
|
+
/**
|
|
27
|
+
* Directory holding one `.rvf` file per namespace. Created if missing.
|
|
28
|
+
* When omitted, a fresh temporary directory is used and deleted on
|
|
29
|
+
* `close()` — i.e. nothing persists.
|
|
30
|
+
*/
|
|
31
|
+
dir?: string;
|
|
32
|
+
/** HNSW M (max edges per node per layer). RVF default: 16. */
|
|
33
|
+
m?: number;
|
|
34
|
+
/** HNSW ef_construction. RVF default: 200. */
|
|
35
|
+
efConstruction?: number;
|
|
36
|
+
}
|
|
37
|
+
export interface RvfBackendEntry {
|
|
38
|
+
id: string;
|
|
39
|
+
embedding: number[] | Float32Array;
|
|
40
|
+
}
|
|
2
41
|
export interface RvfBackend {
|
|
3
|
-
/**
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
/**
|
|
8
|
-
|
|
9
|
-
/**
|
|
42
|
+
/** Absolute directory holding the namespace files. */
|
|
43
|
+
readonly dir: string;
|
|
44
|
+
/** False when `dir` was not given (temporary directory, removed on close). */
|
|
45
|
+
readonly persistent: boolean;
|
|
46
|
+
/** Insert (or replace) one vector. */
|
|
47
|
+
insert(id: string, embedding: number[] | Float32Array, namespace?: string): Promise<void>;
|
|
48
|
+
/** Insert (or replace) many vectors in one RVF commit. */
|
|
49
|
+
insertBatch(entries: RvfBackendEntry[], namespace?: string): Promise<void>;
|
|
50
|
+
/** Top-k nearest neighbours, best first. Unknown namespace → []. */
|
|
51
|
+
search(embedding: number[] | Float32Array, k: number, namespace?: string, opts?: RvfSearchOptions): Promise<RvfMemoryHit[]>;
|
|
52
|
+
/** Delete ids; returns how many were live and removed. */
|
|
53
|
+
delete(ids: string[], namespace?: string): Promise<number>;
|
|
54
|
+
/** Live vectors in one namespace, or across all namespaces on disk. */
|
|
55
|
+
size(namespace?: string): Promise<number>;
|
|
56
|
+
/** Namespaces that exist on disk. */
|
|
57
|
+
namespaces(): string[];
|
|
58
|
+
/** No-op kept for the backend contract: writes are committed per call. */
|
|
10
59
|
flush(): Promise<void>;
|
|
60
|
+
/** Close every open namespace file and release the writer locks. */
|
|
61
|
+
close(): Promise<void>;
|
|
11
62
|
}
|
|
12
|
-
/** Is
|
|
63
|
+
/** Is a usable @ruvector/rvf (with `RvfDatabase`) importable in this process? */
|
|
13
64
|
export declare function isRvfAvailable(): Promise<boolean>;
|
|
14
65
|
/**
|
|
15
|
-
* Create an RVF-backed backend. Returns null
|
|
16
|
-
*
|
|
66
|
+
* Create an RVF-backed memory backend. Returns null only when
|
|
67
|
+
* @ruvector/rvf is not installed (or has no `RvfDatabase`), so the caller
|
|
68
|
+
* can fall back to its default memory. Namespace files are opened lazily.
|
|
17
69
|
*/
|
|
18
|
-
export declare function createRvfBackend(opts:
|
|
19
|
-
dimensions: number;
|
|
20
|
-
metric?: 'cosine' | 'l2';
|
|
21
|
-
}): Promise<RvfBackend | null>;
|
|
70
|
+
export declare function createRvfBackend(opts: RvfBackendOptions): Promise<RvfBackend | null>;
|
|
22
71
|
//# sourceMappingURL=memory-rvf.d.ts.map
|
package/dist/memory-rvf.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-rvf.d.ts","sourceRoot":"","sources":["../src/memory-rvf.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"memory-rvf.d.ts","sourceRoot":"","sources":["../src/memory-rvf.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;AAExC,6EAA6E;AAC7E,MAAM,WAAW,YAAa,SAAQ,SAAS;IAC7C;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,wFAAwF;IACxF,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mDAAmD;IACnD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB;;;;;OAKG;IACH,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,8CAA8C;IAC9C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,sDAAsD;IACtD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8EAA8E;IAC9E,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,sCAAsC;IACtC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1F,0DAA0D;IAC1D,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3E,oEAAoE;IACpE,MAAM,CACJ,SAAS,EAAE,MAAM,EAAE,GAAG,YAAY,EAClC,CAAC,EAAE,MAAM,EACT,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,gBAAgB,GACtB,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAC3B,0DAA0D;IAC1D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3D,uEAAuE;IACvE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C,qCAAqC;IACrC,UAAU,IAAI,MAAM,EAAE,CAAC;IACvB,0EAA0E;IAC1E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,oEAAoE;IACpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAiDD,iFAAiF;AACjF,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC,CAEvD;AAyBD;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA+H1F"}
|
package/dist/memory-rvf.js
CHANGED
|
@@ -1,86 +1,226 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
//
|
|
3
|
-
// memory-rvf —
|
|
3
|
+
// memory-rvf — persistent kernel memory on @ruvector/rvf
|
|
4
4
|
// (https://www.npmjs.com/package/@ruvector/rvf).
|
|
5
5
|
//
|
|
6
|
-
// RVF
|
|
7
|
-
//
|
|
8
|
-
//
|
|
9
|
-
// AND wants RVF-backed memory storage, the kernel uses it; otherwise the
|
|
10
|
-
// memory subsystem keeps using its plain in-process HNSW.
|
|
6
|
+
// RVF ("RuVector Format") is an HNSW-indexed, single-file vector store with a
|
|
7
|
+
// native Node backend (@ruvector/rvf-node). This module maps the kernel's
|
|
8
|
+
// memory backend contract onto `RvfDatabase`:
|
|
11
9
|
//
|
|
12
|
-
//
|
|
13
|
-
//
|
|
14
|
-
//
|
|
15
|
-
//
|
|
10
|
+
// kernel @ruvector/rvf
|
|
11
|
+
// ------------------------ -------------------------------------------
|
|
12
|
+
// namespace one `<namespace>.rvf` file under `dir`
|
|
13
|
+
// (+ its `.rvf.idmap.json` string-id sidecar)
|
|
14
|
+
// insert / insertBatch RvfDatabase.ingestBatch (re-insert = upsert)
|
|
15
|
+
// search RvfDatabase.query(vec, k, { efSearch,
|
|
16
|
+
// forceExact })
|
|
17
|
+
// delete RvfDatabase.delete(ids)
|
|
18
|
+
// size RvfDatabase.status().totalVectors
|
|
19
|
+
// flush no-op: every ingest/delete is committed to
|
|
20
|
+
// the file when its promise resolves
|
|
21
|
+
// close RvfDatabase.close() (releases the writer lock)
|
|
22
|
+
//
|
|
23
|
+
// What RVF cannot do, and how this module handles it:
|
|
24
|
+
// - Per-vector metadata is not supported by @ruvector/rvf (issue #704:
|
|
25
|
+
// `ingestBatch` throws MetadataNotSupported). So `storedAt` is NOT
|
|
26
|
+
// persisted and hits come back without it; `rankWithDecay` then treats
|
|
27
|
+
// every hit as age 0, i.e. decay does not reorder RVF hits. Namespaces are
|
|
28
|
+
// separate files for the same reason (there is no metadata to filter on).
|
|
29
|
+
// - `forceExact` (exact brute-force search) is passed through by
|
|
30
|
+
// @ruvector/rvf >= 0.4.6 (rvf-node >= 0.4.1). Earlier versions ignore it
|
|
31
|
+
// and search stays on HNSW.
|
|
32
|
+
// - Each `.rvf` file has a single-writer lock. A second backend (in this or
|
|
33
|
+
// another process) opening the same namespace for writing fails with
|
|
34
|
+
// RVF LockHeld. Call `close()` to release it.
|
|
35
|
+
//
|
|
36
|
+
// RVF is an OPTIONAL peer dependency (^0.3.0 || ^0.4.6). When it is not
|
|
37
|
+
// installed, `createRvfBackend()` returns null and the caller keeps its
|
|
38
|
+
// default in-process memory. When it IS installed but fails at use time
|
|
39
|
+
// (native binding missing, lock held, dimension mismatch), the error is
|
|
40
|
+
// thrown rather than silently swallowed.
|
|
41
|
+
import { existsSync, mkdirSync, mkdtempSync, readdirSync, rmSync } from 'node:fs';
|
|
42
|
+
import { tmpdir } from 'node:os';
|
|
43
|
+
import { join, resolve } from 'node:path';
|
|
16
44
|
let _rvf;
|
|
17
45
|
async function loadRvf() {
|
|
18
46
|
if (_rvf !== undefined)
|
|
19
47
|
return _rvf;
|
|
20
48
|
try {
|
|
21
|
-
// @ts-ignore — @ruvector/rvf is
|
|
22
|
-
//
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
49
|
+
// @ts-ignore — @ruvector/rvf is an OPTIONAL peer dependency, so a fresh
|
|
50
|
+
// install without it must still type-check and build.
|
|
51
|
+
const mod = (await import('@ruvector/rvf'));
|
|
52
|
+
const db = mod.RvfDatabase ?? mod.default?.RvfDatabase;
|
|
53
|
+
_rvf = db && typeof db.create === 'function' && typeof db.open === 'function' ? db : null;
|
|
26
54
|
}
|
|
27
55
|
catch {
|
|
28
56
|
_rvf = null;
|
|
29
|
-
return null;
|
|
30
57
|
}
|
|
58
|
+
return _rvf;
|
|
31
59
|
}
|
|
32
|
-
/** Is
|
|
60
|
+
/** Is a usable @ruvector/rvf (with `RvfDatabase`) importable in this process? */
|
|
33
61
|
export async function isRvfAvailable() {
|
|
34
62
|
return (await loadRvf()) !== null;
|
|
35
63
|
}
|
|
64
|
+
const NAMESPACE_RE = /^[A-Za-z0-9_-][A-Za-z0-9._-]{0,127}$/;
|
|
65
|
+
const FILE_SUFFIX = '.rvf';
|
|
66
|
+
function checkNamespace(ns) {
|
|
67
|
+
if (typeof ns !== 'string' || !NAMESPACE_RE.test(ns)) {
|
|
68
|
+
throw new Error(`memory-rvf: invalid namespace ${JSON.stringify(ns)} — use 1-128 chars of [A-Za-z0-9._-], not starting with '.'`);
|
|
69
|
+
}
|
|
70
|
+
return ns;
|
|
71
|
+
}
|
|
72
|
+
function toVector(embedding, dimensions) {
|
|
73
|
+
if (!embedding || embedding.length !== dimensions) {
|
|
74
|
+
throw new Error(`memory-rvf: embedding has ${embedding?.length} dims, backend expects ${dimensions}`);
|
|
75
|
+
}
|
|
76
|
+
const v = embedding instanceof Float32Array ? embedding : Float32Array.from(embedding);
|
|
77
|
+
for (let i = 0; i < v.length; i++) {
|
|
78
|
+
if (!Number.isFinite(v[i]))
|
|
79
|
+
throw new Error(`memory-rvf: embedding[${i}] is not finite`);
|
|
80
|
+
}
|
|
81
|
+
return v;
|
|
82
|
+
}
|
|
36
83
|
/**
|
|
37
|
-
* Create an RVF-backed backend. Returns null
|
|
38
|
-
*
|
|
84
|
+
* Create an RVF-backed memory backend. Returns null only when
|
|
85
|
+
* @ruvector/rvf is not installed (or has no `RvfDatabase`), so the caller
|
|
86
|
+
* can fall back to its default memory. Namespace files are opened lazily.
|
|
39
87
|
*/
|
|
40
88
|
export async function createRvfBackend(opts) {
|
|
41
|
-
const
|
|
42
|
-
if (!
|
|
43
|
-
return null;
|
|
44
|
-
const createIndex = mod.createIndex ?? mod.default?.createIndex;
|
|
45
|
-
if (typeof createIndex !== 'function')
|
|
89
|
+
const Rvf = await loadRvf();
|
|
90
|
+
if (!Rvf)
|
|
46
91
|
return null;
|
|
47
|
-
const
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
92
|
+
const dimensions = opts.dimensions;
|
|
93
|
+
if (!Number.isInteger(dimensions) || dimensions <= 0) {
|
|
94
|
+
throw new Error(`memory-rvf: dimensions must be a positive integer, got ${dimensions}`);
|
|
95
|
+
}
|
|
96
|
+
const metric = opts.metric ?? 'cosine';
|
|
97
|
+
if (metric !== 'cosine' && metric !== 'l2') {
|
|
98
|
+
throw new Error(`memory-rvf: unsupported metric ${JSON.stringify(metric)}`);
|
|
99
|
+
}
|
|
100
|
+
const persistent = typeof opts.dir === 'string' && opts.dir.length > 0;
|
|
101
|
+
const dir = persistent ? resolve(opts.dir) : mkdtempSync(join(tmpdir(), 'metaharness-rvf-'));
|
|
102
|
+
mkdirSync(dir, { recursive: true });
|
|
103
|
+
const toScore = metric === 'cosine' ? (d) => 1 - d : (d) => 1 / (1 + d);
|
|
104
|
+
const pathOf = (ns) => join(dir, checkNamespace(ns) + FILE_SUFFIX);
|
|
105
|
+
// Cache the promise, not the value, so concurrent first use of a namespace
|
|
106
|
+
// opens/creates the file exactly once.
|
|
107
|
+
const dbs = new Map();
|
|
108
|
+
let closed = false;
|
|
109
|
+
const openOrCreate = async (ns) => {
|
|
110
|
+
const p = pathOf(ns);
|
|
111
|
+
if (existsSync(p)) {
|
|
112
|
+
const db = await Rvf.open(p);
|
|
113
|
+
const dim = await db.dimension();
|
|
114
|
+
if (dim !== dimensions) {
|
|
115
|
+
await db.close();
|
|
116
|
+
throw new Error(`memory-rvf: ${p} has ${dim} dims, backend expects ${dimensions}`);
|
|
117
|
+
}
|
|
118
|
+
return db;
|
|
119
|
+
}
|
|
120
|
+
const createOpts = {
|
|
121
|
+
dimensions,
|
|
122
|
+
metric,
|
|
123
|
+
};
|
|
124
|
+
if (opts.m !== undefined)
|
|
125
|
+
createOpts.m = opts.m;
|
|
126
|
+
if (opts.efConstruction !== undefined)
|
|
127
|
+
createOpts.efConstruction = opts.efConstruction;
|
|
128
|
+
return Rvf.create(p, createOpts);
|
|
129
|
+
};
|
|
130
|
+
/** Returns the open db, or null when `create` is false and no file exists. */
|
|
131
|
+
const get = async (ns, create) => {
|
|
132
|
+
if (closed)
|
|
133
|
+
throw new Error('memory-rvf: backend is closed');
|
|
134
|
+
const cached = dbs.get(ns);
|
|
135
|
+
if (cached)
|
|
136
|
+
return cached;
|
|
137
|
+
if (!create && !existsSync(pathOf(ns)))
|
|
138
|
+
return null;
|
|
139
|
+
const pending = openOrCreate(ns);
|
|
140
|
+
dbs.set(ns, pending);
|
|
141
|
+
pending.catch(() => dbs.delete(ns));
|
|
142
|
+
return pending;
|
|
143
|
+
};
|
|
144
|
+
const listNamespaces = () => readdirSync(dir)
|
|
145
|
+
.filter(f => f.endsWith(FILE_SUFFIX))
|
|
146
|
+
.map(f => f.slice(0, -FILE_SUFFIX.length))
|
|
147
|
+
.filter(ns => NAMESPACE_RE.test(ns))
|
|
148
|
+
.sort();
|
|
149
|
+
const insertBatch = async (entries, namespace = 'default') => {
|
|
150
|
+
if (entries.length === 0)
|
|
151
|
+
return;
|
|
152
|
+
const rows = entries.map(e => {
|
|
153
|
+
if (typeof e.id !== 'string' || e.id.length === 0)
|
|
154
|
+
throw new Error('memory-rvf: id must be a non-empty string');
|
|
155
|
+
return { id: e.id, vector: toVector(e.embedding, dimensions) };
|
|
156
|
+
});
|
|
157
|
+
const db = (await get(namespace, true));
|
|
158
|
+
const res = await db.ingestBatch(rows);
|
|
159
|
+
if (res.rejected > 0) {
|
|
160
|
+
throw new Error(`memory-rvf: RVF rejected ${res.rejected} of ${rows.length} vectors in namespace ${namespace}`);
|
|
53
161
|
}
|
|
54
|
-
return idx;
|
|
55
162
|
};
|
|
56
163
|
return {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
164
|
+
dir,
|
|
165
|
+
persistent,
|
|
166
|
+
insert(id, embedding, namespace = 'default') {
|
|
167
|
+
return insertBatch([{ id, embedding }], namespace);
|
|
168
|
+
},
|
|
169
|
+
insertBatch,
|
|
170
|
+
async search(embedding, k, namespace = 'default', so = {}) {
|
|
171
|
+
if (!Number.isInteger(k) || k <= 0)
|
|
172
|
+
throw new Error(`memory-rvf: k must be a positive integer, got ${k}`);
|
|
173
|
+
const vec = toVector(embedding, dimensions);
|
|
174
|
+
const db = await get(namespace, false);
|
|
175
|
+
if (!db)
|
|
176
|
+
return [];
|
|
177
|
+
const q = {};
|
|
178
|
+
if (so.efSearch !== undefined)
|
|
179
|
+
q.efSearch = so.efSearch;
|
|
180
|
+
if (so.exact)
|
|
181
|
+
q.forceExact = true;
|
|
182
|
+
const raw = await db.query(vec, k, q);
|
|
183
|
+
return raw.map(r => {
|
|
184
|
+
const score = toScore(r.distance);
|
|
185
|
+
// storedAt is absent: RVF has no per-vector metadata (rvf #704).
|
|
186
|
+
return { id: r.id, score, decayedScore: score, distance: r.distance, namespace };
|
|
187
|
+
});
|
|
60
188
|
},
|
|
61
|
-
async
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
namespace,
|
|
69
|
-
}));
|
|
189
|
+
async delete(ids, namespace = 'default') {
|
|
190
|
+
if (ids.length === 0)
|
|
191
|
+
return 0;
|
|
192
|
+
const db = await get(namespace, false);
|
|
193
|
+
if (!db)
|
|
194
|
+
return 0;
|
|
195
|
+
return (await db.delete(ids)).deleted;
|
|
70
196
|
},
|
|
71
|
-
async size() {
|
|
197
|
+
async size(namespace) {
|
|
198
|
+
const targets = namespace === undefined ? listNamespaces() : [namespace];
|
|
72
199
|
let total = 0;
|
|
73
|
-
for (const
|
|
74
|
-
const
|
|
75
|
-
|
|
200
|
+
for (const ns of targets) {
|
|
201
|
+
const db = await get(ns, false);
|
|
202
|
+
if (db)
|
|
203
|
+
total += (await db.status()).totalVectors;
|
|
76
204
|
}
|
|
77
205
|
return total;
|
|
78
206
|
},
|
|
207
|
+
namespaces: listNamespaces,
|
|
79
208
|
async flush() {
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
209
|
+
if (closed)
|
|
210
|
+
throw new Error('memory-rvf: backend is closed');
|
|
211
|
+
await Promise.allSettled([...dbs.values()]);
|
|
212
|
+
},
|
|
213
|
+
async close() {
|
|
214
|
+
if (closed)
|
|
215
|
+
return;
|
|
216
|
+
closed = true;
|
|
217
|
+
const open = await Promise.allSettled([...dbs.values()]);
|
|
218
|
+
dbs.clear();
|
|
219
|
+
for (const r of open)
|
|
220
|
+
if (r.status === 'fulfilled')
|
|
221
|
+
await r.value.close();
|
|
222
|
+
if (!persistent)
|
|
223
|
+
rmSync(dir, { recursive: true, force: true });
|
|
84
224
|
},
|
|
85
225
|
};
|
|
86
226
|
}
|
package/dist/memory-rvf.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-rvf.js","sourceRoot":"","sources":["../src/memory-rvf.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,EAAE;AACF,
|
|
1
|
+
{"version":3,"file":"memory-rvf.js","sourceRoot":"","sources":["../src/memory-rvf.ts"],"names":[],"mappings":"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"}
|
package/dist/session.d.ts
CHANGED
|
@@ -42,13 +42,20 @@ export declare class SessionLog {
|
|
|
42
42
|
*/
|
|
43
43
|
static open(path: string, branch?: string): Promise<SessionLog>;
|
|
44
44
|
/** Append an event on the active branch, assigning the next monotonic
|
|
45
|
-
* index. The first event of a forked branch carries the fork's parent ref.
|
|
45
|
+
* index. The first event of a forked branch carries the fork's parent ref.
|
|
46
|
+
* Safe to call without awaiting the previous call: concurrent appends on
|
|
47
|
+
* this instance (or a fork() sibling sharing this state) are serialized
|
|
48
|
+
* via `enqueue` and assigned distinct, monotonic indices in call order. */
|
|
46
49
|
append(kind: string, payload: unknown, opts?: {
|
|
47
50
|
parent?: {
|
|
48
51
|
branch: string;
|
|
49
52
|
index: number;
|
|
50
53
|
};
|
|
51
54
|
}): Promise<SessionEvent>;
|
|
55
|
+
/** The unserialized body of `append()` — only ever runs for one caller at
|
|
56
|
+
* a time per `LogState`, via `enqueue`. Not called directly outside this
|
|
57
|
+
* file; `fork()` also runs its own synthetic first event through this. */
|
|
58
|
+
private appendLocked;
|
|
52
59
|
/**
|
|
53
60
|
* Fork at `atIndex` on THIS instance's active branch: returns a SessionLog
|
|
54
61
|
* over the same file (and shared state) whose active branch is `newBranch`.
|
package/dist/session.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;oDAOoD;AACpD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAQhD;
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AAmCA,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,MAAM,EAAE,MAAM,CAAC;IACf,yEAAyE;IACzE,MAAM,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;;oDAOoD;AACpD,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAQhD;AAkLD;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,KAAK,CAAW;IACxB,8CAA8C;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBAEZ,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS;IAYzC,0EAA0E;IAC1E,OAAO,CAAC,MAAM,CAAC,IAAI;IAMnB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;OAIG;WACU,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IASrE;;;;+EAI2E;IACrE,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,OAAO,EAChB,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,GACpD,OAAO,CAAC,YAAY,CAAC;IAIxB;;8EAE0E;YAC5D,YAAY;IAkC1B;;;;;;OAMG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAsBnE;sEACkE;IAClE,OAAO,CAAC,OAAO;IAYf;;;;;OAKG;IACH,SAAS,CAAC,MAAM,GAAE,MAAoB,GAAG,MAAM;IAU/C,0EAA0E;IAC1E,MAAM,CAAC,MAAM,GAAE,MAAoB,GAAG;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE;IAI/E;;wDAEoD;IAC9C,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;CAKpC"}
|
package/dist/session.js
CHANGED
|
@@ -88,6 +88,17 @@ function serializeEvent(e) {
|
|
|
88
88
|
payload: e.payload,
|
|
89
89
|
});
|
|
90
90
|
}
|
|
91
|
+
/** Run `op` after every previously enqueued operation on `state` has
|
|
92
|
+
* settled (success or failure), and chain the queue forward the same way —
|
|
93
|
+
* this is the TOCTOU fix: the read-index→serialize→write→state-mutate
|
|
94
|
+
* sequence in `appendLocked` only ever runs for one caller at a time per
|
|
95
|
+
* `LogState`, in call order, closing the race `append()`/`fork()` had when
|
|
96
|
+
* two unawaited calls both read the same pre-increment index. */
|
|
97
|
+
function enqueue(state, op) {
|
|
98
|
+
const result = state.queue.then(op, op);
|
|
99
|
+
state.queue = result.then(() => undefined, () => undefined);
|
|
100
|
+
return result;
|
|
101
|
+
}
|
|
91
102
|
/** Parse + validate a JSONL log; returns either the reconstructed state or
|
|
92
103
|
* the list of 'session: '-prefixed errors (with 1-based line numbers).
|
|
93
104
|
*
|
|
@@ -102,6 +113,7 @@ function parseLog(path, raw) {
|
|
|
102
113
|
nextIndex: new Map(),
|
|
103
114
|
branchParent: new Map(),
|
|
104
115
|
rootBranch: '',
|
|
116
|
+
queue: Promise.resolve(),
|
|
105
117
|
};
|
|
106
118
|
const errors = [];
|
|
107
119
|
const seen = new Set();
|
|
@@ -196,6 +208,7 @@ export class SessionLog {
|
|
|
196
208
|
nextIndex: new Map(),
|
|
197
209
|
branchParent: new Map(),
|
|
198
210
|
rootBranch: branch,
|
|
211
|
+
queue: Promise.resolve(),
|
|
199
212
|
};
|
|
200
213
|
this.branch = branch;
|
|
201
214
|
}
|
|
@@ -225,8 +238,17 @@ export class SessionLog {
|
|
|
225
238
|
return SessionLog.over(state, branch);
|
|
226
239
|
}
|
|
227
240
|
/** Append an event on the active branch, assigning the next monotonic
|
|
228
|
-
* index. The first event of a forked branch carries the fork's parent ref.
|
|
241
|
+
* index. The first event of a forked branch carries the fork's parent ref.
|
|
242
|
+
* Safe to call without awaiting the previous call: concurrent appends on
|
|
243
|
+
* this instance (or a fork() sibling sharing this state) are serialized
|
|
244
|
+
* via `enqueue` and assigned distinct, monotonic indices in call order. */
|
|
229
245
|
async append(kind, payload, opts) {
|
|
246
|
+
return enqueue(this.state, () => this.appendLocked(kind, payload, opts));
|
|
247
|
+
}
|
|
248
|
+
/** The unserialized body of `append()` — only ever runs for one caller at
|
|
249
|
+
* a time per `LogState`, via `enqueue`. Not called directly outside this
|
|
250
|
+
* file; `fork()` also runs its own synthetic first event through this. */
|
|
251
|
+
async appendLocked(kind, payload, opts) {
|
|
230
252
|
const index = this.state.nextIndex.get(this.branch) ?? 0;
|
|
231
253
|
const parent = opts?.parent;
|
|
232
254
|
const isRoot = this.state.events.length === 0 || this.branch === this.state.rootBranch;
|
|
@@ -261,16 +283,23 @@ export class SessionLog {
|
|
|
261
283
|
* atIndex}, kind 'fork', payload null.
|
|
262
284
|
*/
|
|
263
285
|
async fork(atIndex, newBranch) {
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
286
|
+
// Both the "does newBranch already exist" check and the synthetic first
|
|
287
|
+
// event run inside ONE enqueue()'d operation: otherwise two concurrent
|
|
288
|
+
// fork() calls for the same new branch name could both pass the check
|
|
289
|
+
// before either's append() lands (the same TOCTOU shape as append()
|
|
290
|
+
// itself, one level up).
|
|
291
|
+
return enqueue(this.state, async () => {
|
|
292
|
+
const count = this.state.nextIndex.get(this.branch) ?? 0;
|
|
293
|
+
if (atIndex < 0 || atIndex >= count) {
|
|
294
|
+
throw new Error(`session: cannot fork branch "${this.branch}" at index ${atIndex} (has ${count} events)`);
|
|
295
|
+
}
|
|
296
|
+
if ((this.state.nextIndex.get(newBranch) ?? 0) > 0 || newBranch === this.branch) {
|
|
297
|
+
throw new Error(`session: branch "${newBranch}" already exists`);
|
|
298
|
+
}
|
|
299
|
+
const forked = SessionLog.over(this.state, newBranch);
|
|
300
|
+
await forked.appendLocked('fork', null, { parent: { branch: this.branch, index: atIndex } });
|
|
301
|
+
return forked;
|
|
302
|
+
});
|
|
274
303
|
}
|
|
275
304
|
/** The lineage of a branch, root → tip: the branch's own events preceded by
|
|
276
305
|
* its parent lineage truncated at the fork point, recursively. */
|
package/dist/session.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaharness/kernel",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.5",
|
|
4
4
|
"description": "Cross-platform kernel for the agent-harness-generator — wasm primary, NAPI-RS native fallback",
|
|
5
|
-
"homepage": "https://github.com/ruvnet/
|
|
5
|
+
"homepage": "https://github.com/ruvnet/metaharness",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "https://github.com/ruvnet/
|
|
8
|
+
"url": "https://github.com/ruvnet/metaharness.git",
|
|
9
9
|
"directory": "packages/kernel-js"
|
|
10
10
|
},
|
|
11
11
|
"license": "MIT",
|
|
@@ -57,21 +57,37 @@
|
|
|
57
57
|
"@ruvector/emergent-time": "^0.1.0"
|
|
58
58
|
},
|
|
59
59
|
"peerDependencies": {
|
|
60
|
-
"@ruvector/rvf": "^0.
|
|
61
|
-
},
|
|
62
|
-
"peerDependenciesMeta": {
|
|
63
|
-
"@ruvector/rvf": {
|
|
64
|
-
"optional": true
|
|
65
|
-
}
|
|
66
|
-
},
|
|
67
|
-
"optionalDependencies": {
|
|
60
|
+
"@ruvector/rvf": "^0.3.0 || ^0.4.6",
|
|
68
61
|
"@metaharness/kernel-darwin-arm64": "0.1.0",
|
|
69
62
|
"@metaharness/kernel-darwin-x64": "0.1.0",
|
|
70
63
|
"@metaharness/kernel-linux-x64-gnu": "0.1.0",
|
|
71
64
|
"@metaharness/kernel-linux-arm64-gnu": "0.1.0",
|
|
72
65
|
"@metaharness/kernel-win32-x64-msvc": "0.1.0"
|
|
73
66
|
},
|
|
67
|
+
"peerDependenciesMeta": {
|
|
68
|
+
"@ruvector/rvf": {
|
|
69
|
+
"optional": true
|
|
70
|
+
},
|
|
71
|
+
"@metaharness/kernel-darwin-arm64": {
|
|
72
|
+
"optional": true
|
|
73
|
+
},
|
|
74
|
+
"@metaharness/kernel-darwin-x64": {
|
|
75
|
+
"optional": true
|
|
76
|
+
},
|
|
77
|
+
"@metaharness/kernel-linux-x64-gnu": {
|
|
78
|
+
"optional": true
|
|
79
|
+
},
|
|
80
|
+
"@metaharness/kernel-linux-arm64-gnu": {
|
|
81
|
+
"optional": true
|
|
82
|
+
},
|
|
83
|
+
"@metaharness/kernel-win32-x64-msvc": {
|
|
84
|
+
"optional": true
|
|
85
|
+
}
|
|
86
|
+
},
|
|
74
87
|
"engines": {
|
|
75
88
|
"node": ">=20.0.0"
|
|
89
|
+
},
|
|
90
|
+
"devDependencies": {
|
|
91
|
+
"@ruvector/rvf": "^0.4.6"
|
|
76
92
|
}
|
|
77
93
|
}
|