pi-mono/packages/session-backends/sqlite-node/README.md
Cristina Poncela Cubeiro b75be04d92
refactor: search (#7797)
* refactor: search out of repo

* fix: apply cases, no resolve for index on every hit

* chore: tests

* fix: use iterator and no open

* refactor: public dir stuff in jsonl, source

* cleanup and sqlite time number

* fix: use storage for label search too, delete types

* refactor: abstract some more

* docs: example jsonl with elastic search

* docs: Christian's md

* refactor: simpler api surface

* feat: rebuild

* docs: consolidate

* fix: use trigger for sqlite, cleanup indexable, add example in doc

* chore: restore upstream responses shared

* fix: delete metadata from jsonl search hit

* fix: AsynIterable

* refactor: scanning for memory, reuse

* fix: dont export jsonlSessionDirectoryName

* cleanup: more shared stuff

* cleanup: why, jsonl?
2026-08-11 13:27:48 +02:00

22 lines
1,008 B
Markdown

# @earendil-works/pi-session-backend-sqlite-node
Node sqlite session backend for `@earendil-works/pi-agent-core` sessions. Provides the
`node:sqlite` adapter (`SqliteDatabase` implementation), SQLite session repository,
migrations, materialized views, and optional FTS search.
```ts
await using repository = new SqliteSessionRepository(options);
const search = createSqliteSessionSearch(options);
const session = await repository.create({ cwd });
await session.appendMessage(message);
const hits = [];
for await (const hit of search.search("needle")) hits.push(hit);
```
The repository lazily owns one shared database connection. Search is an independent
service over the same canonical database: repositories do not expose `search()`.
The FTS table and triggers are created lazily on the first non-blank search; when
FTS is first created, search performs a one-time rebuild from canonical entries.
After that, SQLite triggers keep FTS in sync with canonical entry inserts, deletes,
and payload updates.