@synth-coder/memhub 0.1.6 → 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/AGENTS.md +26 -0
- package/README.md +2 -2
- package/README.zh-CN.md +1 -1
- package/dist/src/contracts/mcp.d.ts +2 -5
- package/dist/src/contracts/mcp.d.ts.map +1 -1
- package/dist/src/contracts/mcp.js +77 -23
- package/dist/src/contracts/mcp.js.map +1 -1
- package/dist/src/contracts/schemas.d.ts +67 -76
- package/dist/src/contracts/schemas.d.ts.map +1 -1
- package/dist/src/contracts/schemas.js +4 -8
- package/dist/src/contracts/schemas.js.map +1 -1
- package/dist/src/contracts/types.d.ts +1 -4
- package/dist/src/contracts/types.d.ts.map +1 -1
- package/dist/src/contracts/types.js.map +1 -1
- package/dist/src/server/mcp-server.d.ts.map +1 -1
- package/dist/src/server/mcp-server.js +21 -4
- package/dist/src/server/mcp-server.js.map +1 -1
- package/dist/src/services/embedding-service.d.ts +43 -0
- package/dist/src/services/embedding-service.d.ts.map +1 -0
- package/dist/src/services/embedding-service.js +80 -0
- package/dist/src/services/embedding-service.js.map +1 -0
- package/dist/src/services/memory-service.d.ts +30 -44
- package/dist/src/services/memory-service.d.ts.map +1 -1
- package/dist/src/services/memory-service.js +212 -161
- package/dist/src/services/memory-service.js.map +1 -1
- package/dist/src/storage/vector-index.d.ts +62 -0
- package/dist/src/storage/vector-index.d.ts.map +1 -0
- package/dist/src/storage/vector-index.js +123 -0
- package/dist/src/storage/vector-index.js.map +1 -0
- package/package.json +17 -13
- package/src/contracts/mcp.ts +84 -30
- package/src/contracts/schemas.ts +4 -8
- package/src/contracts/types.ts +4 -8
- package/src/server/mcp-server.ts +23 -7
- package/src/services/embedding-service.ts +114 -0
- package/src/services/memory-service.ts +252 -179
- package/src/storage/vector-index.ts +160 -0
- package/test/server/mcp-server.test.ts +11 -9
- package/test/services/memory-service-edge.test.ts +1 -1
- package/test/services/memory-service.test.ts +1 -1
- package/test/storage/vector-index.test.ts +153 -0
- package/vitest.config.ts +3 -1
- /package/docs/{proposal-close-gates.md → proposals/proposal-close-gates.md} +0 -0
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Service - Business logic for memory operations
|
|
3
|
-
*/
|
|
4
1
|
import { randomUUID } from 'crypto';
|
|
5
2
|
import { ErrorCode } from '../contracts/types.js';
|
|
6
3
|
import { MarkdownStorage, StorageError } from '../storage/markdown-storage.js';
|
|
@@ -22,15 +19,99 @@ export class ServiceError extends Error {
|
|
|
22
19
|
*/
|
|
23
20
|
export class MemoryService {
|
|
24
21
|
storage;
|
|
22
|
+
vectorIndex;
|
|
23
|
+
embedding;
|
|
24
|
+
vectorSearchEnabled;
|
|
25
25
|
constructor(config) {
|
|
26
26
|
this.storage = new MarkdownStorage({ storagePath: config.storagePath });
|
|
27
|
+
this.vectorSearchEnabled = config.vectorSearch !== false;
|
|
28
|
+
if (this.vectorSearchEnabled) {
|
|
29
|
+
// Lazily resolved at runtime — do not use top-level static imports so that
|
|
30
|
+
// native modules (onnxruntime-node, sharp) are never loaded when vectorSearch=false.
|
|
31
|
+
let resolvedVectorIndex = null;
|
|
32
|
+
let resolvedEmbedding = null;
|
|
33
|
+
// Kick off async initialisation without blocking the constructor.
|
|
34
|
+
// The proxy objects below delegate to the real instances once ready.
|
|
35
|
+
const storagePath = config.storagePath;
|
|
36
|
+
const initPromise = (async () => {
|
|
37
|
+
const [{ VectorIndex }, { EmbeddingService }] = await Promise.all([
|
|
38
|
+
import('../storage/vector-index.js'),
|
|
39
|
+
import('./embedding-service.js'),
|
|
40
|
+
]);
|
|
41
|
+
resolvedVectorIndex = new VectorIndex(storagePath);
|
|
42
|
+
resolvedEmbedding = EmbeddingService.getInstance();
|
|
43
|
+
})();
|
|
44
|
+
// Lightweight proxy that waits for init before delegating
|
|
45
|
+
this.vectorIndex = {
|
|
46
|
+
upsert: async (memory, vector) => {
|
|
47
|
+
await initPromise;
|
|
48
|
+
return resolvedVectorIndex.upsert(memory, vector);
|
|
49
|
+
},
|
|
50
|
+
delete: async (id) => {
|
|
51
|
+
await initPromise;
|
|
52
|
+
return resolvedVectorIndex.delete(id);
|
|
53
|
+
},
|
|
54
|
+
search: async (vector, limit) => {
|
|
55
|
+
await initPromise;
|
|
56
|
+
return resolvedVectorIndex.search(vector, limit);
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
this.embedding = {
|
|
60
|
+
embedMemory: async (title, content) => {
|
|
61
|
+
await initPromise;
|
|
62
|
+
return resolvedEmbedding.embedMemory(title, content);
|
|
63
|
+
},
|
|
64
|
+
embed: async (text) => {
|
|
65
|
+
await initPromise;
|
|
66
|
+
return resolvedEmbedding.embed(text);
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
this.vectorIndex = null;
|
|
72
|
+
this.embedding = null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
// ---------------------------------------------------------------------------
|
|
76
|
+
// Internal helpers
|
|
77
|
+
// ---------------------------------------------------------------------------
|
|
78
|
+
/**
|
|
79
|
+
* Asynchronously embeds a memory and upserts it into the vector index.
|
|
80
|
+
* Fire-and-forget: failures are logged but do not propagate.
|
|
81
|
+
*/
|
|
82
|
+
scheduleVectorUpsert(memory) {
|
|
83
|
+
if (!this.vectorIndex || !this.embedding)
|
|
84
|
+
return;
|
|
85
|
+
const vectorIndex = this.vectorIndex;
|
|
86
|
+
const embedding = this.embedding;
|
|
87
|
+
// Intentionally not awaited
|
|
88
|
+
embedding
|
|
89
|
+
.embedMemory(memory.title, memory.content)
|
|
90
|
+
.then(vec => vectorIndex.upsert(memory, vec))
|
|
91
|
+
.catch(err => {
|
|
92
|
+
// Non-fatal: Markdown file is the source of truth
|
|
93
|
+
console.error('[MemHub] Vector upsert failed (non-fatal):', err);
|
|
94
|
+
});
|
|
27
95
|
}
|
|
96
|
+
/**
|
|
97
|
+
* Removes a memory from the vector index.
|
|
98
|
+
* Called synchronously (awaited) on delete.
|
|
99
|
+
*/
|
|
100
|
+
async removeFromVectorIndex(id) {
|
|
101
|
+
if (!this.vectorIndex)
|
|
102
|
+
return;
|
|
103
|
+
try {
|
|
104
|
+
await this.vectorIndex.delete(id);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
console.error('[MemHub] Vector delete failed (non-fatal):', err);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
// ---------------------------------------------------------------------------
|
|
111
|
+
// CRUD operations
|
|
112
|
+
// ---------------------------------------------------------------------------
|
|
28
113
|
/**
|
|
29
114
|
* Creates a new memory entry
|
|
30
|
-
*
|
|
31
|
-
* @param input - Create memory input
|
|
32
|
-
* @returns Create result with ID, file path, and memory object
|
|
33
|
-
* @throws ServiceError if creation fails
|
|
34
115
|
*/
|
|
35
116
|
async create(input) {
|
|
36
117
|
const now = new Date().toISOString();
|
|
@@ -47,11 +128,8 @@ export class MemoryService {
|
|
|
47
128
|
};
|
|
48
129
|
try {
|
|
49
130
|
const filePath = await this.storage.write(memory);
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
filePath,
|
|
53
|
-
memory,
|
|
54
|
-
};
|
|
131
|
+
this.scheduleVectorUpsert(memory);
|
|
132
|
+
return { id, filePath, memory };
|
|
55
133
|
}
|
|
56
134
|
catch (error) {
|
|
57
135
|
throw new ServiceError(`Failed to create memory: ${error instanceof Error ? error.message : 'Unknown error'}`, ErrorCode.STORAGE_ERROR);
|
|
@@ -59,10 +137,6 @@ export class MemoryService {
|
|
|
59
137
|
}
|
|
60
138
|
/**
|
|
61
139
|
* Reads a memory by ID
|
|
62
|
-
*
|
|
63
|
-
* @param input - Read memory input
|
|
64
|
-
* @returns Memory object
|
|
65
|
-
* @throws ServiceError if memory not found
|
|
66
140
|
*/
|
|
67
141
|
async read(input) {
|
|
68
142
|
try {
|
|
@@ -78,13 +152,8 @@ export class MemoryService {
|
|
|
78
152
|
}
|
|
79
153
|
/**
|
|
80
154
|
* Updates an existing memory
|
|
81
|
-
*
|
|
82
|
-
* @param input - Update memory input
|
|
83
|
-
* @returns Updated memory object
|
|
84
|
-
* @throws ServiceError if memory not found
|
|
85
155
|
*/
|
|
86
156
|
async update(input) {
|
|
87
|
-
// First read the existing memory
|
|
88
157
|
let existing;
|
|
89
158
|
try {
|
|
90
159
|
existing = await this.storage.read(input.id);
|
|
@@ -95,7 +164,6 @@ export class MemoryService {
|
|
|
95
164
|
}
|
|
96
165
|
throw new ServiceError(`Failed to read memory for update: ${error instanceof Error ? error.message : 'Unknown error'}`, ErrorCode.STORAGE_ERROR);
|
|
97
166
|
}
|
|
98
|
-
// Apply updates
|
|
99
167
|
const updated = {
|
|
100
168
|
...existing,
|
|
101
169
|
updatedAt: new Date().toISOString(),
|
|
@@ -107,6 +175,7 @@ export class MemoryService {
|
|
|
107
175
|
};
|
|
108
176
|
try {
|
|
109
177
|
await this.storage.write(updated);
|
|
178
|
+
this.scheduleVectorUpsert(updated);
|
|
110
179
|
return { memory: updated };
|
|
111
180
|
}
|
|
112
181
|
catch (error) {
|
|
@@ -115,18 +184,12 @@ export class MemoryService {
|
|
|
115
184
|
}
|
|
116
185
|
/**
|
|
117
186
|
* Deletes a memory by ID
|
|
118
|
-
*
|
|
119
|
-
* @param input - Delete memory input
|
|
120
|
-
* @returns Delete result
|
|
121
|
-
* @throws ServiceError if memory not found
|
|
122
187
|
*/
|
|
123
188
|
async delete(input) {
|
|
124
189
|
try {
|
|
125
190
|
const filePath = await this.storage.delete(input.id);
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
filePath,
|
|
129
|
-
};
|
|
191
|
+
await this.removeFromVectorIndex(input.id);
|
|
192
|
+
return { success: true, filePath };
|
|
130
193
|
}
|
|
131
194
|
catch (error) {
|
|
132
195
|
if (error instanceof StorageError && error.message.includes('not found')) {
|
|
@@ -135,16 +198,15 @@ export class MemoryService {
|
|
|
135
198
|
throw new ServiceError(`Failed to delete memory: ${error instanceof Error ? error.message : 'Unknown error'}`, ErrorCode.STORAGE_ERROR);
|
|
136
199
|
}
|
|
137
200
|
}
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
// List / Search
|
|
203
|
+
// ---------------------------------------------------------------------------
|
|
138
204
|
/**
|
|
139
205
|
* Lists memories with filtering and pagination
|
|
140
|
-
*
|
|
141
|
-
* @param input - List memory input
|
|
142
|
-
* @returns List result with memories, total count, and hasMore flag
|
|
143
206
|
*/
|
|
144
207
|
async list(input) {
|
|
145
208
|
try {
|
|
146
209
|
const files = await this.storage.list();
|
|
147
|
-
// Parse all files into memories
|
|
148
210
|
let memories = [];
|
|
149
211
|
for (const file of files) {
|
|
150
212
|
try {
|
|
@@ -152,11 +214,9 @@ export class MemoryService {
|
|
|
152
214
|
memories.push(memory);
|
|
153
215
|
}
|
|
154
216
|
catch {
|
|
155
|
-
// Skip invalid files
|
|
156
217
|
continue;
|
|
157
218
|
}
|
|
158
219
|
}
|
|
159
|
-
// Apply filters
|
|
160
220
|
if (input.category) {
|
|
161
221
|
memories = memories.filter(m => m.category === input.category);
|
|
162
222
|
}
|
|
@@ -169,7 +229,6 @@ export class MemoryService {
|
|
|
169
229
|
if (input.toDate) {
|
|
170
230
|
memories = memories.filter(m => m.createdAt <= input.toDate);
|
|
171
231
|
}
|
|
172
|
-
// Sort
|
|
173
232
|
const sortBy = input.sortBy ?? 'createdAt';
|
|
174
233
|
const sortOrder = input.sortOrder ?? 'desc';
|
|
175
234
|
memories.sort((a, b) => {
|
|
@@ -190,16 +249,14 @@ export class MemoryService {
|
|
|
190
249
|
}
|
|
191
250
|
return sortOrder === 'asc' ? comparison : -comparison;
|
|
192
251
|
});
|
|
193
|
-
// Apply pagination
|
|
194
252
|
const total = memories.length;
|
|
195
253
|
const limit = input.limit ?? 20;
|
|
196
254
|
const offset = input.offset ?? 0;
|
|
197
255
|
const paginatedMemories = memories.slice(offset, offset + limit);
|
|
198
|
-
const hasMore = offset + limit < total;
|
|
199
256
|
return {
|
|
200
257
|
memories: paginatedMemories,
|
|
201
258
|
total,
|
|
202
|
-
hasMore,
|
|
259
|
+
hasMore: offset + limit < total,
|
|
203
260
|
};
|
|
204
261
|
}
|
|
205
262
|
catch (error) {
|
|
@@ -207,104 +264,130 @@ export class MemoryService {
|
|
|
207
264
|
}
|
|
208
265
|
}
|
|
209
266
|
/**
|
|
210
|
-
* Searches memories by query
|
|
211
|
-
*
|
|
212
|
-
* @param input - Search memory input
|
|
213
|
-
* @returns Search results with scores and matches
|
|
267
|
+
* Searches memories by query.
|
|
268
|
+
* Uses vector semantic search when available, falls back to keyword search.
|
|
214
269
|
*/
|
|
215
270
|
async search(input) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
matches.push(memory.title);
|
|
233
|
-
}
|
|
234
|
-
else {
|
|
235
|
-
// Check individual keywords in title
|
|
236
|
-
for (const keyword of keywords) {
|
|
237
|
-
if (titleLower.includes(keyword)) {
|
|
238
|
-
score += 5;
|
|
239
|
-
if (!matches.includes(memory.title)) {
|
|
240
|
-
matches.push(memory.title);
|
|
241
|
-
}
|
|
271
|
+
// --- Vector semantic search path ---
|
|
272
|
+
if (this.vectorSearchEnabled && this.vectorIndex && this.embedding) {
|
|
273
|
+
try {
|
|
274
|
+
const queryVec = await this.embedding.embed(input.query);
|
|
275
|
+
const vectorResults = await this.vectorIndex.search(queryVec, input.limit ?? 10);
|
|
276
|
+
const results = [];
|
|
277
|
+
for (const vr of vectorResults) {
|
|
278
|
+
try {
|
|
279
|
+
const { memory } = await this.read({ id: vr.id });
|
|
280
|
+
// Apply metadata filters
|
|
281
|
+
if (input.category && memory.category !== input.category)
|
|
282
|
+
continue;
|
|
283
|
+
if (input.tags &&
|
|
284
|
+
input.tags.length > 0 &&
|
|
285
|
+
!input.tags.every(t => memory.tags.includes(t))) {
|
|
286
|
+
continue;
|
|
242
287
|
}
|
|
288
|
+
// Convert cosine distance (0‥2) → similarity score (0‥1)
|
|
289
|
+
const score = Math.max(0, 1 - vr._distance / 2);
|
|
290
|
+
results.push({ memory, score, matches: [memory.title] });
|
|
291
|
+
}
|
|
292
|
+
catch {
|
|
293
|
+
// Memory in index but missing on disk — skip
|
|
243
294
|
}
|
|
244
295
|
}
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
296
|
+
return { results, total: results.length };
|
|
297
|
+
}
|
|
298
|
+
catch (err) {
|
|
299
|
+
// Fall through to keyword search on vector failure
|
|
300
|
+
console.error('[MemHub] Vector search failed, falling back to keyword search:', err);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// --- Keyword search fallback ---
|
|
304
|
+
return this.keywordSearch(input);
|
|
305
|
+
}
|
|
306
|
+
/**
|
|
307
|
+
* Legacy keyword-based search (used as fallback when vector search is unavailable).
|
|
308
|
+
*/
|
|
309
|
+
async keywordSearch(input) {
|
|
310
|
+
const listResult = await this.list({
|
|
311
|
+
category: input.category,
|
|
312
|
+
tags: input.tags,
|
|
313
|
+
limit: 1000,
|
|
314
|
+
});
|
|
315
|
+
const query = input.query.toLowerCase();
|
|
316
|
+
const keywords = query.split(/\s+/).filter(k => k.length > 0);
|
|
317
|
+
const results = [];
|
|
318
|
+
for (const memory of listResult.memories) {
|
|
319
|
+
let score = 0;
|
|
320
|
+
const matches = [];
|
|
321
|
+
const titleLower = memory.title.toLowerCase();
|
|
322
|
+
if (titleLower.includes(query)) {
|
|
323
|
+
score += 10;
|
|
324
|
+
matches.push(memory.title);
|
|
325
|
+
}
|
|
326
|
+
else {
|
|
327
|
+
for (const keyword of keywords) {
|
|
328
|
+
if (titleLower.includes(keyword)) {
|
|
329
|
+
score += 5;
|
|
330
|
+
if (!matches.includes(memory.title))
|
|
331
|
+
matches.push(memory.title);
|
|
269
332
|
}
|
|
270
333
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
334
|
+
}
|
|
335
|
+
const contentLower = memory.content.toLowerCase();
|
|
336
|
+
if (contentLower.includes(query)) {
|
|
337
|
+
score += 3;
|
|
338
|
+
const index = contentLower.indexOf(query);
|
|
339
|
+
const start = Math.max(0, index - 50);
|
|
340
|
+
const end = Math.min(contentLower.length, index + query.length + 50);
|
|
341
|
+
matches.push(memory.content.slice(start, end));
|
|
342
|
+
}
|
|
343
|
+
else {
|
|
344
|
+
for (const keyword of keywords) {
|
|
345
|
+
if (contentLower.includes(keyword)) {
|
|
346
|
+
score += 1;
|
|
347
|
+
const index = contentLower.indexOf(keyword);
|
|
348
|
+
const start = Math.max(0, index - 30);
|
|
349
|
+
const end = Math.min(contentLower.length, index + keyword.length + 30);
|
|
350
|
+
const snippet = memory.content.slice(start, end);
|
|
351
|
+
if (!matches.some(m => m.includes(snippet)))
|
|
352
|
+
matches.push(snippet);
|
|
276
353
|
}
|
|
277
354
|
}
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
});
|
|
355
|
+
}
|
|
356
|
+
for (const tag of memory.tags) {
|
|
357
|
+
if (tag.toLowerCase().includes(query) ||
|
|
358
|
+
keywords.some(k => tag.toLowerCase().includes(k))) {
|
|
359
|
+
score += 2;
|
|
360
|
+
matches.push(`Tag: ${tag}`);
|
|
284
361
|
}
|
|
285
362
|
}
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
total: results.length,
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
catch (error) {
|
|
297
|
-
throw new ServiceError(`Failed to search memories: ${error instanceof Error ? error.message : 'Unknown error'}`, ErrorCode.STORAGE_ERROR);
|
|
363
|
+
if (score > 0) {
|
|
364
|
+
results.push({
|
|
365
|
+
memory,
|
|
366
|
+
score: Math.min(score / 20, 1),
|
|
367
|
+
matches: matches.slice(0, 3),
|
|
368
|
+
});
|
|
369
|
+
}
|
|
298
370
|
}
|
|
371
|
+
results.sort((a, b) => b.score - a.score);
|
|
372
|
+
const limit = input.limit ?? 10;
|
|
373
|
+
return { results: results.slice(0, limit), total: results.length };
|
|
299
374
|
}
|
|
375
|
+
// ---------------------------------------------------------------------------
|
|
376
|
+
// MCP unified tools
|
|
377
|
+
// ---------------------------------------------------------------------------
|
|
300
378
|
/**
|
|
301
|
-
* memory_load unified read API
|
|
379
|
+
* memory_load — unified read API.
|
|
380
|
+
*
|
|
381
|
+
* Requires either `id` (exact lookup) or `query` (semantic search).
|
|
382
|
+
* Calling without either returns an empty result.
|
|
302
383
|
*/
|
|
303
384
|
async memoryLoad(input) {
|
|
385
|
+
// By-ID lookup
|
|
304
386
|
if (input.id) {
|
|
305
387
|
const { memory } = await this.read({ id: input.id });
|
|
306
388
|
return { items: [memory], total: 1 };
|
|
307
389
|
}
|
|
390
|
+
// Semantic / keyword search
|
|
308
391
|
if (input.query) {
|
|
309
392
|
const searched = await this.search({
|
|
310
393
|
query: input.query,
|
|
@@ -312,31 +395,14 @@ export class MemoryService {
|
|
|
312
395
|
tags: input.tags,
|
|
313
396
|
limit: input.limit,
|
|
314
397
|
});
|
|
315
|
-
|
|
316
|
-
if (input.sessionId) {
|
|
317
|
-
items = items.filter(m => m.sessionId === input.sessionId);
|
|
318
|
-
}
|
|
398
|
+
const items = searched.results.map(r => r.memory);
|
|
319
399
|
return { items, total: items.length };
|
|
320
400
|
}
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
tags: input.tags,
|
|
324
|
-
limit: input.limit ?? 20,
|
|
325
|
-
sortBy: 'updatedAt',
|
|
326
|
-
sortOrder: 'desc',
|
|
327
|
-
});
|
|
328
|
-
let items = [...listResult.memories];
|
|
329
|
-
if (input.sessionId) {
|
|
330
|
-
items = items.filter(m => m.sessionId === input.sessionId);
|
|
331
|
-
}
|
|
332
|
-
if (input.date) {
|
|
333
|
-
const date = input.date;
|
|
334
|
-
items = items.filter(m => m.createdAt.startsWith(date));
|
|
335
|
-
}
|
|
336
|
-
return { items, total: items.length };
|
|
401
|
+
// No id and no query — return empty (not supported)
|
|
402
|
+
return { items: [], total: 0 };
|
|
337
403
|
}
|
|
338
404
|
/**
|
|
339
|
-
* memory_update unified write API (append/upsert)
|
|
405
|
+
* memory_update — unified write API (append/upsert)
|
|
340
406
|
*/
|
|
341
407
|
async memoryUpdate(input) {
|
|
342
408
|
const now = new Date().toISOString();
|
|
@@ -356,6 +422,7 @@ export class MemoryService {
|
|
|
356
422
|
entryType: input.entryType,
|
|
357
423
|
};
|
|
358
424
|
const filePath = await this.storage.write(updatedMemory);
|
|
425
|
+
this.scheduleVectorUpsert(updatedMemory);
|
|
359
426
|
return {
|
|
360
427
|
id: updatedMemory.id,
|
|
361
428
|
sessionId,
|
|
@@ -379,6 +446,7 @@ export class MemoryService {
|
|
|
379
446
|
content: input.content,
|
|
380
447
|
};
|
|
381
448
|
const filePath = await this.storage.write(createdMemory);
|
|
449
|
+
this.scheduleVectorUpsert(createdMemory);
|
|
382
450
|
return {
|
|
383
451
|
id,
|
|
384
452
|
sessionId,
|
|
@@ -388,11 +456,9 @@ export class MemoryService {
|
|
|
388
456
|
memory: createdMemory,
|
|
389
457
|
};
|
|
390
458
|
}
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
* @returns Array of category names
|
|
395
|
-
*/
|
|
459
|
+
// ---------------------------------------------------------------------------
|
|
460
|
+
// Metadata helpers
|
|
461
|
+
// ---------------------------------------------------------------------------
|
|
396
462
|
async getCategories() {
|
|
397
463
|
try {
|
|
398
464
|
const listResult = await this.list({ limit: 1000 });
|
|
@@ -400,19 +466,12 @@ export class MemoryService {
|
|
|
400
466
|
for (const memory of listResult.memories) {
|
|
401
467
|
categories.add(memory.category);
|
|
402
468
|
}
|
|
403
|
-
return {
|
|
404
|
-
categories: Array.from(categories).sort(),
|
|
405
|
-
};
|
|
469
|
+
return { categories: Array.from(categories).sort() };
|
|
406
470
|
}
|
|
407
471
|
catch (error) {
|
|
408
472
|
throw new ServiceError(`Failed to get categories: ${error instanceof Error ? error.message : 'Unknown error'}`, ErrorCode.STORAGE_ERROR);
|
|
409
473
|
}
|
|
410
474
|
}
|
|
411
|
-
/**
|
|
412
|
-
* Gets all unique tags
|
|
413
|
-
*
|
|
414
|
-
* @returns Array of tag names
|
|
415
|
-
*/
|
|
416
475
|
async getTags() {
|
|
417
476
|
try {
|
|
418
477
|
const listResult = await this.list({ limit: 1000 });
|
|
@@ -422,20 +481,12 @@ export class MemoryService {
|
|
|
422
481
|
tags.add(tag);
|
|
423
482
|
}
|
|
424
483
|
}
|
|
425
|
-
return {
|
|
426
|
-
tags: Array.from(tags).sort(),
|
|
427
|
-
};
|
|
484
|
+
return { tags: Array.from(tags).sort() };
|
|
428
485
|
}
|
|
429
486
|
catch (error) {
|
|
430
487
|
throw new ServiceError(`Failed to get tags: ${error instanceof Error ? error.message : 'Unknown error'}`, ErrorCode.STORAGE_ERROR);
|
|
431
488
|
}
|
|
432
489
|
}
|
|
433
|
-
/**
|
|
434
|
-
* Extracts ID from file content
|
|
435
|
-
*
|
|
436
|
-
* @param content - File content
|
|
437
|
-
* @returns ID string
|
|
438
|
-
*/
|
|
439
490
|
extractIdFromContent(content) {
|
|
440
491
|
const match = content.match(/id:\s*"?([^"\n]+)"?/);
|
|
441
492
|
if (!match) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-service.js","sourceRoot":"","sources":["../../../src/services/memory-service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory-service.js","sourceRoot":"","sources":["../../../src/services/memory-service.ts"],"names":[],"mappings":"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"}
|