@the-brain/adapter-sqlite 0.2.0

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.
@@ -0,0 +1,57 @@
1
+ import type { IStorageAdapter, ActionInfo, CategoryInfo, EntryAnalysisData, IVaultEntry, ILongTermMemory, ICategory, TopicAnalysis, LongTermMemoryData } from "@the-brain/core";
2
+ export declare class SQLiteStorageAdapter implements IStorageAdapter {
3
+ private db;
4
+ constructor(storagePath?: string);
5
+ private migrate;
6
+ createEntry(userId: string, rawText: string, analysis: EntryAnalysisData): Promise<IVaultEntry>;
7
+ getEntryById(entryId: string): Promise<IVaultEntry | null>;
8
+ getVaultData(userId: string): Promise<{
9
+ entries: IVaultEntry[];
10
+ memories: ILongTermMemory[];
11
+ categories: ICategory[];
12
+ }>;
13
+ deleteVaultEntry(entryId: string, userId: string): Promise<IVaultEntry | null>;
14
+ getCategories(): Promise<CategoryInfo[]>;
15
+ getUniqueUserIds(): Promise<string[]>;
16
+ getActions(): Promise<ActionInfo[]>;
17
+ upsertAction(name: string, description: string, isBuiltIn?: boolean): Promise<void>;
18
+ getChatHistory(userId: string): Promise<{
19
+ role: "user" | "assistant";
20
+ content: string;
21
+ }[]>;
22
+ appendChatMessage(userId: string, role: "user" | "assistant", content: string, maxMessages: number): Promise<void>;
23
+ getUserProfile(userId: string): Promise<string | null>;
24
+ upsertUserProfile(userId: string, profile: string): Promise<void>;
25
+ findRelevantEntries(userId: string, keywords: string[]): Promise<IVaultEntry[]>;
26
+ findSimilarEntries(userId: string, embedding: number[], topK?: number): Promise<IVaultEntry[]>;
27
+ updateEntryEmbedding(entryId: string, embedding: number[]): Promise<void>;
28
+ findDeltaEntries(userId: string, since: Date): Promise<IVaultEntry[]>;
29
+ findContextEntries(userId: string, excludeIds: string[]): Promise<IVaultEntry[]>;
30
+ applyTopicAnalysis(topic: TopicAnalysis): Promise<number>;
31
+ findStrongEntries(userId: string): Promise<IVaultEntry[]>;
32
+ upsertLTM(userId: string, topic: string, category: string, memoryData: LongTermMemoryData, entries: IVaultEntry[]): Promise<void>;
33
+ markConsolidated(entries: IVaultEntry[]): Promise<void>;
34
+ getSynapsesBySource(entryId: string, limit: number): Promise<{
35
+ targetId: string;
36
+ weight: number;
37
+ reason: string;
38
+ targetSummary?: string;
39
+ targetRawText?: string;
40
+ }[]>;
41
+ processSynapseLinks(synapses: {
42
+ sourceId: string;
43
+ targetId: string;
44
+ reason: string;
45
+ strength: number;
46
+ }[], deltaEntryIds: Set<string>): Promise<number>;
47
+ getConsolidatedEntryIds(): Promise<string[]>;
48
+ findEntriesToDecay(since: Date): Promise<IVaultEntry[]>;
49
+ decayEntries(entryIds: {
50
+ toString(): string;
51
+ }[]): Promise<number>;
52
+ pruneDeadEntries(): Promise<number>;
53
+ pruneDeadSynapses(): Promise<number>;
54
+ findEntriesReadyForLTM(): Promise<IVaultEntry[]>;
55
+ countEntries(): Promise<number>;
56
+ }
57
+ //# sourceMappingURL=SQLiteStorageAdapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLiteStorageAdapter.d.ts","sourceRoot":"","sources":["../src/SQLiteStorageAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,370 @@
1
+ import { DatabaseSync } from "node:sqlite";
2
+ import { join } from "node:path";
3
+ import { mkdirSync } from "node:fs";
4
+ // ═══════════════════════════════════════════════════════════════════════════════
5
+ // SQLITE STORAGE ADAPTER
6
+ // Single-file database. Embeddings stored as JSON, cosine similarity in JS.
7
+ // No server required. Full semantic search support.
8
+ // ═══════════════════════════════════════════════════════════════════════════════
9
+ function uid() {
10
+ return `${Date.now()}-${Math.random().toString(36).slice(2, 9)}`;
11
+ }
12
+ function cosineSimilarity(a, b) {
13
+ if (a.length !== b.length || a.length === 0)
14
+ return 0;
15
+ let dot = 0, normA = 0, normB = 0;
16
+ for (let i = 0; i < a.length; i++) {
17
+ dot += a[i] * b[i];
18
+ normA += a[i] * a[i];
19
+ normB += b[i] * b[i];
20
+ }
21
+ const denom = Math.sqrt(normA) * Math.sqrt(normB);
22
+ return denom === 0 ? 0 : dot / denom;
23
+ }
24
+ function toVaultEntry(row) {
25
+ const id = String(row.id);
26
+ return {
27
+ _id: { toString: () => id },
28
+ userId: String(row.userId),
29
+ rawText: String(row.rawText),
30
+ analysis: row.summary ? {
31
+ summary: String(row.summary),
32
+ tags: JSON.parse(String(row.tags ?? "[]")),
33
+ strength: Number(row.strength ?? 5),
34
+ category: String(row.category ?? "Uncategorized"),
35
+ isProcessed: Boolean(row.isProcessed),
36
+ } : undefined,
37
+ embedding: row.embedding ? JSON.parse(String(row.embedding)) : undefined,
38
+ isAnalyzed: Boolean(row.isAnalyzed),
39
+ isConsolidated: Boolean(row.isConsolidated),
40
+ isPermanent: Boolean(row.isPermanent),
41
+ lastActivityAt: new Date(String(row.lastActivityAt)),
42
+ createdAt: new Date(String(row.createdAt)),
43
+ updatedAt: new Date(String(row.updatedAt)),
44
+ };
45
+ }
46
+ export class SQLiteStorageAdapter {
47
+ db;
48
+ constructor(storagePath = "./.brain") {
49
+ mkdirSync(storagePath, { recursive: true });
50
+ this.db = new DatabaseSync(join(storagePath, "brain.db"));
51
+ this.db.exec("PRAGMA journal_mode = WAL");
52
+ this.migrate();
53
+ }
54
+ migrate() {
55
+ this.db.exec(`
56
+ CREATE TABLE IF NOT EXISTS vault_entries (
57
+ id TEXT PRIMARY KEY,
58
+ userId TEXT NOT NULL,
59
+ rawText TEXT NOT NULL,
60
+ summary TEXT,
61
+ tags TEXT DEFAULT '[]',
62
+ strength REAL DEFAULT 5,
63
+ category TEXT DEFAULT 'Uncategorized',
64
+ isProcessed INTEGER DEFAULT 0,
65
+ isAnalyzed INTEGER DEFAULT 0,
66
+ isConsolidated INTEGER DEFAULT 0,
67
+ isPermanent INTEGER DEFAULT 0,
68
+ embedding TEXT,
69
+ lastActivityAt TEXT NOT NULL,
70
+ createdAt TEXT NOT NULL,
71
+ updatedAt TEXT NOT NULL
72
+ );
73
+
74
+ CREATE TABLE IF NOT EXISTS synapses (
75
+ id TEXT PRIMARY KEY,
76
+ sourceId TEXT NOT NULL,
77
+ targetId TEXT NOT NULL,
78
+ weight REAL DEFAULT 1,
79
+ reason TEXT DEFAULT '',
80
+ createdAt TEXT NOT NULL,
81
+ UNIQUE(sourceId, targetId)
82
+ );
83
+
84
+ CREATE TABLE IF NOT EXISTS long_term_memories (
85
+ id TEXT PRIMARY KEY,
86
+ userId TEXT NOT NULL,
87
+ topic TEXT,
88
+ category TEXT,
89
+ summary TEXT,
90
+ tags TEXT DEFAULT '[]',
91
+ strength REAL DEFAULT 5,
92
+ sourceEntryIds TEXT DEFAULT '[]',
93
+ createdAt TEXT NOT NULL,
94
+ updatedAt TEXT NOT NULL
95
+ );
96
+
97
+ CREATE TABLE IF NOT EXISTS actions (
98
+ name TEXT PRIMARY KEY,
99
+ description TEXT NOT NULL,
100
+ isBuiltIn INTEGER DEFAULT 0,
101
+ isActive INTEGER DEFAULT 1
102
+ );
103
+
104
+ CREATE TABLE IF NOT EXISTS chat_history (
105
+ userId TEXT PRIMARY KEY,
106
+ messages TEXT DEFAULT '[]',
107
+ updatedAt TEXT NOT NULL
108
+ );
109
+
110
+ CREATE TABLE IF NOT EXISTS categories (
111
+ name TEXT PRIMARY KEY,
112
+ description TEXT DEFAULT '',
113
+ keywords TEXT DEFAULT '[]'
114
+ );
115
+
116
+ CREATE TABLE IF NOT EXISTS user_profiles (
117
+ userId TEXT PRIMARY KEY,
118
+ profile TEXT NOT NULL,
119
+ updatedAt TEXT NOT NULL
120
+ );
121
+ `);
122
+ }
123
+ // ─── Entry CRUD ───────────────────────────────────────────────────────────
124
+ async createEntry(userId, rawText, analysis) {
125
+ const id = uid();
126
+ const now = new Date().toISOString();
127
+ this.db.prepare(`
128
+ INSERT INTO vault_entries (id, userId, rawText, summary, tags, strength, category, isProcessed, isAnalyzed, isPermanent, lastActivityAt, createdAt, updatedAt)
129
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, 1, ?, ?, ?, ?)
130
+ `).run(id, userId, rawText, analysis.summary, JSON.stringify(analysis.tags), analysis.strength, analysis.category, analysis.isProcessed ? 1 : 0, analysis.isPermanent ? 1 : 0, now, now, now);
131
+ return toVaultEntry(this.db.prepare("SELECT * FROM vault_entries WHERE id = ?").get(id));
132
+ }
133
+ async getEntryById(entryId) {
134
+ const row = this.db.prepare("SELECT * FROM vault_entries WHERE id = ?").get(entryId);
135
+ return row ? toVaultEntry(row) : null;
136
+ }
137
+ // ─── Vault ────────────────────────────────────────────────────────────────
138
+ async getVaultData(userId) {
139
+ const entries = this.db.prepare("SELECT * FROM vault_entries WHERE userId = ? ORDER BY createdAt DESC").all(userId).map(toVaultEntry);
140
+ const memories = this.db.prepare("SELECT * FROM long_term_memories WHERE userId = ?").all(userId).map(row => ({
141
+ _id: { toString: () => String(row.id) },
142
+ userId: String(row.userId),
143
+ summary: row.summary ? String(row.summary) : null,
144
+ tags: JSON.parse(String(row.tags ?? "[]")),
145
+ strength: Number(row.strength ?? 5),
146
+ categoryId: null,
147
+ categoryName: row.category ? String(row.category) : null,
148
+ sourceEntryIds: JSON.parse(String(row.sourceEntryIds ?? "[]")).map((id) => ({ toString: () => id })),
149
+ topic: row.topic ? String(row.topic) : null,
150
+ createdAt: new Date(String(row.createdAt)),
151
+ updatedAt: new Date(String(row.updatedAt)),
152
+ }));
153
+ const categories = this.db.prepare("SELECT * FROM categories").all().map(row => ({
154
+ _id: { toString: () => String(row.name) },
155
+ name: String(row.name),
156
+ description: String(row.description ?? ""),
157
+ icon: "",
158
+ color: "",
159
+ keywords: JSON.parse(String(row.keywords ?? "[]")),
160
+ isActive: true,
161
+ order: 0,
162
+ createdAt: new Date(),
163
+ updatedAt: new Date(),
164
+ }));
165
+ return { entries, memories, categories };
166
+ }
167
+ async deleteVaultEntry(entryId, userId) {
168
+ const entry = await this.getEntryById(entryId);
169
+ if (!entry || entry.userId !== userId)
170
+ return null;
171
+ this.db.prepare("DELETE FROM vault_entries WHERE id = ? AND userId = ?").run(entryId, userId);
172
+ this.db.prepare("DELETE FROM synapses WHERE sourceId = ? OR targetId = ?").run(entryId, entryId);
173
+ return entry;
174
+ }
175
+ // ─── Shared ───────────────────────────────────────────────────────────────
176
+ async getCategories() {
177
+ return this.db.prepare("SELECT * FROM categories").all().map(row => ({
178
+ name: String(row.name),
179
+ description: String(row.description ?? ""),
180
+ keywords: JSON.parse(String(row.keywords ?? "[]")),
181
+ }));
182
+ }
183
+ async getUniqueUserIds() {
184
+ return this.db.prepare("SELECT DISTINCT userId FROM vault_entries").all().map(r => r.userId);
185
+ }
186
+ async getActions() {
187
+ return this.db.prepare("SELECT name, description FROM actions WHERE isActive = 1").all().map(r => ({
188
+ name: String(r.name),
189
+ description: String(r.description),
190
+ }));
191
+ }
192
+ async upsertAction(name, description, isBuiltIn = false) {
193
+ this.db.prepare(`
194
+ INSERT INTO actions (name, description, isBuiltIn, isActive) VALUES (?, ?, ?, 1)
195
+ ON CONFLICT(name) DO UPDATE SET description = excluded.description, isActive = 1
196
+ `).run(name, description, isBuiltIn ? 1 : 0);
197
+ }
198
+ // ─── Chat History ─────────────────────────────────────────────────────────
199
+ async getChatHistory(userId) {
200
+ const row = this.db.prepare("SELECT messages FROM chat_history WHERE userId = ?").get(userId);
201
+ return row ? JSON.parse(row.messages) : [];
202
+ }
203
+ async appendChatMessage(userId, role, content, maxMessages) {
204
+ const history = await this.getChatHistory(userId);
205
+ history.push({ role, content });
206
+ const trimmed = history.slice(-maxMessages);
207
+ const now = new Date().toISOString();
208
+ this.db.prepare(`
209
+ INSERT INTO chat_history (userId, messages, updatedAt) VALUES (?, ?, ?)
210
+ ON CONFLICT(userId) DO UPDATE SET messages = excluded.messages, updatedAt = excluded.updatedAt
211
+ `).run(userId, JSON.stringify(trimmed), now);
212
+ }
213
+ // ─── User Profile ─────────────────────────────────────────────────────────
214
+ async getUserProfile(userId) {
215
+ const row = this.db.prepare("SELECT profile FROM user_profiles WHERE userId = ?").get(userId);
216
+ return row?.profile ?? null;
217
+ }
218
+ async upsertUserProfile(userId, profile) {
219
+ const now = new Date().toISOString();
220
+ this.db.prepare(`
221
+ INSERT INTO user_profiles (userId, profile, updatedAt) VALUES (?, ?, ?)
222
+ ON CONFLICT(userId) DO UPDATE SET profile = excluded.profile, updatedAt = excluded.updatedAt
223
+ `).run(userId, profile, now);
224
+ }
225
+ // ─── Intent Context ───────────────────────────────────────────────────────
226
+ async findRelevantEntries(userId, keywords) {
227
+ if (keywords.length === 0)
228
+ return [];
229
+ const conditions = keywords.map(() => "(rawText LIKE ? OR summary LIKE ?)").join(" OR ");
230
+ const params = keywords.flatMap(k => [`%${k}%`, `%${k}%`]);
231
+ const rows = this.db.prepare(`SELECT * FROM vault_entries WHERE userId = ? AND (${conditions}) ORDER BY strength DESC LIMIT 10`).all(userId, ...params);
232
+ return rows.map(toVaultEntry);
233
+ }
234
+ async findSimilarEntries(userId, embedding, topK = 3) {
235
+ const rows = this.db.prepare("SELECT * FROM vault_entries WHERE userId = ? AND embedding IS NOT NULL").all(userId);
236
+ return rows
237
+ .map(row => ({
238
+ entry: toVaultEntry(row),
239
+ score: cosineSimilarity(embedding, JSON.parse(String(row.embedding))),
240
+ }))
241
+ .sort((a, b) => b.score - a.score)
242
+ .slice(0, topK)
243
+ .map(r => r.entry);
244
+ }
245
+ async updateEntryEmbedding(entryId, embedding) {
246
+ this.db.prepare("UPDATE vault_entries SET embedding = ?, updatedAt = ? WHERE id = ?")
247
+ .run(JSON.stringify(embedding), new Date().toISOString(), entryId);
248
+ }
249
+ // ─── Conscious Processor ──────────────────────────────────────────────────
250
+ async findDeltaEntries(userId, since) {
251
+ const rows = this.db.prepare("SELECT * FROM vault_entries WHERE userId = ? AND isAnalyzed = 1 AND isConsolidated = 0 AND updatedAt > ? LIMIT 50").all(userId, since.toISOString());
252
+ return rows.map(toVaultEntry);
253
+ }
254
+ async findContextEntries(userId, excludeIds) {
255
+ if (excludeIds.length === 0) {
256
+ const rows = this.db.prepare("SELECT * FROM vault_entries WHERE userId = ? ORDER BY strength DESC LIMIT 20").all(userId);
257
+ return rows.map(toVaultEntry);
258
+ }
259
+ const placeholders = excludeIds.map(() => "?").join(",");
260
+ const rows = this.db.prepare(`SELECT * FROM vault_entries WHERE userId = ? AND id NOT IN (${placeholders}) ORDER BY strength DESC LIMIT 20`).all(userId, ...excludeIds);
261
+ return rows.map(toVaultEntry);
262
+ }
263
+ async applyTopicAnalysis(topic) {
264
+ const stmt = this.db.prepare("UPDATE vault_entries SET tags = ?, updatedAt = ? WHERE id = ?");
265
+ const now = new Date().toISOString();
266
+ let updated = 0;
267
+ for (const id of topic.entryIds) {
268
+ const entry = await this.getEntryById(id);
269
+ if (!entry)
270
+ continue;
271
+ const merged = [...new Set([...(entry.analysis?.tags ?? []), ...topic.tags])];
272
+ stmt.run(JSON.stringify(merged), now, id);
273
+ updated++;
274
+ }
275
+ return updated;
276
+ }
277
+ async findStrongEntries(userId) {
278
+ const rows = this.db.prepare("SELECT * FROM vault_entries WHERE userId = ? AND strength >= 10 AND isConsolidated = 0").all(userId);
279
+ return rows.map(toVaultEntry);
280
+ }
281
+ async upsertLTM(userId, topic, category, memoryData, entries) {
282
+ const id = uid();
283
+ const now = new Date().toISOString();
284
+ const entryIds = JSON.stringify(entries.map(e => e._id.toString()));
285
+ this.db.prepare(`
286
+ INSERT INTO long_term_memories (id, userId, topic, category, summary, tags, sourceEntryIds, createdAt, updatedAt)
287
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
288
+ ON CONFLICT DO NOTHING
289
+ `).run(id, userId, topic, category, memoryData.summary, JSON.stringify(memoryData.tags), entryIds, now, now);
290
+ }
291
+ async markConsolidated(entries) {
292
+ const stmt = this.db.prepare("UPDATE vault_entries SET isConsolidated = 1, updatedAt = ? WHERE id = ?");
293
+ const now = new Date().toISOString();
294
+ for (const entry of entries) {
295
+ stmt.run(now, entry._id.toString());
296
+ }
297
+ }
298
+ // ─── Synapse Queries & Management ────────────────────────────────────────
299
+ async getSynapsesBySource(entryId, limit) {
300
+ const rows = this.db.prepare(`
301
+ SELECT s.targetId, s.weight, s.reason, v.summary AS targetSummary, v.rawText AS targetRawText
302
+ FROM synapses s
303
+ LEFT JOIN vault_entries v ON v.id = s.targetId
304
+ WHERE s.sourceId = ?
305
+ ORDER BY s.weight DESC
306
+ LIMIT ?
307
+ `).all(entryId, limit);
308
+ return rows.map(row => ({
309
+ targetId: String(row.targetId),
310
+ weight: Number(row.weight),
311
+ reason: String(row.reason),
312
+ targetSummary: row.targetSummary ? String(row.targetSummary) : undefined,
313
+ targetRawText: row.targetRawText ? String(row.targetRawText) : undefined,
314
+ }));
315
+ }
316
+ async processSynapseLinks(synapses, deltaEntryIds) {
317
+ const now = new Date().toISOString();
318
+ let created = 0;
319
+ const upsert = this.db.prepare(`
320
+ INSERT INTO synapses (id, sourceId, targetId, weight, reason, createdAt)
321
+ VALUES (?, ?, ?, ?, ?, ?)
322
+ ON CONFLICT DO NOTHING
323
+ `);
324
+ for (const s of synapses) {
325
+ if (s.sourceId === s.targetId)
326
+ continue;
327
+ if (!deltaEntryIds.has(s.sourceId) && !deltaEntryIds.has(s.targetId))
328
+ continue;
329
+ upsert.run(uid(), s.sourceId, s.targetId, s.strength, s.reason, now);
330
+ created++;
331
+ }
332
+ return created;
333
+ }
334
+ // ─── Subconscious Routine ─────────────────────────────────────────────────
335
+ async getConsolidatedEntryIds() {
336
+ return this.db.prepare("SELECT id FROM vault_entries WHERE isConsolidated = 1").all().map(r => r.id);
337
+ }
338
+ async findEntriesToDecay(since) {
339
+ const rows = this.db.prepare("SELECT * FROM vault_entries WHERE lastActivityAt < ? AND strength > 0 AND isPermanent = 0").all(since.toISOString());
340
+ return rows.map(toVaultEntry);
341
+ }
342
+ async decayEntries(entryIds) {
343
+ const stmt = this.db.prepare("UPDATE vault_entries SET strength = MAX(0, strength - 1), updatedAt = ? WHERE id = ?");
344
+ const now = new Date().toISOString();
345
+ for (const id of entryIds) {
346
+ stmt.run(now, id.toString());
347
+ }
348
+ return entryIds.length;
349
+ }
350
+ async pruneDeadEntries() {
351
+ const result = this.db.prepare("DELETE FROM vault_entries WHERE strength <= 0 AND isPermanent = 0").run();
352
+ return Number(result.changes);
353
+ }
354
+ async pruneDeadSynapses() {
355
+ const result = this.db.prepare(`
356
+ DELETE FROM synapses WHERE sourceId NOT IN (SELECT id FROM vault_entries)
357
+ OR targetId NOT IN (SELECT id FROM vault_entries)
358
+ `).run();
359
+ return Number(result.changes);
360
+ }
361
+ async findEntriesReadyForLTM() {
362
+ const rows = this.db.prepare("SELECT * FROM vault_entries WHERE strength >= 10 AND isConsolidated = 0").all();
363
+ return rows.map(toVaultEntry);
364
+ }
365
+ async countEntries() {
366
+ const row = this.db.prepare("SELECT COUNT(*) as count FROM vault_entries").get();
367
+ return row.count;
368
+ }
369
+ }
370
+ //# sourceMappingURL=SQLiteStorageAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SQLiteStorageAdapter.js","sourceRoot":"","sources":["../src/SQLiteStorageAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { SQLiteStorageAdapter } from "./SQLiteStorageAdapter.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export { SQLiteStorageAdapter } from "./SQLiteStorageAdapter.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC"}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@the-brain/adapter-sqlite",
3
+ "version": "0.2.0",
4
+ "description": "SQLite storage adapter for @the-brain/core — zero-config, single-file database",
5
+ "license": "AGPL-3.0",
6
+ "publishConfig": {
7
+ "access": "public"
8
+ },
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/greg00ry/the-brain.git"
12
+ },
13
+ "type": "module",
14
+ "main": "./dist/index.js",
15
+ "types": "./dist/index.d.ts",
16
+ "exports": {
17
+ ".": {
18
+ "import": "./dist/index.js",
19
+ "types": "./dist/index.d.ts"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md"
25
+ ],
26
+ "scripts": {
27
+ "build": "tsc",
28
+ "dev": "tsc --watch",
29
+ "test": "vitest run"
30
+ },
31
+ "peerDependencies": {
32
+ "@the-brain/core": "*"
33
+ },
34
+ "devDependencies": {
35
+ "@the-brain/core": "*",
36
+ "@types/node": "^22.0.0",
37
+ "typescript": "^5.5.3",
38
+ "vitest": "^4.1.2"
39
+ },
40
+ "engines": {
41
+ "node": ">=22.5.0"
42
+ }
43
+ }