@the-brain/adapter-mongo 0.1.0 → 0.2.1

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 ADDED
@@ -0,0 +1,52 @@
1
+ # @the-brain/adapter-mongo
2
+
3
+ MongoDB storage adapter for [@the-brain/core](https://www.npmjs.com/package/@the-brain/core).
4
+
5
+ Recommended for production — enables full graph queries, synaptic connections, and atomic strength updates.
6
+
7
+ ## Install
8
+
9
+ ```bash
10
+ npm install @the-brain/adapter-mongo mongoose
11
+ ```
12
+
13
+ ## Usage
14
+
15
+ ```typescript
16
+ import { Brain, OpenAICompatibleAdapter } from "@the-brain/core";
17
+ import { MongoStorageAdapter, connectDB } from "@the-brain/adapter-mongo";
18
+
19
+ await connectDB("mongodb://localhost:27017/brain");
20
+
21
+ const brain = new Brain(
22
+ new OpenAICompatibleAdapter(
23
+ "http://localhost:11434/v1/chat/completions",
24
+ "llama3.2"
25
+ ),
26
+ new MongoStorageAdapter()
27
+ );
28
+
29
+ await brain.loadActions();
30
+ ```
31
+
32
+ `connectDB` reads `MONGODB_URI` from env if no argument is passed:
33
+
34
+ ```bash
35
+ MONGODB_URI=mongodb://localhost:27017/brain
36
+ ```
37
+
38
+ ## Why MongoDB
39
+
40
+ Some features of `@the-brain/core` require MongoDB to work at full capacity:
41
+
42
+ | Feature | MongoDB | SQLite |
43
+ |---|---|---|
44
+ | Synaptic graph traversal | ✅ | ✅ |
45
+ | Atomic strength decay | ✅ | ✅ |
46
+ | Embedding similarity search | ✅ (JS cosine) | ✅ (JS cosine) |
47
+ | Multi-user at scale | ✅ | ⚠️ |
48
+ | Zero-config setup | ❌ | ✅ |
49
+
50
+ ## License
51
+
52
+ AGPL-3.0 — [github.com/greg00ry/the-brain](https://github.com/greg00ry/the-brain)
@@ -17,6 +17,8 @@ export declare class MongoStorageAdapter implements IStorageAdapter {
17
17
  content: string;
18
18
  }[]>;
19
19
  appendChatMessage(userId: string, role: "user" | "assistant", content: string, maxMessages: number): Promise<void>;
20
+ getUserProfile(userId: string): Promise<string | null>;
21
+ upsertUserProfile(userId: string, profile: string): Promise<void>;
20
22
  upsertAction(name: string, description: string, isBuiltIn?: boolean): Promise<void>;
21
23
  findRelevantEntries(userId: string, keywords: string[]): Promise<IVaultEntry[]>;
22
24
  findSimilarEntries(userId: string, embedding: number[], topK?: number): Promise<IVaultEntry[]>;
@@ -1 +1 @@
1
- {"version":3,"file":"MongoStorageAdapter.d.ts","sourceRoot":"","sources":["../src/MongoStorageAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MongoStorageAdapter.d.ts","sourceRoot":"","sources":["../src/MongoStorageAdapter.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { LongTermMemory } from "./models/LongTermMemory.js";
5
5
  import { Synapse } from "./models/Synapse.js";
6
6
  import { Action } from "./models/Action.js";
7
7
  import { ChatHistory } from "./models/ChatHistory.js";
8
+ import { UserProfile } from "./models/UserProfile.js";
8
9
  import { BRAIN, MEMORY } from "@the-brain/core";
9
10
  // ─── Synapse helpers ──────────────────────────────────────────────────────────
10
11
  const INITIAL_SYNAPSE_WEIGHT = 0.3;
@@ -53,7 +54,8 @@ function cosineSimilarity(a, b) {
53
54
  export class MongoStorageAdapter {
54
55
  // ─── Entry CRUD ───────────────────────────────────────────────────────────
55
56
  async createEntry(userId, rawText, analysis) {
56
- const entry = new VaultEntry({ userId, rawText, analysis });
57
+ const { isPermanent = false, ...analysisData } = analysis;
58
+ const entry = new VaultEntry({ userId, rawText, analysis: analysisData, isPermanent });
57
59
  return entry.save();
58
60
  }
59
61
  async getEntryById(entryId) {
@@ -104,6 +106,13 @@ export class MongoStorageAdapter {
104
106
  $set: { updatedAt: new Date() },
105
107
  }, { upsert: true });
106
108
  }
109
+ async getUserProfile(userId) {
110
+ const doc = await UserProfile.findOne({ userId });
111
+ return doc?.profile ?? null;
112
+ }
113
+ async upsertUserProfile(userId, profile) {
114
+ await UserProfile.findOneAndUpdate({ userId }, { profile, updatedAt: new Date() }, { upsert: true });
115
+ }
107
116
  async upsertAction(name, description, isBuiltIn = false) {
108
117
  await Action.findOneAndUpdate({ name }, { name, description, isBuiltIn, isActive: true }, { upsert: true });
109
118
  }
@@ -267,6 +276,7 @@ export class MongoStorageAdapter {
267
276
  async findEntriesToDecay(since) {
268
277
  return VaultEntry.find({
269
278
  isConsolidated: false,
279
+ isPermanent: { $ne: true },
270
280
  lastActivityAt: { $lt: since },
271
281
  'analysis.strength': { $gt: 0 },
272
282
  }).select('_id analysis.strength');
@@ -287,6 +297,7 @@ export class MongoStorageAdapter {
287
297
  const result = await VaultEntry.deleteMany({
288
298
  'analysis.strength': { $lte: BRAIN.STRENGTH_DECAY_PRUNE },
289
299
  isConsolidated: false,
300
+ isPermanent: { $ne: true },
290
301
  });
291
302
  return result.deletedCount;
292
303
  }
@@ -1 +1 @@
1
- {"version":3,"file":"MongoStorageAdapter.js","sourceRoot":"","sources":["../src/MongoStorageAdapter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"MongoStorageAdapter.js","sourceRoot":"","sources":["../src/MongoStorageAdapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=MongoStorageAdapter.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoStorageAdapter.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/MongoStorageAdapter.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,729 @@
1
+ import { describe, it, expect, beforeAll, afterAll, beforeEach } from "vitest";
2
+ import mongoose from "mongoose";
3
+ import { MongoMemoryServer } from "mongodb-memory-server";
4
+ import { MongoStorageAdapter } from "../MongoStorageAdapter.js";
5
+ import { VaultEntry } from "../models/VaultEntry.js";
6
+ import { Category } from "../models/Category.js";
7
+ import { Action } from "../models/Action.js";
8
+ import { ChatHistory } from "../models/ChatHistory.js";
9
+ import { LongTermMemory } from "../models/LongTermMemory.js";
10
+ import { Synapse } from "../models/Synapse.js";
11
+ // ─── Setup ────────────────────────────────────────────────────────────────────
12
+ let mongod;
13
+ let adapter;
14
+ beforeAll(async () => {
15
+ mongod = await MongoMemoryServer.create();
16
+ await mongoose.connect(mongod.getUri());
17
+ adapter = new MongoStorageAdapter();
18
+ });
19
+ afterAll(async () => {
20
+ await mongoose.disconnect();
21
+ await mongod.stop();
22
+ });
23
+ beforeEach(async () => {
24
+ await Promise.all([
25
+ VaultEntry.deleteMany({}),
26
+ Category.deleteMany({}),
27
+ Action.deleteMany({}),
28
+ ChatHistory.deleteMany({}),
29
+ LongTermMemory.deleteMany({}),
30
+ Synapse.deleteMany({}),
31
+ ]);
32
+ });
33
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
34
+ function makeAnalysis(overrides = {}) {
35
+ return {
36
+ summary: "Test summary",
37
+ tags: ["test", "vitest"],
38
+ strength: 5,
39
+ category: "Tech",
40
+ isProcessed: true,
41
+ ...overrides,
42
+ };
43
+ }
44
+ async function seedEntry(userId = "user-1", rawText = "test entry", analysisOverrides = {}) {
45
+ return adapter.createEntry(userId, rawText, makeAnalysis(analysisOverrides));
46
+ }
47
+ async function seedCategory(name = "Tech", order = 0) {
48
+ return Category.create({ name, description: `${name} category`, order });
49
+ }
50
+ // ═══════════════════════════════════════════════════════════════════════════════
51
+ // createEntry / getEntryById
52
+ // ═══════════════════════════════════════════════════════════════════════════════
53
+ describe("createEntry", () => {
54
+ it("returns entry with _id, userId, rawText", async () => {
55
+ const entry = await seedEntry("user-1", "hello world");
56
+ expect(entry._id).toBeDefined();
57
+ expect(entry.userId).toBe("user-1");
58
+ expect(entry.rawText).toBe("hello world");
59
+ });
60
+ it("stores analysis fields correctly", async () => {
61
+ const entry = await seedEntry("user-1", "text", { summary: "my summary", tags: ["a", "b"], strength: 7 });
62
+ expect(entry.analysis?.summary).toBe("my summary");
63
+ expect(entry.analysis?.tags).toEqual(["a", "b"]);
64
+ expect(entry.analysis?.strength).toBe(7);
65
+ });
66
+ it("sets isAnalyzed=false and isConsolidated=false by default", async () => {
67
+ const entry = await seedEntry();
68
+ expect(entry.isAnalyzed).toBe(false);
69
+ expect(entry.isConsolidated).toBe(false);
70
+ });
71
+ });
72
+ describe("getEntryById", () => {
73
+ it("returns entry by id", async () => {
74
+ const created = await seedEntry("user-1", "find me");
75
+ const found = await adapter.getEntryById(created._id.toString());
76
+ expect(found).not.toBeNull();
77
+ expect(found.rawText).toBe("find me");
78
+ });
79
+ it("returns null for non-existent id", async () => {
80
+ const result = await adapter.getEntryById(new mongoose.Types.ObjectId().toString());
81
+ expect(result).toBeNull();
82
+ });
83
+ });
84
+ // ═══════════════════════════════════════════════════════════════════════════════
85
+ // deleteVaultEntry
86
+ // ═══════════════════════════════════════════════════════════════════════════════
87
+ describe("deleteVaultEntry", () => {
88
+ it("deletes and returns the entry", async () => {
89
+ const entry = await seedEntry("user-1", "delete me");
90
+ const deleted = await adapter.deleteVaultEntry(entry._id.toString(), "user-1");
91
+ expect(deleted).not.toBeNull();
92
+ expect(deleted.rawText).toBe("delete me");
93
+ });
94
+ it("returns null when entry does not exist", async () => {
95
+ const result = await adapter.deleteVaultEntry(new mongoose.Types.ObjectId().toString(), "user-1");
96
+ expect(result).toBeNull();
97
+ });
98
+ it("returns null when userId does not match", async () => {
99
+ const entry = await seedEntry("user-1");
100
+ const result = await adapter.deleteVaultEntry(entry._id.toString(), "user-2");
101
+ expect(result).toBeNull();
102
+ // entry still exists
103
+ const still = await adapter.getEntryById(entry._id.toString());
104
+ expect(still).not.toBeNull();
105
+ });
106
+ });
107
+ // ═══════════════════════════════════════════════════════════════════════════════
108
+ // getVaultData
109
+ // ═══════════════════════════════════════════════════════════════════════════════
110
+ describe("getVaultData", () => {
111
+ it("returns entries for the user", async () => {
112
+ await seedEntry("user-1", "entry A");
113
+ await seedEntry("user-1", "entry B");
114
+ await seedEntry("user-2", "other user entry");
115
+ const data = await adapter.getVaultData("user-1");
116
+ expect(data.entries).toHaveLength(2);
117
+ });
118
+ it("returns empty arrays when user has no data", async () => {
119
+ const data = await adapter.getVaultData("ghost-user");
120
+ expect(data.entries).toHaveLength(0);
121
+ expect(data.memories).toHaveLength(0);
122
+ expect(data.categories).toHaveLength(0);
123
+ });
124
+ it("returns active categories regardless of userId", async () => {
125
+ await seedCategory("Tech");
126
+ await seedCategory("Health", 1);
127
+ const data = await adapter.getVaultData("user-1");
128
+ expect(data.categories).toHaveLength(2);
129
+ });
130
+ });
131
+ // ═══════════════════════════════════════════════════════════════════════════════
132
+ // getCategories
133
+ // ═══════════════════════════════════════════════════════════════════════════════
134
+ describe("getCategories", () => {
135
+ it("returns active categories with name, description, keywords", async () => {
136
+ await Category.create({ name: "Tech", description: "Technology", keywords: ["code", "dev"], isActive: true });
137
+ const cats = await adapter.getCategories();
138
+ expect(cats).toHaveLength(1);
139
+ expect(cats[0].name).toBe("Tech");
140
+ expect(cats[0].keywords).toEqual(["code", "dev"]);
141
+ });
142
+ it("excludes inactive categories", async () => {
143
+ await Category.create({ name: "Hidden", description: "desc", isActive: false });
144
+ const cats = await adapter.getCategories();
145
+ expect(cats).toHaveLength(0);
146
+ });
147
+ it("returns empty array when no categories", async () => {
148
+ const cats = await adapter.getCategories();
149
+ expect(cats).toHaveLength(0);
150
+ });
151
+ });
152
+ // ═══════════════════════════════════════════════════════════════════════════════
153
+ // getUniqueUserIds
154
+ // ═══════════════════════════════════════════════════════════════════════════════
155
+ describe("getUniqueUserIds", () => {
156
+ it("returns distinct user ids", async () => {
157
+ await seedEntry("user-A");
158
+ await seedEntry("user-A");
159
+ await seedEntry("user-B");
160
+ const ids = await adapter.getUniqueUserIds();
161
+ expect(ids).toHaveLength(2);
162
+ expect(ids).toContain("user-A");
163
+ expect(ids).toContain("user-B");
164
+ });
165
+ it("returns empty array when no entries", async () => {
166
+ const ids = await adapter.getUniqueUserIds();
167
+ expect(ids).toHaveLength(0);
168
+ });
169
+ });
170
+ // ═══════════════════════════════════════════════════════════════════════════════
171
+ // getActions / upsertAction
172
+ // ═══════════════════════════════════════════════════════════════════════════════
173
+ describe("upsertAction / getActions", () => {
174
+ it("creates a new action", async () => {
175
+ await adapter.upsertAction("SAVE_ONLY", "save info", true);
176
+ const actions = await adapter.getActions();
177
+ expect(actions).toHaveLength(1);
178
+ expect(actions[0].name).toBe("SAVE_ONLY");
179
+ expect(actions[0].description).toBe("save info");
180
+ });
181
+ it("updates existing action on upsert (same name)", async () => {
182
+ await adapter.upsertAction("SAVE_ONLY", "old desc", true);
183
+ await adapter.upsertAction("SAVE_ONLY", "new desc", true);
184
+ const actions = await adapter.getActions();
185
+ expect(actions).toHaveLength(1);
186
+ expect(actions[0].description).toBe("new desc");
187
+ });
188
+ it("only returns active actions", async () => {
189
+ await Action.create({ name: "INACTIVE", description: "desc", isActive: false });
190
+ await adapter.upsertAction("ACTIVE", "active action", false);
191
+ const actions = await adapter.getActions();
192
+ expect(actions.map(a => a.name)).not.toContain("INACTIVE");
193
+ expect(actions.map(a => a.name)).toContain("ACTIVE");
194
+ });
195
+ });
196
+ // ═══════════════════════════════════════════════════════════════════════════════
197
+ // getChatHistory / appendChatMessage
198
+ // ═══════════════════════════════════════════════════════════════════════════════
199
+ describe("getChatHistory", () => {
200
+ it("returns empty array when no history", async () => {
201
+ const history = await adapter.getChatHistory("user-1");
202
+ expect(history).toEqual([]);
203
+ });
204
+ it("returns messages after appending", async () => {
205
+ await adapter.appendChatMessage("user-1", "user", "hello", 10);
206
+ await adapter.appendChatMessage("user-1", "assistant", "hi there", 10);
207
+ const history = await adapter.getChatHistory("user-1");
208
+ expect(history).toHaveLength(2);
209
+ expect(history[0]).toEqual({ role: "user", content: "hello" });
210
+ expect(history[1]).toEqual({ role: "assistant", content: "hi there" });
211
+ });
212
+ });
213
+ describe("appendChatMessage", () => {
214
+ it("creates chat doc on first message (upsert)", async () => {
215
+ await adapter.appendChatMessage("new-user", "user", "first message", 10);
216
+ const history = await adapter.getChatHistory("new-user");
217
+ expect(history).toHaveLength(1);
218
+ });
219
+ it("respects maxMessages sliding window", async () => {
220
+ for (let i = 0; i < 5; i++) {
221
+ await adapter.appendChatMessage("user-1", "user", `msg ${i}`, 3);
222
+ }
223
+ const history = await adapter.getChatHistory("user-1");
224
+ expect(history).toHaveLength(3);
225
+ expect(history[0].content).toBe("msg 2");
226
+ expect(history[2].content).toBe("msg 4");
227
+ });
228
+ it("keeps separate history per user", async () => {
229
+ await adapter.appendChatMessage("user-A", "user", "A message", 10);
230
+ await adapter.appendChatMessage("user-B", "user", "B message", 10);
231
+ const histA = await adapter.getChatHistory("user-A");
232
+ const histB = await adapter.getChatHistory("user-B");
233
+ expect(histA).toHaveLength(1);
234
+ expect(histB).toHaveLength(1);
235
+ expect(histA[0].content).toBe("A message");
236
+ expect(histB[0].content).toBe("B message");
237
+ });
238
+ });
239
+ // ═══════════════════════════════════════════════════════════════════════════════
240
+ // findRelevantEntries
241
+ // ═══════════════════════════════════════════════════════════════════════════════
242
+ describe("findRelevantEntries", () => {
243
+ it("finds entries matching keywords in tags", async () => {
244
+ await seedEntry("user-1", "raw text", { tags: ["python", "async"] });
245
+ await seedEntry("user-1", "other text", { tags: ["java"] });
246
+ const results = await adapter.findRelevantEntries("user-1", ["python"]);
247
+ expect(results).toHaveLength(1);
248
+ });
249
+ it("finds entries matching keywords in rawText", async () => {
250
+ await seedEntry("user-1", "I love Python language", { tags: [] });
251
+ const results = await adapter.findRelevantEntries("user-1", ["Python"]);
252
+ expect(results).toHaveLength(1);
253
+ });
254
+ it("finds entries matching keywords in summary (case-insensitive)", async () => {
255
+ await seedEntry("user-1", "raw", { summary: "All about Rust programming" });
256
+ const results = await adapter.findRelevantEntries("user-1", ["rust"]);
257
+ expect(results).toHaveLength(1);
258
+ });
259
+ it("does not return entries from other users", async () => {
260
+ await seedEntry("user-2", "python tips", { tags: ["python"] });
261
+ const results = await adapter.findRelevantEntries("user-1", ["python"]);
262
+ expect(results).toHaveLength(0);
263
+ });
264
+ it("returns empty array when no match", async () => {
265
+ await seedEntry("user-1", "golang notes");
266
+ const results = await adapter.findRelevantEntries("user-1", ["python"]);
267
+ expect(results).toHaveLength(0);
268
+ });
269
+ });
270
+ // ═══════════════════════════════════════════════════════════════════════════════
271
+ // updateEntryEmbedding / findSimilarEntries
272
+ // ═══════════════════════════════════════════════════════════════════════════════
273
+ describe("updateEntryEmbedding", () => {
274
+ it("stores embedding on the entry", async () => {
275
+ const entry = await seedEntry();
276
+ await adapter.updateEntryEmbedding(entry._id.toString(), [0.1, 0.2, 0.3]);
277
+ const found = await VaultEntry.findById(entry._id).lean();
278
+ expect(found.embedding).toEqual([0.1, 0.2, 0.3]);
279
+ });
280
+ });
281
+ describe("findSimilarEntries", () => {
282
+ it("returns empty array when no entries have embeddings", async () => {
283
+ await seedEntry();
284
+ const results = await adapter.findSimilarEntries("user-1", [1, 0, 0]);
285
+ expect(results).toHaveLength(0);
286
+ });
287
+ it("returns most similar entries by cosine similarity", async () => {
288
+ const e1 = await seedEntry("user-1", "entry A");
289
+ const e2 = await seedEntry("user-1", "entry B");
290
+ const e3 = await seedEntry("user-1", "entry C");
291
+ await adapter.updateEntryEmbedding(e1._id.toString(), [1, 0, 0]);
292
+ await adapter.updateEntryEmbedding(e2._id.toString(), [0, 1, 0]);
293
+ await adapter.updateEntryEmbedding(e3._id.toString(), [0.9, 0.1, 0]);
294
+ // query closest to [1,0,0] — e1 and e3 should rank highest
295
+ const results = await adapter.findSimilarEntries("user-1", [1, 0, 0], 2);
296
+ expect(results).toHaveLength(2);
297
+ const ids = results.map(r => r._id.toString());
298
+ expect(ids).toContain(e1._id.toString());
299
+ expect(ids).toContain(e3._id.toString());
300
+ });
301
+ it("respects topK limit", async () => {
302
+ for (let i = 0; i < 5; i++) {
303
+ const e = await seedEntry("user-1", `entry ${i}`);
304
+ await adapter.updateEntryEmbedding(e._id.toString(), [i, 0, 0]);
305
+ }
306
+ const results = await adapter.findSimilarEntries("user-1", [1, 0, 0], 2);
307
+ expect(results).toHaveLength(2);
308
+ });
309
+ });
310
+ // ═══════════════════════════════════════════════════════════════════════════════
311
+ // processSynapseLinks / getSynapsesBySource
312
+ // ═══════════════════════════════════════════════════════════════════════════════
313
+ describe("processSynapseLinks", () => {
314
+ it("creates synapses and returns count", async () => {
315
+ const e1 = await seedEntry("user-1", "entry 1");
316
+ const e2 = await seedEntry("user-1", "entry 2");
317
+ const id1 = e1._id.toString();
318
+ const id2 = e2._id.toString();
319
+ const count = await adapter.processSynapseLinks([{ sourceId: id1, targetId: id2, reason: "related", strength: 8 }], new Set([id1]));
320
+ expect(count).toBe(1);
321
+ });
322
+ it("returns 0 when source not in deltaEntryIds", async () => {
323
+ const e1 = await seedEntry("user-1", "A");
324
+ const e2 = await seedEntry("user-1", "B");
325
+ const count = await adapter.processSynapseLinks([{ sourceId: e1._id.toString(), targetId: e2._id.toString(), reason: "x", strength: 5 }], new Set(["some-other-id"]));
326
+ expect(count).toBe(0);
327
+ });
328
+ it("does not create duplicate synapse (fires existing one)", async () => {
329
+ const e1 = await seedEntry("user-1", "A");
330
+ const e2 = await seedEntry("user-1", "B");
331
+ const id1 = e1._id.toString();
332
+ const id2 = e2._id.toString();
333
+ const link = [{ sourceId: id1, targetId: id2, reason: "x", strength: 5 }];
334
+ const deltaIds = new Set([id1]);
335
+ await adapter.processSynapseLinks(link, deltaIds);
336
+ const count2 = await adapter.processSynapseLinks(link, deltaIds);
337
+ expect(count2).toBe(0); // already existed, not created
338
+ const total = await Synapse.countDocuments();
339
+ expect(total).toBe(1);
340
+ });
341
+ it("caps at MAX_SYNAPSES_PER_ENTRY (3) per source", async () => {
342
+ const source = await seedEntry("user-1", "source");
343
+ const targets = await Promise.all([
344
+ seedEntry("user-1", "t1"),
345
+ seedEntry("user-1", "t2"),
346
+ seedEntry("user-1", "t3"),
347
+ seedEntry("user-1", "t4"),
348
+ seedEntry("user-1", "t5"),
349
+ ]);
350
+ const sourceId = source._id.toString();
351
+ const links = targets.map((t, i) => ({
352
+ sourceId,
353
+ targetId: t._id.toString(),
354
+ reason: `reason ${i}`,
355
+ strength: i + 1,
356
+ }));
357
+ await adapter.processSynapseLinks(links, new Set([sourceId]));
358
+ const count = await Synapse.countDocuments();
359
+ expect(count).toBeLessThanOrEqual(3);
360
+ });
361
+ });
362
+ describe("getSynapsesBySource", () => {
363
+ it("returns synapses for entry sorted by weight desc", async () => {
364
+ const e1 = await seedEntry("user-1", "source");
365
+ const e2 = await seedEntry("user-1", "target A");
366
+ const e3 = await seedEntry("user-1", "target B");
367
+ const sourceId = e1._id.toString();
368
+ await adapter.processSynapseLinks([
369
+ { sourceId, targetId: e2._id.toString(), reason: "weak link", strength: 2 },
370
+ { sourceId, targetId: e3._id.toString(), reason: "strong link", strength: 9 },
371
+ ], new Set([sourceId]));
372
+ const synapses = await adapter.getSynapsesBySource(sourceId, 10);
373
+ expect(synapses).toHaveLength(2);
374
+ expect(synapses[0].weight).toBeGreaterThanOrEqual(synapses[1].weight);
375
+ });
376
+ it("returns empty array when entry has no synapses", async () => {
377
+ const e = await seedEntry();
378
+ const synapses = await adapter.getSynapsesBySource(e._id.toString(), 10);
379
+ expect(synapses).toHaveLength(0);
380
+ });
381
+ it("respects limit parameter", async () => {
382
+ const source = await seedEntry("user-1", "src");
383
+ const sourceId = source._id.toString();
384
+ const targets = await Promise.all([
385
+ seedEntry("user-1", "t1"),
386
+ seedEntry("user-1", "t2"),
387
+ seedEntry("user-1", "t3"),
388
+ ]);
389
+ const links = targets.map((t, i) => ({
390
+ sourceId,
391
+ targetId: t._id.toString(),
392
+ reason: `r${i}`,
393
+ strength: i + 1,
394
+ }));
395
+ await adapter.processSynapseLinks(links, new Set([sourceId]));
396
+ const synapses = await adapter.getSynapsesBySource(sourceId, 2);
397
+ expect(synapses).toHaveLength(2);
398
+ });
399
+ it("populates targetSummary and targetRawText from linked entry", async () => {
400
+ const source = await seedEntry("user-1", "source entry");
401
+ const target = await seedEntry("user-1", "target raw text", { summary: "target summary" });
402
+ const sourceId = source._id.toString();
403
+ await adapter.processSynapseLinks([
404
+ { sourceId, targetId: target._id.toString(), reason: "linked", strength: 7 },
405
+ ], new Set([sourceId]));
406
+ const synapses = await adapter.getSynapsesBySource(sourceId, 10);
407
+ expect(synapses[0].targetSummary).toBe("target summary");
408
+ expect(synapses[0].targetRawText).toBe("target raw text");
409
+ });
410
+ });
411
+ // ═══════════════════════════════════════════════════════════════════════════════
412
+ // findDeltaEntries / findContextEntries
413
+ // ═══════════════════════════════════════════════════════════════════════════════
414
+ describe("findDeltaEntries", () => {
415
+ it("returns unanalyzed entries regardless of date", async () => {
416
+ await VaultEntry.create({
417
+ userId: "user-1",
418
+ rawText: "unanalyzed",
419
+ isAnalyzed: false,
420
+ lastActivityAt: new Date("2020-01-01"),
421
+ });
422
+ const results = await adapter.findDeltaEntries("user-1", new Date());
423
+ expect(results).toHaveLength(1);
424
+ });
425
+ it("returns entries active since given date", async () => {
426
+ const now = new Date();
427
+ const recent = new Date(now.getTime() - 1000); // 1 second ago
428
+ await VaultEntry.create({
429
+ userId: "user-1",
430
+ rawText: "recent",
431
+ isAnalyzed: true,
432
+ lastActivityAt: recent,
433
+ });
434
+ await VaultEntry.create({
435
+ userId: "user-1",
436
+ rawText: "old",
437
+ isAnalyzed: true,
438
+ lastActivityAt: new Date("2020-01-01"),
439
+ });
440
+ const since = new Date(now.getTime() - 5000); // 5 seconds ago
441
+ const results = await adapter.findDeltaEntries("user-1", since);
442
+ expect(results.map((e) => e.rawText)).toContain("recent");
443
+ expect(results.map((e) => e.rawText)).not.toContain("old");
444
+ });
445
+ });
446
+ describe("findContextEntries", () => {
447
+ it("returns analyzed entries with strength >= 3 excluding given ids", async () => {
448
+ const e1 = await seedEntry("user-1", "strong", { strength: 7 });
449
+ const e2 = await seedEntry("user-1", "weak", { strength: 1 });
450
+ await VaultEntry.updateOne({ _id: e1._id }, { isAnalyzed: true });
451
+ await VaultEntry.updateOne({ _id: e2._id }, { isAnalyzed: true });
452
+ const results = await adapter.findContextEntries("user-1", []);
453
+ expect(results.map((e) => e.rawText)).toContain("strong");
454
+ expect(results.map((e) => e.rawText)).not.toContain("weak");
455
+ });
456
+ it("excludes entries in excludeIds", async () => {
457
+ const e1 = await seedEntry("user-1", "included", { strength: 7 });
458
+ const e2 = await seedEntry("user-1", "excluded", { strength: 7 });
459
+ await VaultEntry.updateMany({}, { isAnalyzed: true });
460
+ const results = await adapter.findContextEntries("user-1", [e2._id.toString()]);
461
+ const ids = results.map((e) => e._id.toString());
462
+ expect(ids).toContain(e1._id.toString());
463
+ expect(ids).not.toContain(e2._id.toString());
464
+ });
465
+ });
466
+ // ═══════════════════════════════════════════════════════════════════════════════
467
+ // applyTopicAnalysis
468
+ // ═══════════════════════════════════════════════════════════════════════════════
469
+ describe("applyTopicAnalysis", () => {
470
+ it("updates category, sets isAnalyzed=true, adds tags, increments strength", async () => {
471
+ const e = await seedEntry("user-1", "text", { strength: 3, tags: ["existing"] });
472
+ await adapter.applyTopicAnalysis({
473
+ topic: "ML",
474
+ category: "Tech",
475
+ entryIds: [e._id.toString()],
476
+ tags: ["ml", "ai"],
477
+ importance: 2,
478
+ });
479
+ const updated = await VaultEntry.findById(e._id).lean();
480
+ expect(updated.isAnalyzed).toBe(true);
481
+ expect(updated.analysis.category).toBe("Tech");
482
+ expect(updated.analysis.strength).toBe(5); // 3 + 2
483
+ expect(updated.analysis.tags).toContain("ml");
484
+ expect(updated.analysis.tags).toContain("existing");
485
+ });
486
+ it("returns number of updated entries", async () => {
487
+ const e1 = await seedEntry();
488
+ const e2 = await seedEntry();
489
+ const count = await adapter.applyTopicAnalysis({
490
+ topic: "t",
491
+ category: "c",
492
+ entryIds: [e1._id.toString(), e2._id.toString()],
493
+ tags: [],
494
+ importance: 1,
495
+ });
496
+ expect(count).toBe(2);
497
+ });
498
+ it("returns 0 when entryIds is empty", async () => {
499
+ const count = await adapter.applyTopicAnalysis({
500
+ topic: "t", category: "c", entryIds: [], tags: [], importance: 1,
501
+ });
502
+ expect(count).toBe(0);
503
+ });
504
+ });
505
+ // ═══════════════════════════════════════════════════════════════════════════════
506
+ // findStrongEntries / upsertLTM / markConsolidated
507
+ // ═══════════════════════════════════════════════════════════════════════════════
508
+ describe("findStrongEntries", () => {
509
+ it("returns entries with strength >= 10 and not consolidated", async () => {
510
+ await seedEntry("user-1", "strong", { strength: 10 });
511
+ await seedEntry("user-1", "weak", { strength: 5 });
512
+ const results = await adapter.findStrongEntries("user-1");
513
+ expect(results).toHaveLength(1);
514
+ expect(results[0].rawText).toBe("strong");
515
+ });
516
+ it("excludes consolidated entries", async () => {
517
+ const e = await seedEntry("user-1", "consolidated", { strength: 10 });
518
+ await VaultEntry.updateOne({ _id: e._id }, { isConsolidated: true });
519
+ const results = await adapter.findStrongEntries("user-1");
520
+ expect(results).toHaveLength(0);
521
+ });
522
+ });
523
+ describe("upsertLTM", () => {
524
+ it("creates a new LTM record", async () => {
525
+ const entry = await seedEntry("user-1", "python knowledge", { strength: 10 });
526
+ await adapter.upsertLTM("user-1", "Python", "Tech", { summary: "Python summary", tags: ["python"] }, [entry]);
527
+ const ltm = await LongTermMemory.findOne({ userId: "user-1", topic: "Python" });
528
+ expect(ltm).not.toBeNull();
529
+ expect(ltm.summary).toBe("Python summary");
530
+ expect(ltm.tags).toContain("python");
531
+ });
532
+ it("updates existing LTM (same topic) and merges tags", async () => {
533
+ const e1 = await seedEntry("user-1", "entry1", { strength: 10 });
534
+ await adapter.upsertLTM("user-1", "Python", "Tech", { summary: "v1", tags: ["tag1"] }, [e1]);
535
+ const e2 = await seedEntry("user-1", "entry2", { strength: 10 });
536
+ await adapter.upsertLTM("user-1", "Python", "Tech", { summary: "v2", tags: ["tag2"] }, [e2]);
537
+ const ltm = await LongTermMemory.findOne({ userId: "user-1", topic: "Python" });
538
+ expect(ltm.summary).toBe("v2");
539
+ expect(ltm.tags).toContain("tag1");
540
+ expect(ltm.tags).toContain("tag2");
541
+ // only one LTM record
542
+ const count = await LongTermMemory.countDocuments({ userId: "user-1", topic: "Python" });
543
+ expect(count).toBe(1);
544
+ });
545
+ it("links to category when it exists", async () => {
546
+ const cat = await seedCategory("Tech");
547
+ const entry = await seedEntry("user-1", "text", { strength: 10 });
548
+ await adapter.upsertLTM("user-1", "topic", "Tech", { summary: "s", tags: [] }, [entry]);
549
+ const ltm = await LongTermMemory.findOne({ userId: "user-1" });
550
+ expect(ltm.categoryId.toString()).toBe(cat._id.toString());
551
+ });
552
+ it("sets categoryId=null when category not found", async () => {
553
+ const entry = await seedEntry("user-1", "text", { strength: 10 });
554
+ await adapter.upsertLTM("user-1", "topic", "NonExistent", { summary: "s", tags: [] }, [entry]);
555
+ const ltm = await LongTermMemory.findOne({ userId: "user-1" });
556
+ expect(ltm.categoryId).toBeNull();
557
+ });
558
+ });
559
+ describe("markConsolidated", () => {
560
+ it("sets isConsolidated=true on given entries", async () => {
561
+ const e1 = await seedEntry("user-1", "e1");
562
+ const e2 = await seedEntry("user-1", "e2");
563
+ await adapter.markConsolidated([e1, e2]);
564
+ const updated = await VaultEntry.find({ _id: { $in: [e1._id, e2._id] } }).lean();
565
+ expect(updated.every(e => e.isConsolidated)).toBe(true);
566
+ });
567
+ it("does not affect other entries", async () => {
568
+ const e1 = await seedEntry("user-1", "mark");
569
+ const e2 = await seedEntry("user-1", "leave");
570
+ await adapter.markConsolidated([e1]);
571
+ const untouched = await VaultEntry.findById(e2._id).lean();
572
+ expect(untouched.isConsolidated).toBe(false);
573
+ });
574
+ });
575
+ // ═══════════════════════════════════════════════════════════════════════════════
576
+ // Subconscious: getConsolidatedEntryIds / findEntriesToDecay / decayEntries
577
+ // pruneDeadEntries / pruneDeadSynapses / findEntriesReadyForLTM / countEntries
578
+ // ═══════════════════════════════════════════════════════════════════════════════
579
+ describe("getConsolidatedEntryIds", () => {
580
+ it("returns entry ids referenced in LTM sourceEntryIds", async () => {
581
+ const e1 = await seedEntry("user-1", "consolidated entry");
582
+ await LongTermMemory.create({
583
+ userId: "user-1",
584
+ summary: "s",
585
+ tags: [],
586
+ topic: "t",
587
+ sourceEntryIds: [new mongoose.Types.ObjectId(e1._id.toString())],
588
+ });
589
+ const ids = await adapter.getConsolidatedEntryIds();
590
+ expect(ids).toContain(e1._id.toString());
591
+ });
592
+ it("returns empty array when no LTM records", async () => {
593
+ const ids = await adapter.getConsolidatedEntryIds();
594
+ expect(ids).toHaveLength(0);
595
+ });
596
+ });
597
+ describe("findEntriesToDecay", () => {
598
+ it("returns non-consolidated entries with strength > 0 and lastActivityAt < since", async () => {
599
+ const old = new Date("2020-01-01");
600
+ await VaultEntry.create({
601
+ userId: "user-1",
602
+ rawText: "old entry",
603
+ isConsolidated: false,
604
+ lastActivityAt: old,
605
+ analysis: { strength: 3 },
606
+ });
607
+ const since = new Date();
608
+ const results = await adapter.findEntriesToDecay(since);
609
+ expect(results).toHaveLength(1);
610
+ });
611
+ it("excludes consolidated entries", async () => {
612
+ await VaultEntry.create({
613
+ userId: "user-1",
614
+ rawText: "consolidated",
615
+ isConsolidated: true,
616
+ lastActivityAt: new Date("2020-01-01"),
617
+ analysis: { strength: 5 },
618
+ });
619
+ const results = await adapter.findEntriesToDecay(new Date());
620
+ expect(results).toHaveLength(0);
621
+ });
622
+ it("excludes entries with strength 0", async () => {
623
+ await VaultEntry.create({
624
+ userId: "user-1",
625
+ rawText: "dead",
626
+ isConsolidated: false,
627
+ lastActivityAt: new Date("2020-01-01"),
628
+ analysis: { strength: 0 },
629
+ });
630
+ const results = await adapter.findEntriesToDecay(new Date());
631
+ expect(results).toHaveLength(0);
632
+ });
633
+ });
634
+ describe("decayEntries", () => {
635
+ it("decrements strength by 1 for each entry", async () => {
636
+ const e = await seedEntry("user-1", "text", { strength: 5 });
637
+ await adapter.decayEntries([{ toString: () => e._id.toString() }]);
638
+ const updated = await VaultEntry.findById(e._id).lean();
639
+ expect(updated.analysis.strength).toBe(4);
640
+ });
641
+ it("returns number of modified entries", async () => {
642
+ const e1 = await seedEntry("user-1", "a", { strength: 5 });
643
+ const e2 = await seedEntry("user-1", "b", { strength: 3 });
644
+ const count = await adapter.decayEntries([
645
+ { toString: () => e1._id.toString() },
646
+ { toString: () => e2._id.toString() },
647
+ ]);
648
+ expect(count).toBe(2);
649
+ });
650
+ it("returns 0 when given empty array", async () => {
651
+ const count = await adapter.decayEntries([]);
652
+ expect(count).toBe(0);
653
+ });
654
+ });
655
+ describe("pruneDeadEntries", () => {
656
+ it("deletes non-consolidated entries with strength <= 0", async () => {
657
+ await VaultEntry.create({
658
+ userId: "user-1", rawText: "dead", isConsolidated: false,
659
+ analysis: { strength: 0 },
660
+ });
661
+ await seedEntry("user-1", "alive", { strength: 3 });
662
+ const count = await adapter.pruneDeadEntries();
663
+ expect(count).toBe(1);
664
+ expect(await VaultEntry.countDocuments()).toBe(1);
665
+ });
666
+ it("does not delete consolidated entries with strength 0", async () => {
667
+ await VaultEntry.create({
668
+ userId: "user-1", rawText: "consolidated dead", isConsolidated: true,
669
+ analysis: { strength: 0 },
670
+ });
671
+ const count = await adapter.pruneDeadEntries();
672
+ expect(count).toBe(0);
673
+ });
674
+ });
675
+ describe("pruneDeadSynapses", () => {
676
+ it("deletes synapses with weight <= 0.1", async () => {
677
+ const e1 = await seedEntry("user-1", "A");
678
+ const e2 = await seedEntry("user-1", "B");
679
+ await Synapse.create({
680
+ from: new mongoose.Types.ObjectId(e1._id.toString()),
681
+ to: new mongoose.Types.ObjectId(e2._id.toString()),
682
+ weight: 0.05,
683
+ stability: 0.5,
684
+ });
685
+ const count = await adapter.pruneDeadSynapses();
686
+ expect(count).toBe(1);
687
+ expect(await Synapse.countDocuments()).toBe(0);
688
+ });
689
+ it("keeps synapses with weight > 0.1", async () => {
690
+ const e1 = await seedEntry("user-1", "A");
691
+ const e2 = await seedEntry("user-1", "B");
692
+ await Synapse.create({
693
+ from: new mongoose.Types.ObjectId(e1._id.toString()),
694
+ to: new mongoose.Types.ObjectId(e2._id.toString()),
695
+ weight: 0.5,
696
+ stability: 0.5,
697
+ });
698
+ const count = await adapter.pruneDeadSynapses();
699
+ expect(count).toBe(0);
700
+ });
701
+ });
702
+ describe("findEntriesReadyForLTM", () => {
703
+ it("returns non-consolidated entries with strength >= 10", async () => {
704
+ await seedEntry("user-1", "ready", { strength: 10 });
705
+ await seedEntry("user-1", "not ready", { strength: 5 });
706
+ const results = await adapter.findEntriesReadyForLTM();
707
+ expect(results).toHaveLength(1);
708
+ });
709
+ it("excludes consolidated entries", async () => {
710
+ const e = await seedEntry("user-1", "consolidated", { strength: 10 });
711
+ await VaultEntry.updateOne({ _id: e._id }, { isConsolidated: true });
712
+ const results = await adapter.findEntriesReadyForLTM();
713
+ expect(results).toHaveLength(0);
714
+ });
715
+ });
716
+ describe("countEntries", () => {
717
+ it("returns total number of vault entries", async () => {
718
+ await seedEntry("user-1");
719
+ await seedEntry("user-1");
720
+ await seedEntry("user-2");
721
+ const count = await adapter.countEntries();
722
+ expect(count).toBe(3);
723
+ });
724
+ it("returns 0 when no entries", async () => {
725
+ const count = await adapter.countEntries();
726
+ expect(count).toBe(0);
727
+ });
728
+ });
729
+ //# sourceMappingURL=MongoStorageAdapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MongoStorageAdapter.test.js","sourceRoot":"","sources":["../../src/__tests__/MongoStorageAdapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import mongoose from "mongoose";
2
+ export interface IUserProfileDoc extends mongoose.Document {
3
+ userId: string;
4
+ profile: string;
5
+ updatedAt: Date;
6
+ }
7
+ export declare const UserProfile: mongoose.Model<IUserProfileDoc, {}, {}, {}, mongoose.Document<unknown, {}, IUserProfileDoc, {}, {}> & IUserProfileDoc & Required<{
8
+ _id: mongoose.Types.ObjectId;
9
+ }> & {
10
+ __v: number;
11
+ }, any>;
12
+ //# sourceMappingURL=UserProfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserProfile.d.ts","sourceRoot":"","sources":["../../src/models/UserProfile.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAQhC,MAAM,WAAW,eAAgB,SAAQ,QAAQ,CAAC,QAAQ;IACxD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,eAAO,MAAM,WAAW;;;;OAAoE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import mongoose from "mongoose";
2
+ const userProfileSchema = new mongoose.Schema({
3
+ userId: { type: String, required: true, unique: true },
4
+ profile: { type: String, required: true },
5
+ updatedAt: { type: Date, default: Date.now },
6
+ });
7
+ export const UserProfile = mongoose.model("UserProfile", userProfileSchema);
8
+ //# sourceMappingURL=UserProfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UserProfile.js","sourceRoot":"","sources":["../../src/models/UserProfile.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,iBAAiB,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC;IAC5C,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE;IACtD,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE;IACzC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,EAAE;CAC7C,CAAC,CAAC;AAQH,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAkB,aAAa,EAAE,iBAAiB,CAAC,CAAC"}
@@ -12,6 +12,7 @@ export interface IVaultEntryDoc extends mongoose.Document {
12
12
  embedding?: number[];
13
13
  isAnalyzed: boolean;
14
14
  isConsolidated: boolean;
15
+ isPermanent: boolean;
15
16
  lastActivityAt: Date;
16
17
  createdAt: Date;
17
18
  updatedAt: Date;
@@ -1 +1 @@
1
- {"version":3,"file":"VaultEntry.d.ts","sourceRoot":"","sources":["../../src/models/VaultEntry.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAoEhC,MAAM,WAAW,cAAe,SAAQ,QAAQ,CAAC,QAAQ;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,EAAE,IAAI,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,eAAO,MAAM,UAAU;;;;OAAiE,CAAC"}
1
+ {"version":3,"file":"VaultEntry.d.ts","sourceRoot":"","sources":["../../src/models/VaultEntry.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AA0EhC,MAAM,WAAW,cAAe,SAAQ,QAAQ,CAAC,QAAQ;IACvD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;QACjB,WAAW,EAAE,OAAO,CAAC;KACtB,CAAC;IACF,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,cAAc,EAAE,OAAO,CAAC;IACxB,WAAW,EAAE,OAAO,CAAC;IACrB,cAAc,EAAE,IAAI,CAAC;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,eAAO,MAAM,UAAU;;;;OAAiE,CAAC"}
@@ -26,6 +26,11 @@ const vaultEntrySchema = new mongoose.Schema({
26
26
  default: false,
27
27
  index: true,
28
28
  },
29
+ isPermanent: {
30
+ type: Boolean,
31
+ default: false,
32
+ index: true,
33
+ },
29
34
  embedding: {
30
35
  type: [Number],
31
36
  default: undefined,
@@ -1 +1 @@
1
- {"version":3,"file":"VaultEntry.js","sourceRoot":"","sources":["../../src/models/VaultEntry.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,gBAAgB,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE;QACN,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;KACZ;IAED,OAAO,EAAE;QACP,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IAED,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACzB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;QACvD,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;KAC/C;IAED,UAAU,EAAE;QACV,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;KACZ;IAED,cAAc,EAAE;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;KACZ;IAED,SAAS,EAAE;QACT,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,SAAS;KACnB;IAED,cAAc,EAAE;QACd,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI,CAAC,GAAG;QACjB,KAAK,EAAE,IAAI;KACZ;IAED,SAAS,EAAE;QACT,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI,CAAC,GAAG;KAClB;IAED,SAAS,EAAE;QACT,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI,CAAC,GAAG;KAClB;CACF,CAAC,CAAC;AAEH,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAErD,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI;IACzC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC;AACT,CAAC,CAAC,CAAC;AAEH,gBAAgB,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,IAAI;IACrD,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC;AACT,CAAC,CAAC,CAAC;AAoBH,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAiB,YAAY,EAAE,gBAAgB,CAAC,CAAC"}
1
+ {"version":3,"file":"VaultEntry.js","sourceRoot":"","sources":["../../src/models/VaultEntry.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC,MAAM,gBAAgB,GAAG,IAAI,QAAQ,CAAC,MAAM,CAAC;IAC3C,MAAM,EAAE;QACN,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE,IAAI;KACZ;IAED,OAAO,EAAE;QACP,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,IAAI;KACf;IAED,QAAQ,EAAE;QACR,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACzB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACxB,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;QACvD,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QAC1B,WAAW,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE;KAC/C;IAED,UAAU,EAAE;QACV,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;KACZ;IAED,cAAc,EAAE;QACd,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;KACZ;IAED,WAAW,EAAE;QACX,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,IAAI;KACZ;IAED,SAAS,EAAE;QACT,IAAI,EAAE,CAAC,MAAM,CAAC;QACd,OAAO,EAAE,SAAS;KACnB;IAED,cAAc,EAAE;QACd,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI,CAAC,GAAG;QACjB,KAAK,EAAE,IAAI;KACZ;IAED,SAAS,EAAE;QACT,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI,CAAC,GAAG;KAClB;IAED,SAAS,EAAE;QACT,IAAI,EAAE,IAAI;QACV,OAAO,EAAE,IAAI,CAAC,GAAG;KAClB;CACF,CAAC,CAAC;AAEH,gBAAgB,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AAErD,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,UAAU,IAAI;IACzC,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC;IAC5B,IAAI,EAAE,CAAC;AACT,CAAC,CAAC,CAAC;AAEH,gBAAgB,CAAC,GAAG,CAAC,kBAAkB,EAAE,UAAU,IAAI;IACrD,IAAI,CAAC,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC;AACT,CAAC,CAAC,CAAC;AAqBH,MAAM,CAAC,MAAM,UAAU,GAAG,QAAQ,CAAC,KAAK,CAAiB,YAAY,EAAE,gBAAgB,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,15 @@
1
1
  {
2
2
  "name": "@the-brain/adapter-mongo",
3
- "version": "0.1.0",
3
+ "version": "0.2.1",
4
+ "description": "MongoDB storage adapter for @the-brain/core",
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
+ },
4
13
  "type": "module",
5
14
  "main": "./dist/index.js",
6
15
  "types": "./dist/index.d.ts",
@@ -10,10 +19,14 @@
10
19
  "types": "./dist/index.d.ts"
11
20
  }
12
21
  },
13
- "files": ["dist", "README.md"],
22
+ "files": [
23
+ "dist",
24
+ "README.md"
25
+ ],
14
26
  "scripts": {
15
27
  "build": "tsc",
16
- "dev": "tsc --watch"
28
+ "dev": "tsc --watch",
29
+ "test": "vitest run"
17
30
  },
18
31
  "peerDependencies": {
19
32
  "@the-brain/core": "*",
@@ -21,8 +34,10 @@
21
34
  },
22
35
  "devDependencies": {
23
36
  "@the-brain/core": "*",
37
+ "@types/node": "^22.0.0",
38
+ "mongodb-memory-server": "^11.0.1",
24
39
  "mongoose": "^8.5.0",
25
40
  "typescript": "^5.5.3",
26
- "@types/node": "^22.0.0"
41
+ "vitest": "^4.1.2"
27
42
  }
28
43
  }