wolbarg 0.5.0 → 0.5.2

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 CHANGED
@@ -5,6 +5,31 @@ All notable changes to this project are documented here.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/).
7
7
 
8
+ ## [0.5.2] — 2026-07-19
9
+
10
+ ### Added
11
+
12
+ - **`rememberFromMessages()` (experimental)** — conversation → memory bridge with `mode: "raw"` (default, no LLM) and optional `mode: "extract"` via configured `llm`
13
+ - **Vercel AI SDK adapter example** — `examples/adapters/vercel-ai/` (now uses official `@wolbarg/vercel-ai` middleware)
14
+ - **Companion package `@wolbarg/vercel-ai`** — Language Model Middleware (`wolbargMiddleware` + `wrapLanguageModel`) for automatic recall / remember (published separately under `packages/vercel-ai/`)
15
+
16
+ ### Compatibility
17
+
18
+ - Additive only. Omit the new method and behavior matches **0.5.1**. Experimental API may change before 1.0 — pin versions if you depend on it.
19
+ - Core `wolbarg` remains framework-agnostic; AI SDK types live only in `@wolbarg/vercel-ai`.
20
+ - `@wolbarg/vercel-ai@1` requires **AI SDK v7+** (`ai@^7`). Upgrade from AI SDK v4 before adopting the middleware.
21
+
22
+ ## [0.5.1] — 2026-07-19
23
+
24
+
25
+ ### Fixed
26
+
27
+ - **SQLite vec0 rowid binding on Linux** — bind `memory_rowid` as `BigInt` for `node:sqlite` + sqlite-vec so CI / Linux inserts and KNN search do not fail on integer PK binds
28
+
29
+ ### Compatibility
30
+
31
+ - Drop-in patch for **0.5.0**. No API or schema changes.
32
+
8
33
  ## [0.5.0] — 2026-07-19
9
34
 
10
35
  ### Added
@@ -166,6 +191,7 @@ const ctx = wolbarg({
166
191
 
167
192
  - Initial npm release path (pre–modular storage / ingest)
168
193
 
194
+ [0.5.1]: https://github.com/wolbarg/wolbarg/releases/tag/v0.5.1
169
195
  [0.5.0]: https://github.com/wolbarg/wolbarg/releases/tag/v0.5.0
170
196
  [0.4.0]: https://github.com/wolbarg/wolbarg/releases/tag/v0.4.0
171
197
  [0.3.2]: https://github.com/wolbarg/wolbarg/releases/tag/v0.3.2
package/README.md CHANGED
@@ -1,59 +1,134 @@
1
- <p align="center">
2
- <img src="./assets/wolbarg-banner.png" alt="Wolbarg Logo: Memory Infrastructure for AI Agents" width="720" />
3
- </p>
1
+ ![Wolbarg — Memory Infrastructure for AI Agents](./assets/wolbarg-banner.png)
4
2
 
5
3
  # Wolbarg
6
4
 
7
- **Modular, provider-agnostic semantic memory for AI agents (v0.5.0).**
5
+ **Modular, provider-agnostic semantic memory for AI agents.**
8
6
 
9
7
  [![npm version](https://img.shields.io/npm/v/wolbarg.svg)](https://www.npmjs.com/package/wolbarg)
8
+ [![SDK CI](https://github.com/wolbarg/wolbarg/actions/workflows/sdk-ci.yml/badge.svg?branch=main)](https://github.com/wolbarg/wolbarg/actions/workflows/sdk-ci.yml)
10
9
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
10
+ [![Node.js](https://img.shields.io/badge/node-%3E%3D22.5-brightgreen.svg)](https://nodejs.org)
11
11
  [![Docs](https://img.shields.io/badge/docs-wolbarg.com-black)](https://wolbarg.com)
12
- [![Benchmarks](https://img.shields.io/badge/benchmarks-Storage%20suite-black)](https://wolbarg.com/benchmarks)
12
+ [![Benchmarks](https://img.shields.io/badge/benchmarks-v0.4%20stress-black)](https://wolbarg.com/benchmarks)
13
13
 
14
- ## What's new in 0.5.0
14
+ ```bash
15
+ npm install wolbarg
16
+ ```
17
+
18
+ Wolbarg is **memory infrastructure**, not an agent framework. Agents call `remember()` / `recall()` (and optionally ingest, compress, subscribe, and link memories in a graph). You bring SQLite or PostgreSQL, any OpenAI-compatible embedding API, and optional peers for PDF/DOCX/OCR/Neo4j.
15
19
 
16
- Optional **graph memory** (`sqliteGraph` / `neo4jGraph`), `linkMemories` / `getRelated`, `recall({ includeGraph: true })`, cascade forget, graph-aware checkpoints, and **Wolbarg Studio** graph canvas.
20
+ **Current release: [v0.5.2](./CHANGELOG.md)** — experimental `rememberFromMessages()` (chat → memory) and a [Vercel AI SDK adapter example](../examples/adapters/vercel-ai/). Still includes 0.5 graph memory (SQLite + Neo4j), `includeGraph` recall, and [Wolbarg Studio](https://wolbarg.com/docs/observability).
17
21
 
18
- Full notes: [CHANGELOG](./CHANGELOG.md) · [Docs — What's New](https://wolbarg.com/docs/guides/whats-new) · [Graph memory](https://wolbarg.com/docs/graph-memory) · [Studio](https://wolbarg.com/docs/observability)
22
+ ---
19
23
 
20
- ## Benchmarks
24
+ ## Why Wolbarg?
25
+
26
+ | Problem | What Wolbarg does |
27
+ | --- | --- |
28
+ | Agents forget between sessions | Durable semantic memory on **your** disk or Postgres |
29
+ | Vendor lock-in | Pluggable embeddings, LLM, rerankers, OCR, vision, storage, graph |
30
+ | Vectors alone are not enough | Hybrid search (semantic + BM25), metadata filters, MMR, optional rerank |
31
+ | Multi-agent writes collide | SQLite `BEGIN IMMEDIATE` + retries; Postgres row-level locking |
32
+ | Duplicate facts pile up | Opt-in write-time dedupe / upsert |
33
+ | Repeated embeds cost money | Transparent embedding cache (default on) |
34
+ | Need structure, not only similarity | Optional **graph** — `linkMemories` / `getRelated` (SQLite ↔ Neo4j) |
35
+ | Hard to debug memory | Telemetry + **Wolbarg Studio** (local, read-only) |
36
+
37
+ ---
38
+
39
+ ## Features
40
+
41
+ - **Storage** — SQLite (`node:sqlite` + sqlite-vec) or PostgreSQL (+ optional pgvector)
42
+ - **Recall** — semantic, hybrid, metadata filters, MMR, rerank, `explain: true`
43
+ - **Ingest** — text / markdown / PDF / DOCX / images (peers for PDF/DOCX/OCR)
44
+ - **Compress** — optional LLM summarization with archive lineage
45
+ - **`subscribe()`** — real-time change events (SQLite in-process; Postgres LISTEN/NOTIFY)
46
+ - **Concurrency** — multi-writer SQLite hardening (`WOLBARG_STORAGE_LOCKED`)
47
+ - **Embedding cache** — `hash(content) + model`
48
+ - **Dedupe / upsert** — opt-in exact / near / exact-or-near
49
+ - **Graph memory (0.5)** — `sqliteGraph` / `neo4jGraph`, `linkMemories`, `getRelated`, `includeGraph`
50
+ - **Conversation bridge (0.5.2, experimental)** — `rememberFromMessages()` raw or LLM extract
51
+ - **Framework adapter** — official [`@wolbarg/vercel-ai`](../packages/vercel-ai/) middleware (`wrapLanguageModel`)
52
+ - **Checkpoints / export** — file-backed SQLite snapshots (+ graph file when applicable)
53
+ - **Telemetry** — independent event DB; Studio dashboard, Trace Explorer, graph canvas
54
+
55
+ Docs: [Getting started](https://wolbarg.com/docs/getting-started) · [Vercel AI](https://wolbarg.com/docs/integrations/vercel-ai) · [rememberFromMessages](https://wolbarg.com/docs/api/remember-from-messages) · [Graph memory](https://wolbarg.com/docs/graph-memory) · [Studio](https://wolbarg.com/docs/observability)
56
+
57
+ ---
58
+
59
+ ## Benchmarks (v0.4.0 stress · mock embeddings)
60
+
61
+ Published dual-backend **v4-stress** suite (2026-07-18 · Node v24.13.1 · win32/arm64 · 8 CPUs). Mock embeddings isolate SDK + database cost — not LIVE provider latency.
62
+
63
+ ### Headlines
64
+
65
+ | Metric | SQLite | PostgreSQL |
66
+ | --- | --- | --- |
67
+ | Cold `ready()` | **16.18 ms** | **91.39 ms** |
68
+ | Batch remember (200) | **5,795 ops/s** | **2,795 ops/s** |
69
+ | Bulk insert 2k | **7,509 ops/s** | **4,085 ops/s** |
70
+ | Recall p95 @ 2k | **4.83 ms** | **141.5 ms** |
71
+ | 16 writers throughput | **8,660 ops/s** | **3,335 ops/s** |
72
+ | Embedding cache speedup | **1.47×** | **1.18×** |
73
+ | Suite result | 25 pass / 0 fail | 21 pass / 0 fail / 4 skip\* |
74
+
75
+ \*Postgres skips SQLite-only paths (telemetry EventDatabase, file checkpoints, export/import).
76
+
77
+ ### SQLite — stress & concurrency
78
+
79
+ | Case | Result |
80
+ | --- | --- |
81
+ | Bulk insert 2k + search | 7,509 insert ops/s · recall p50 **4.12 ms** · p95 **4.83 ms** |
82
+ | 8 writers × 20 ops | **6,084** ops/s · p95 **3.05 ms** · 0 failures |
83
+ | 16 writers × 20 ops | **8,660** ops/s · p95 **2.46 ms** · 0 failures |
84
+ | 32 writers × 20 ops | **6,798** ops/s · p95 **22.94 ms** · 0 failures |
85
+ | Mixed read/write storm | 0 failures |
21
86
 
22
- **v0.2.1 Storage suite** (mock embeddings · scale quick) dual-backend SQLite + PostgreSQL:
87
+ ### PostgreSQLstress & concurrency
23
88
 
24
- | Metric | Result |
89
+ | Case | Result |
25
90
  | --- | --- |
26
- | SQLite search @ 1k | **2.02 ms** |
27
- | SQLite insert @ 1k | **1.72k ops/sec** |
28
- | SQLite cold start | **7.91 ms** |
29
- | Postgres 16 writers | **1.12k ops/sec** |
91
+ | Bulk insert 2k + search | 4,085 insert ops/s · recall p50 **23.29 ms** · p95 **141.5 ms** |
92
+ | 8 writers × 20 ops | **2,555** ops/s · p95 **8.51 ms** · 0 failures |
93
+ | 16 writers × 20 ops | **3,335** ops/s · p95 **9.48 ms** · 0 failures |
94
+ | 32 writers × 20 ops | **3,802** ops/s · p95 **14.77 ms** · 0 failures |
95
+ | Mixed read/write storm | 0 failures |
30
96
 
31
- Storage (mock) LIVE (real providers). Full page: [wolbarg.com/benchmarks](https://wolbarg.com/benchmarks) · [methodology](https://wolbarg.com/docs/benchmarks) · [raw JSON](https://wolbarg.com/benchmarks/benchmark.json).
97
+ **Artifacts:** [SQLite JSON](https://wolbarg.com/benchmarks/version-0.4.0-sqlite-benchmark.json) · [SQLite MD](https://wolbarg.com/benchmarks/version-0.4.0-sqlite-benchmark.md) · [Postgres JSON](https://wolbarg.com/benchmarks/version-0.4.0-postgres-benchmark.json) · [Postgres MD](https://wolbarg.com/benchmarks/version-0.4.0-postgres-benchmark.md) · [Interactive page](https://wolbarg.com/benchmarks) · [Methodology](https://wolbarg.com/docs/benchmarks)
98
+
99
+ Also published: [embedding-cache](https://wolbarg.com/benchmarks/embedding-cache.json) · [multiprocess concurrency](https://wolbarg.com/benchmarks/multiprocess-concurrency.json)
100
+
101
+ ---
32
102
 
33
103
  ## Installation
34
104
 
35
105
  ```bash
36
106
  npm install wolbarg
107
+ # or: pnpm add wolbarg · yarn add wolbarg · bun add wolbarg
37
108
  ```
38
109
 
39
- Node.js **22.5+**.
110
+ **Requires Node.js 22.5+** (built-in `node:sqlite`).
40
111
 
41
- ### Optional peers (install when you use the feature)
112
+ ### Optional peers
113
+
114
+ Install only what you use:
42
115
 
43
116
  | Peer | Required for |
44
117
  | --- | --- |
45
- | `pg` | `postgres({ … })` storage |
46
- | `neo4j-driver` | `neo4jGraph({ … })` graph backend |
47
- | `pdf-parse` (pin `@1.1.4`) | `ingest()` of `.pdf` files |
48
- | `mammoth` | `ingest()` of `.docx` files |
49
- | `tesseract.js` | OCR provider for images |
118
+ | `pg` | PostgreSQL storage |
119
+ | `neo4j-driver` | `neo4jGraph(...)` |
120
+ | `pdf-parse@1.1.4` | PDF ingest |
121
+ | `mammoth` | DOCX ingest |
122
+ | `tesseract.js` | OCR |
50
123
 
51
124
  ```bash
52
- # Example: PDF + DOCX ingest
53
- npm install pdf-parse@1.1.4 mammoth
125
+ npm install pg neo4j-driver # production storage + graph
126
+ npm install pdf-parse@1.1.4 mammoth # document ingest
54
127
  ```
55
128
 
56
- **Important:** these packages are **not** bundled with `Wolbarg`. If you call `ingest()` on PDF/DOCX without the matching peer, Wolbarg throws a configuration error at use time (not at import). Plain `.txt` / `.md` / `.csv` / `.json` need no extras.
129
+ Peers are **not** bundled. Missing peers fail at use time for that path not at import. Plain `.txt` / `.md` / `.csv` / `.json` and SQLite graph need no extras.
130
+
131
+ ---
57
132
 
58
133
  ## Quick start
59
134
 
@@ -72,66 +147,83 @@ const ctx = wolbarg({
72
147
  model: "gpt-4.1-mini",
73
148
  }),
74
149
  keywordSearch: bm25(),
150
+ concurrency: { maxRetries: 5 },
151
+ embeddingCache: { enabled: true },
152
+ memory: { dedupe: { enabled: true, strategy: "exact-or-near" } },
75
153
  telemetry: {
76
154
  enabled: true,
77
155
  database: { provider: "sqlite", url: "./telemetry.db" },
78
156
  level: "debug",
79
- captureQueries: true,
80
- captureLatency: true,
81
157
  },
82
158
  });
83
159
 
84
- await ctx.remember({
160
+ await ctx.ready();
161
+
162
+ const saved = await ctx.remember({
85
163
  agent: "research",
86
164
  content: { text: "Stripe supports recurring invoices." },
87
165
  metadata: { topic: "billing" },
88
166
  });
167
+ // saved.action === "created" | "updated"
168
+
169
+ const hits = await ctx.recall({
170
+ query: "How do recurring invoices work?",
171
+ topK: 5,
172
+ hybrid: true,
173
+ });
174
+
175
+ ctx.subscribe({ organization: "my-org" }, (e) => {
176
+ console.log(e.event, e.memoryId);
177
+ });
89
178
 
90
- const hits = await ctx.recall({ query: "invoices", topK: 5 });
91
- const explained = await ctx.recall({ query: "invoices", explain: true });
92
179
  await ctx.checkpoint("before-compress");
180
+ await ctx.close();
93
181
  ```
94
182
 
95
- ### Optional graph (0.5)
183
+ ### Graph memory (0.5)
184
+
185
+ Same typed API locally and in production — swap only the factory:
96
186
 
97
187
  ```ts
98
- import { wolbarg, openaiEmbedding, sqliteGraph } from "wolbarg";
188
+ import { wolbarg, openaiEmbedding, sqliteGraph, neo4jGraph } from "wolbarg";
99
189
 
100
- const ctx = wolbarg({
101
- organization: "my-org",
102
- database: { provider: "sqlite", url: "./memory.db" },
103
- embedding: openaiEmbedding({
104
- apiKey: process.env.OPENAI_API_KEY!,
105
- model: "text-embedding-3-small",
106
- }),
107
- graph: sqliteGraph({ path: "./graph.db" }),
108
- });
190
+ // Local
191
+ graph: sqliteGraph({ path: "./graph.db" })
109
192
 
193
+ // Production
194
+ graph: neo4jGraph({
195
+ url: process.env.NEO4J_URL!,
196
+ username: process.env.NEO4J_USER!,
197
+ password: process.env.NEO4J_PASSWORD!,
198
+ })
199
+ ```
200
+
201
+ ```ts
110
202
  const a = await ctx.remember({
111
- agent: "research",
203
+ agent: "support",
112
204
  content: { text: "Refunds take 5 business days." },
113
205
  });
114
206
  const b = await ctx.remember({
115
- agent: "research",
207
+ agent: "support",
116
208
  content: { text: "Chargebacks escalate to risk." },
117
209
  });
210
+
118
211
  await ctx.linkMemories(a.id, b.id, "related_to");
119
- const related = await ctx.getRelated(a.id);
212
+ const related = await ctx.getRelated(a.id, { depth: 1 });
213
+
214
+ const withGraph = await ctx.recall({
215
+ query: "refunds",
216
+ includeGraph: true,
217
+ });
218
+ // withGraph[0].related — neighbors from the graph
120
219
  ```
121
220
 
122
- `new Wolbarg({ storage: sqlite("./memory.db"), embedding })` remains supported for backwards compatibility.
221
+ Guide: [Graph memory](https://wolbarg.com/docs/graph-memory) · Prefer a [provider-isolated project layout](https://wolbarg.com/docs/installation#project-layout) so backend swaps stay one-file.
123
222
 
124
- ## Quick start (legacy constructor)
223
+ ### Constructor DI (still supported)
125
224
 
126
225
  ```ts
127
- import {
128
- Wolbarg,
129
- sqlite,
130
- openaiEmbedding,
131
- openaiLlm,
132
- bm25,
133
- meta,
134
- } from "wolbarg";
226
+ import { Wolbarg, sqlite, openaiEmbedding } from "wolbarg";
135
227
 
136
228
  const ctx = new Wolbarg({
137
229
  organization: "my-org",
@@ -140,78 +232,93 @@ const ctx = new Wolbarg({
140
232
  apiKey: process.env.OPENAI_API_KEY!,
141
233
  model: "text-embedding-3-small",
142
234
  }),
143
- llm: openaiLlm({
144
- apiKey: process.env.OPENAI_API_KEY!,
145
- model: "gpt-4.1-mini",
146
- }),
147
- keywordSearch: bm25(),
148
- });
149
-
150
- await ctx.remember({
151
- agent: "research",
152
- content: { text: "Stripe supports recurring invoices." },
153
- metadata: { topic: "billing" },
154
- });
155
-
156
- const hits = await ctx.recall({
157
- query: "recurring invoices",
158
- topK: 5,
159
- hybrid: true,
160
- filter: { metadata: meta.eq("topic", "billing") },
161
235
  });
162
236
  ```
163
237
 
164
238
  **Required:** `organization`, `storage` or `database`, `embedding`.
165
- **Optional:** `llm`, `telemetry`, `keywordSearch`, `reranker`, `ocr`, `vision`, `chunking`, `compression`, `retrieval`, `checkpoint`.
239
+ **Optional:** `llm`, `keywordSearch`, `reranker`, `ocr`, `vision`, `chunking`, `telemetry`, `concurrency`, `embeddingCache`, `memory.dedupe`, `graph`, `checkpoint` / `checkpointDirectory`.
166
240
 
167
- Calling `compress` without `llm` is a TypeScript error.
241
+ ---
168
242
 
169
- ## API
243
+ ## API surface
170
244
 
171
- | Method | Description |
245
+ | Method | Role |
172
246
  | --- | --- |
173
- | `remember` / `rememberBatch` | Store + embed |
174
- | `recall` / `recallBatch` | Semantic / hybrid search (`explain: true` for diagnostics) |
175
- | `ingest` | Documents chunks memories (**peers** for PDF/DOCX/OCR) |
176
- | `compress` | LLM summary (needs `llm`) |
177
- | `checkpoint` / `rollback` / `listCheckpoints` | First-party memory snapshots |
178
- | `export` / `import` | Portable SQLite memory bundles |
179
- | `forget` / `history` / `stats` / `clear` | Management |
180
- | `ready` / `close` | Lifecycle |
247
+ | `remember` / `rememberBatch` | Embed + store (`RememberResult` includes `action`) |
248
+ | `update` | Edit an existing memory by id |
249
+ | `recall` / `recallBatch` | Semantic / hybrid search; `explain` · `includeGraph` |
250
+ | `ingest` | Documents chunks memories |
251
+ | `compress` | LLM summary (requires `llm`) |
252
+ | `linkMemories` / `getRelated` | Graph edges / traversal (requires `graph`) |
253
+ | `subscribe` | Real-time change callbacks |
254
+ | `checkpoint` / `rollback` / `listCheckpoints` / … | SQLite snapshots (+ graph file when SQLite graph) |
255
+ | `export` / `import` | Portable SQLite + manifest |
256
+ | `forget` / `history` / `stats` / `clear` | Lifecycle (forget/clear cascade graph when configured) |
257
+ | `ready` / `close` / `flushTelemetry` | Lifecycle |
258
+
259
+ Full reference: [wolbarg.com/docs/api](https://wolbarg.com/docs/api)
260
+
261
+ ---
181
262
 
182
- ## Studio
263
+ ## Wolbarg Studio
183
264
 
184
- Local telemetry dashboard (separate app — not bundled into the SDK):
265
+ Local observability dashboard — **not** bundled in the npm package. The SDK writes telemetry; Studio reads it (and can open memory / graph files for the canvas).
185
266
 
186
267
  ```bash
187
- cd wolbarg_studio
268
+ git clone https://github.com/Atharvmunde11/wolbarg-studio
269
+ cd wolbarg-studio
188
270
  npm install
189
- npm run dev
271
+ npm run dev # http://localhost:3100
190
272
  ```
191
273
 
192
- Open http://localhost:3100 and connect to your `./telemetry.db`. Connections persist under the user config directory (`~/.wolbarg/studio.json` / AppData), never inside the project.
274
+ Connect telemetry (`./telemetry.db`), optional memory DB, checkpoint directory, and graph backend. Screenshots and setup: [Observability & Studio](https://wolbarg.com/docs/observability).
193
275
 
194
- Telemetry SQLite files use an additive, versioned schema. On writable open, v1
195
- files are migrated in place to telemetry schema v2 and retain all existing
196
- events. V2 adds organization, agent, tags, checkpoint, persisted recall
197
- explanations, and measured stage spans. `SqliteEventDatabase.query()` can filter
198
- by `organization`, `agentId`, `tag`, and `checkpointId`; read-only access to an
199
- unmigrated v1 file remains supported.
276
+ ---
200
277
 
201
- Full documentation: [wolbarg.com](https://wolbarg.com/docs/introduction)
278
+ ## Documentation
202
279
 
203
- ## Limitations (v0.3)
280
+ | Topic | Link |
281
+ | --- | --- |
282
+ | Getting started | https://wolbarg.com/docs/getting-started |
283
+ | Installation & project layout | https://wolbarg.com/docs/installation |
284
+ | Configuration | https://wolbarg.com/docs/configuration |
285
+ | Graph memory | https://wolbarg.com/docs/graph-memory |
286
+ | Observability & Studio | https://wolbarg.com/docs/observability |
287
+ | Concurrency | https://wolbarg.com/docs/concurrency |
288
+ | Real-time events | https://wolbarg.com/docs/realtime-events |
289
+ | Embedding cache | https://wolbarg.com/docs/embedding-cache |
290
+ | Memory upsert | https://wolbarg.com/docs/memory-upsert |
291
+ | What's new in 0.5 | https://wolbarg.com/docs/guides/whats-new |
292
+ | Migration | https://wolbarg.com/docs/migration |
293
+ | Limitations | https://wolbarg.com/docs/guides/limitations |
294
+ | Changelog | [CHANGELOG.md](./CHANGELOG.md) |
295
+
296
+ ---
297
+
298
+ ## Limitations
299
+
300
+ - **Node 22.5+** required (`node:sqlite`).
301
+ - **Ingest peers** required for PDF / DOCX / OCR paths.
302
+ - **PDF** text-layer via `pdf-parse`; scan PDFs need OCR/vision.
303
+ - **Telemetry** is SQLite-only today (Postgres typed but not implemented).
304
+ - **SQLite `subscribe()`** is in-process only; Postgres uses LISTEN/NOTIFY.
305
+ - **Checkpoints / export** require file-backed SQLite memory (not `:memory:` / not Postgres).
306
+ - **Neo4j** checkpoint / export / import throw `GraphCheckpointNotSupportedError` (refuse, don't skip).
307
+ - **Cypher `query()`** is Neo4j-only; SQLite graph uses typed methods.
308
+ - Not an agent framework, chat UI, or hosted vector SaaS.
309
+
310
+ ---
311
+
312
+ ## Upgrade
204
313
 
205
- - **Ingest peers are opt-in but required for those formats** — see table above.
206
- - **PDF text layer only** via `pdf-parse`; scan/image PDFs need OCR/vision (or a text PDF). Older pdf.js in `pdf-parse@1.1.4` may reject some modern PDFs.
207
- - **Node `node:sqlite` is experimental**; Node **22.5+** required.
208
- - **Postgres** memory storage needs `pg`; telemetry/checkpoints are SQLite-only in v0.3 (interfaces ready for Postgres).
209
- - **Not** an agent framework, chat UI, or hosted vector SaaS.
314
+ ```bash
315
+ npm install wolbarg@^0.5.0
316
+ ```
210
317
 
211
- ## Migration from 0.1 / 0.2
318
+ 0.5 is **additive**. Omitting `graph` keeps 0.4 behavior. See [Migration](https://wolbarg.com/docs/migration) and [CHANGELOG](./CHANGELOG.md).
212
319
 
213
- `init()` and `new Wolbarg({ storage })` still work. Prefer `wolbarg({ database, telemetry })`. LLM is optional. Schema auto-migrates to v2.
320
+ ---
214
321
 
215
322
  ## License
216
323
 
217
- MIT
324
+ MIT © [Atharv Munde](https://github.com/Atharvmunde11)