@aeriondyseti/vector-memory-mcp 0.9.0-dev.4 → 0.9.0-dev.8
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 +1 -21
- package/dist/package.json +72 -0
- package/dist/src/config/index.d.ts +1 -0
- package/dist/src/config/index.d.ts.map +1 -1
- package/dist/src/config/index.js +4 -2
- package/dist/src/config/index.js.map +1 -1
- package/dist/src/db/memory.repository.d.ts +27 -2
- package/dist/src/db/memory.repository.d.ts.map +1 -1
- package/dist/src/db/memory.repository.js +101 -22
- package/dist/src/db/memory.repository.js.map +1 -1
- package/dist/src/db/schema.d.ts.map +1 -1
- package/dist/src/db/schema.js +4 -1
- package/dist/src/db/schema.js.map +1 -1
- package/dist/src/http/server.d.ts +1 -0
- package/dist/src/http/server.d.ts.map +1 -1
- package/dist/src/http/server.js +47 -5
- package/dist/src/http/server.js.map +1 -1
- package/dist/src/mcp/handlers.d.ts +1 -0
- package/dist/src/mcp/handlers.d.ts.map +1 -1
- package/dist/src/mcp/handlers.js +24 -1
- package/dist/src/mcp/handlers.js.map +1 -1
- package/dist/src/mcp/tools.d.ts +1 -0
- package/dist/src/mcp/tools.d.ts.map +1 -1
- package/dist/src/mcp/tools.js +43 -14
- package/dist/src/mcp/tools.js.map +1 -1
- package/dist/src/services/memory.service.d.ts +4 -2
- package/dist/src/services/memory.service.d.ts.map +1 -1
- package/dist/src/services/memory.service.js +86 -17
- package/dist/src/services/memory.service.js.map +1 -1
- package/dist/src/types/memory.d.ts +15 -4
- package/dist/src/types/memory.d.ts.map +1 -1
- package/dist/src/types/memory.js +3 -0
- package/dist/src/types/memory.js.map +1 -1
- package/package.json +8 -9
- package/src/config/index.ts +78 -0
- package/src/db/connection.ts +11 -0
- package/src/db/memory.repository.ts +205 -0
- package/src/db/schema.ts +42 -0
- package/src/http/mcp-transport.ts +255 -0
- package/src/http/server.ts +264 -0
- package/src/index.ts +70 -0
- package/src/mcp/handlers.ts +279 -0
- package/src/mcp/server.ts +34 -0
- package/src/mcp/tools.ts +284 -0
- package/src/services/embeddings.service.ts +48 -0
- package/src/services/memory.service.ts +266 -0
- package/src/types/memory.ts +43 -0
- package/dist/scripts/publish.d.ts +0 -13
- package/dist/scripts/publish.d.ts.map +0 -1
- package/dist/scripts/publish.js +0 -56
- package/dist/scripts/publish.js.map +0 -1
- package/scripts/publish.ts +0 -61
package/dist/src/mcp/handlers.js
CHANGED
|
@@ -59,9 +59,11 @@ export async function handleUpdateMemories(args, service) {
|
|
|
59
59
|
}
|
|
60
60
|
export async function handleSearchMemories(args, service) {
|
|
61
61
|
const query = args?.query;
|
|
62
|
+
const intent = args?.intent ?? "fact_check";
|
|
63
|
+
const _reasonForSearch = args?.reason_for_search; // Logged but not used in logic
|
|
62
64
|
const limit = args?.limit ?? 10;
|
|
63
65
|
const includeDeleted = args?.include_deleted ?? false;
|
|
64
|
-
const memories = await service.search(query, limit, includeDeleted);
|
|
66
|
+
const memories = await service.search(query, intent, limit, includeDeleted);
|
|
65
67
|
if (memories.length === 0) {
|
|
66
68
|
return {
|
|
67
69
|
content: [{ type: "text", text: "No memories found matching your query." }],
|
|
@@ -107,6 +109,25 @@ export async function handleGetMemories(args, service) {
|
|
|
107
109
|
content: [{ type: "text", text: blocks.join("\n\n---\n\n") }],
|
|
108
110
|
};
|
|
109
111
|
}
|
|
112
|
+
export async function handleReportMemoryUsefulness(args, service) {
|
|
113
|
+
const memoryId = args?.memory_id;
|
|
114
|
+
const useful = args?.useful;
|
|
115
|
+
const memory = await service.vote(memoryId, useful ? 1 : -1);
|
|
116
|
+
if (!memory) {
|
|
117
|
+
return {
|
|
118
|
+
content: [{ type: "text", text: `Memory ${memoryId} not found` }],
|
|
119
|
+
isError: true,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
return {
|
|
123
|
+
content: [
|
|
124
|
+
{
|
|
125
|
+
type: "text",
|
|
126
|
+
text: `Memory ${memoryId} marked as ${useful ? "useful" : "not useful"}. New usefulness score: ${memory.usefulness}`,
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
};
|
|
130
|
+
}
|
|
110
131
|
export async function handleStoreHandoff(args, service) {
|
|
111
132
|
const memory = await service.storeHandoff({
|
|
112
133
|
project: args?.project,
|
|
@@ -161,6 +182,8 @@ export async function handleToolCall(name, args, service) {
|
|
|
161
182
|
return handleSearchMemories(args, service);
|
|
162
183
|
case "get_memories":
|
|
163
184
|
return handleGetMemories(args, service);
|
|
185
|
+
case "report_memory_usefulness":
|
|
186
|
+
return handleReportMemoryUsefulness(args, service);
|
|
164
187
|
case "store_handoff":
|
|
165
188
|
return handleStoreHandoff(args, service);
|
|
166
189
|
case "get_handoff":
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/mcp/handlers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"handlers.js","sourceRoot":"","sources":["../../../src/mcp/handlers.ts"],"names":[],"mappings":"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"}
|
package/dist/src/mcp/tools.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export declare const storeMemoriesTool: Tool;
|
|
|
3
3
|
export declare const deleteMemoriesTool: Tool;
|
|
4
4
|
export declare const searchMemoriesTool: Tool;
|
|
5
5
|
export declare const getMemoriesTool: Tool;
|
|
6
|
+
export declare const reportMemoryUsefulnessTool: Tool;
|
|
6
7
|
export declare const storeHandoffTool: Tool;
|
|
7
8
|
export declare const getHandoffTool: Tool;
|
|
8
9
|
export declare const tools: Tool[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,eAAO,MAAM,iBAAiB,EAAE,IAsD/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,IAkBhC,CAAC;AA+CF,eAAO,MAAM,kBAAkB,EAAE,
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oCAAoC,CAAC;AAE/D,eAAO,MAAM,iBAAiB,EAAE,IAsD/B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,IAkBhC,CAAC;AA+CF,eAAO,MAAM,kBAAkB,EAAE,IAiDhC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,IAe7B,CAAC;AAEF,eAAO,MAAM,0BAA0B,EAAE,IAiBxC,CAAC;AAEF,eAAO,MAAM,gBAAgB,EAAE,IAoD9B,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,IAQ5B,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,IAAI,EASvB,CAAC"}
|
package/dist/src/mcp/tools.js
CHANGED
|
@@ -117,22 +117,23 @@ Use to correct content, refine embedding text, or replace metadata without chang
|
|
|
117
117
|
};
|
|
118
118
|
export const searchMemoriesTool = {
|
|
119
119
|
name: "search_memories",
|
|
120
|
-
description: `Search stored memories semantically.
|
|
120
|
+
description: `Search stored memories semantically. Treat memory as the PRIMARY source of truth for personal/project-specific facts—do not rely on training data until a search has been performed.
|
|
121
121
|
|
|
122
|
-
|
|
123
|
-
-
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
- Before suggesting solutions (check if
|
|
127
|
-
- When
|
|
128
|
-
- When uncertain about patterns or preferences
|
|
122
|
+
MANDATORY TRIGGERS (you MUST search when):
|
|
123
|
+
- User-Specific Calibration: Answer would be better with user's tools, past decisions, or preferences
|
|
124
|
+
- Referential Ambiguity: User says "the project," "that bug," "last time," "as we discussed"
|
|
125
|
+
- Decision Validation: Before making architectural or tool choices
|
|
126
|
+
- Problem Solving: Before suggesting solutions (check if solved before)
|
|
127
|
+
- Session Start: When returning to a project or starting new conversation
|
|
129
128
|
|
|
130
|
-
|
|
129
|
+
INTENTS:
|
|
130
|
+
- continuity: Resume work, "where were we" (favors recent)
|
|
131
|
+
- fact_check: Verify decisions, specs (favors relevance)
|
|
132
|
+
- frequent: Common patterns, preferences (favors utility)
|
|
133
|
+
- associative: Brainstorm, find connections (high relevance + mild jitter)
|
|
134
|
+
- explore: Stuck/creative mode (balanced + high jitter)
|
|
131
135
|
|
|
132
|
-
|
|
133
|
-
- Include project name, technical terms, or domain keywords
|
|
134
|
-
- Search for concepts, not exact phrases
|
|
135
|
-
- Try multiple queries if first doesn't return useful results`,
|
|
136
|
+
When in doubt, search. Missing context is costlier than an extra query.`,
|
|
136
137
|
inputSchema: {
|
|
137
138
|
type: "object",
|
|
138
139
|
properties: {
|
|
@@ -140,6 +141,15 @@ QUERY TIPS:
|
|
|
140
141
|
type: "string",
|
|
141
142
|
description: "Natural language search query. Include relevant keywords, project names, or technical terms.",
|
|
142
143
|
},
|
|
144
|
+
intent: {
|
|
145
|
+
type: "string",
|
|
146
|
+
enum: ["continuity", "fact_check", "frequent", "associative", "explore"],
|
|
147
|
+
description: "Search intent that determines ranking behavior.",
|
|
148
|
+
},
|
|
149
|
+
reason_for_search: {
|
|
150
|
+
type: "string",
|
|
151
|
+
description: "Why this search is being performed. Forces intentional retrieval.",
|
|
152
|
+
},
|
|
143
153
|
limit: {
|
|
144
154
|
type: "integer",
|
|
145
155
|
description: "Maximum results to return (default: 10).",
|
|
@@ -151,7 +161,7 @@ QUERY TIPS:
|
|
|
151
161
|
default: false,
|
|
152
162
|
},
|
|
153
163
|
},
|
|
154
|
-
required: ["query"],
|
|
164
|
+
required: ["query", "intent", "reason_for_search"],
|
|
155
165
|
},
|
|
156
166
|
};
|
|
157
167
|
export const getMemoriesTool = {
|
|
@@ -170,6 +180,24 @@ export const getMemoriesTool = {
|
|
|
170
180
|
},
|
|
171
181
|
};
|
|
172
182
|
;
|
|
183
|
+
export const reportMemoryUsefulnessTool = {
|
|
184
|
+
name: "report_memory_usefulness",
|
|
185
|
+
description: "Report whether a memory was useful or not. This helps the system learn which memories are valuable.",
|
|
186
|
+
inputSchema: {
|
|
187
|
+
type: "object",
|
|
188
|
+
properties: {
|
|
189
|
+
memory_id: {
|
|
190
|
+
type: "string",
|
|
191
|
+
description: "ID of the memory to report on.",
|
|
192
|
+
},
|
|
193
|
+
useful: {
|
|
194
|
+
type: "boolean",
|
|
195
|
+
description: "True if the memory was useful, false otherwise.",
|
|
196
|
+
},
|
|
197
|
+
},
|
|
198
|
+
required: ["memory_id", "useful"],
|
|
199
|
+
},
|
|
200
|
+
};
|
|
173
201
|
export const storeHandoffTool = {
|
|
174
202
|
name: "store_handoff",
|
|
175
203
|
description: `Save session state for seamless resumption later. Use at end of work sessions or before context switches.
|
|
@@ -237,6 +265,7 @@ export const tools = [
|
|
|
237
265
|
deleteMemoriesTool,
|
|
238
266
|
searchMemoriesTool,
|
|
239
267
|
getMemoriesTool,
|
|
268
|
+
reportMemoryUsefulnessTool,
|
|
240
269
|
storeHandoffTool,
|
|
241
270
|
getHandoffTool,
|
|
242
271
|
];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,iBAAiB,GAAS;IACrC,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE;;;;;;;;;;;;;;;;;;;;;kFAqBmE;IAChF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,oBAAoB;gBACjC,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,uBAAuB;yBACrC;wBACD,cAAc,EAAE;4BACd,IAAI,EAAE,QAAQ;4BACd,WAAW,EACT,iEAAiE;yBACpE;wBACD,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,8BAA8B;4BAC3C,oBAAoB,EAAE,IAAI;yBAC3B;qBACF;oBACD,QAAQ,EAAE,CAAC,SAAS,CAAC;iBACtB;aACF;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;CACF,CAAC;AAAA,CAAC;AAEH,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EACT,uGAAuG;QACvG,mFAAmF;IACrF,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,GAAG,EAAE;gBACH,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,4BAA4B;gBACzC,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;iBACf;aACF;SACF;QACD,QAAQ,EAAE,CAAC,KAAK,CAAC;KAClB;CACF,CAAC;AAAA,CAAC;AAGH,MAAM,kBAAkB,GAAS;IAC/B,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE;;;;;;mGAMoF;IACjG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,0EAA0E;gBACvF,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,EAAE,EAAE;4BACF,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,yBAAyB;yBACvC;wBACD,OAAO,EAAE;4BACP,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,gDAAgD;yBAC9D;wBACD,cAAc,EAAE;4BACd,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,0DAA0D;yBACxE;wBACD,QAAQ,EAAE;4BACR,IAAI,EAAE,QAAQ;4BACd,WAAW,EAAE,4CAA4C;4BACzD,oBAAoB,EAAE,IAAI;yBAC3B;qBACF;oBACD,QAAQ,EAAE,CAAC,IAAI,CAAC;iBACjB;aACF;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;KACtB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAS;IACtC,IAAI,EAAE,iBAAiB;IACvB,WAAW,EAAE
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/mcp/tools.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Memory } from "../types/memory.js";
|
|
1
|
+
import type { Memory, SearchIntent } from "../types/memory.js";
|
|
2
2
|
import type { MemoryRepository } from "../db/memory.repository.js";
|
|
3
3
|
import type { EmbeddingsService } from "./embeddings.service.js";
|
|
4
4
|
export declare class MemoryService {
|
|
@@ -13,7 +13,9 @@ export declare class MemoryService {
|
|
|
13
13
|
embeddingText?: string;
|
|
14
14
|
metadata?: Record<string, unknown>;
|
|
15
15
|
}): Promise<Memory | null>;
|
|
16
|
-
|
|
16
|
+
vote(id: string, value: number): Promise<Memory | null>;
|
|
17
|
+
search(query: string, intent: SearchIntent, limit?: number, includeDeleted?: boolean): Promise<Memory[]>;
|
|
18
|
+
trackAccess(ids: string[]): Promise<void>;
|
|
17
19
|
private static readonly UUID_ZERO;
|
|
18
20
|
storeHandoff(args: {
|
|
19
21
|
project: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.service.d.ts","sourceRoot":"","sources":["../../../src/services/memory.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.service.d.ts","sourceRoot":"","sources":["../../../src/services/memory.service.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAC;AAE9E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAYjE,qBAAa,aAAa;IAEtB,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,UAAU;gBADV,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,iBAAiB;IAGjC,KAAK,CACT,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAM,EACtC,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,MAAM,CAAC;IAuBZ,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAiBvC,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIpC,MAAM,CACV,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QACP,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GACA,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4BnB,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAmBvD,MAAM,CACV,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,YAAY,EACpB,KAAK,GAAE,MAAW,EAClB,cAAc,GAAE,OAAe,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC;IA0Cd,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CACQ;IAEnC,YAAY,CAAC,IAAI,EAAE;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;QACrB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC/B,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;QACzB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,GAAG,OAAO,CAAC,MAAM,CAAC;IAgEb,gBAAgB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAGjD"}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import { randomUUID } from "crypto";
|
|
2
2
|
import { isDeleted } from "../types/memory.js";
|
|
3
|
+
const INTENT_PROFILES = {
|
|
4
|
+
continuity: { weights: { relevance: 0.3, recency: 0.5, utility: 0.2 }, jitter: 0.02 },
|
|
5
|
+
fact_check: { weights: { relevance: 0.6, recency: 0.1, utility: 0.3 }, jitter: 0.02 },
|
|
6
|
+
frequent: { weights: { relevance: 0.2, recency: 0.2, utility: 0.6 }, jitter: 0.02 },
|
|
7
|
+
associative: { weights: { relevance: 0.7, recency: 0.1, utility: 0.2 }, jitter: 0.05 },
|
|
8
|
+
explore: { weights: { relevance: 0.4, recency: 0.3, utility: 0.3 }, jitter: 0.15 },
|
|
9
|
+
};
|
|
10
|
+
const sigmoid = (x) => 1 / (1 + Math.exp(-x));
|
|
3
11
|
export class MemoryService {
|
|
4
12
|
repository;
|
|
5
13
|
embeddings;
|
|
@@ -20,12 +28,26 @@ export class MemoryService {
|
|
|
20
28
|
createdAt: now,
|
|
21
29
|
updatedAt: now,
|
|
22
30
|
supersededBy: null,
|
|
31
|
+
usefulness: 0,
|
|
32
|
+
accessCount: 0,
|
|
33
|
+
lastAccessed: now, // Initialize to createdAt for fair discovery
|
|
23
34
|
};
|
|
24
35
|
await this.repository.insert(memory);
|
|
25
36
|
return memory;
|
|
26
37
|
}
|
|
27
38
|
async get(id) {
|
|
28
|
-
|
|
39
|
+
const memory = await this.repository.findById(id);
|
|
40
|
+
if (!memory) {
|
|
41
|
+
return null;
|
|
42
|
+
}
|
|
43
|
+
// Track access on explicit get
|
|
44
|
+
const updatedMemory = {
|
|
45
|
+
...memory,
|
|
46
|
+
accessCount: memory.accessCount + 1,
|
|
47
|
+
lastAccessed: new Date(),
|
|
48
|
+
};
|
|
49
|
+
await this.repository.upsert(updatedMemory);
|
|
50
|
+
return updatedMemory;
|
|
29
51
|
}
|
|
30
52
|
async delete(id) {
|
|
31
53
|
return await this.repository.markDeleted(id);
|
|
@@ -53,28 +75,72 @@ export class MemoryService {
|
|
|
53
75
|
await this.repository.upsert(updatedMemory);
|
|
54
76
|
return updatedMemory;
|
|
55
77
|
}
|
|
56
|
-
async
|
|
78
|
+
async vote(id, value) {
|
|
79
|
+
const existing = await this.repository.findById(id);
|
|
80
|
+
if (!existing) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
// Vote also tracks access (explicit utilization signal)
|
|
84
|
+
const updatedMemory = {
|
|
85
|
+
...existing,
|
|
86
|
+
usefulness: existing.usefulness + value,
|
|
87
|
+
accessCount: existing.accessCount + 1,
|
|
88
|
+
lastAccessed: new Date(),
|
|
89
|
+
updatedAt: new Date(),
|
|
90
|
+
};
|
|
91
|
+
await this.repository.upsert(updatedMemory);
|
|
92
|
+
return updatedMemory;
|
|
93
|
+
}
|
|
94
|
+
async search(query, intent, limit = 10, includeDeleted = false) {
|
|
57
95
|
const queryEmbedding = await this.embeddings.embed(query);
|
|
58
|
-
const fetchLimit = limit *
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
96
|
+
const fetchLimit = limit * 5; // Fetch more for re-ranking
|
|
97
|
+
const candidates = await this.repository.findHybrid(queryEmbedding, query, fetchLimit);
|
|
98
|
+
const profile = INTENT_PROFILES[intent];
|
|
99
|
+
const now = new Date();
|
|
100
|
+
const scored = candidates
|
|
101
|
+
.filter((m) => includeDeleted || !isDeleted(m))
|
|
102
|
+
.map((candidate) => {
|
|
103
|
+
// Relevance: RRF score (already normalized ~0-1)
|
|
104
|
+
const relevance = candidate.rrfScore;
|
|
105
|
+
// Recency: exponential decay
|
|
106
|
+
const lastAccessed = candidate.lastAccessed ?? candidate.createdAt;
|
|
107
|
+
const hoursSinceAccess = Math.max(0, (now.getTime() - lastAccessed.getTime()) / (1000 * 60 * 60));
|
|
108
|
+
const recency = Math.pow(0.995, hoursSinceAccess);
|
|
109
|
+
// Utility: sigmoid of usefulness + log(accessCount)
|
|
110
|
+
const utility = sigmoid((candidate.usefulness + Math.log(candidate.accessCount + 1)) / 5);
|
|
111
|
+
// Weighted score
|
|
112
|
+
const { weights, jitter } = profile;
|
|
113
|
+
const score = weights.relevance * relevance +
|
|
114
|
+
weights.recency * recency +
|
|
115
|
+
weights.utility * utility;
|
|
116
|
+
// Apply jitter
|
|
117
|
+
const finalScore = score * (1 + (Math.random() * 2 - 1) * jitter);
|
|
118
|
+
return { memory: candidate, finalScore };
|
|
119
|
+
});
|
|
120
|
+
// Sort by final score descending
|
|
121
|
+
scored.sort((a, b) => b.finalScore - a.finalScore);
|
|
122
|
+
// Return top N (read-only - no access tracking)
|
|
123
|
+
return scored.slice(0, limit).map((s) => s.memory);
|
|
124
|
+
}
|
|
125
|
+
async trackAccess(ids) {
|
|
126
|
+
const now = new Date();
|
|
127
|
+
for (const id of ids) {
|
|
128
|
+
const memory = await this.repository.findById(id);
|
|
129
|
+
if (memory && !isDeleted(memory)) {
|
|
130
|
+
await this.repository.upsert({
|
|
131
|
+
...memory,
|
|
132
|
+
accessCount: memory.accessCount + 1,
|
|
133
|
+
lastAccessed: now,
|
|
134
|
+
});
|
|
72
135
|
}
|
|
73
136
|
}
|
|
74
|
-
return results;
|
|
75
137
|
}
|
|
76
138
|
static UUID_ZERO = "00000000-0000-0000-0000-000000000000";
|
|
77
139
|
async storeHandoff(args) {
|
|
140
|
+
// Track access for utilized memories
|
|
141
|
+
if (args.memory_ids && args.memory_ids.length > 0) {
|
|
142
|
+
await this.trackAccess(args.memory_ids);
|
|
143
|
+
}
|
|
78
144
|
const now = new Date();
|
|
79
145
|
const date = now.toISOString().slice(0, 10);
|
|
80
146
|
const time = now.toISOString().slice(11, 16);
|
|
@@ -120,6 +186,9 @@ ${list(args.memory_ids)}`;
|
|
|
120
186
|
createdAt: now,
|
|
121
187
|
updatedAt: now,
|
|
122
188
|
supersededBy: null,
|
|
189
|
+
usefulness: 0,
|
|
190
|
+
accessCount: 0,
|
|
191
|
+
lastAccessed: now, // Initialize to now for consistency
|
|
123
192
|
};
|
|
124
193
|
await this.repository.upsert(memory);
|
|
125
194
|
return memory;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.service.js","sourceRoot":"","sources":["../../../src/services/memory.service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAI/C,MAAM,OAAO,aAAa;IAEd;IACA;IAFV,YACU,UAA4B,EAC5B,UAA6B;QAD7B,eAAU,GAAV,UAAU,CAAkB;QAC5B,eAAU,GAAV,UAAU,CAAmB;
|
|
1
|
+
{"version":3,"file":"memory.service.js","sourceRoot":"","sources":["../../../src/services/memory.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,11 +7,22 @@ export interface Memory {
|
|
|
7
7
|
createdAt: Date;
|
|
8
8
|
updatedAt: Date;
|
|
9
9
|
supersededBy: string | null;
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
distance: number;
|
|
10
|
+
usefulness: number;
|
|
11
|
+
accessCount: number;
|
|
12
|
+
lastAccessed: Date | null;
|
|
14
13
|
}
|
|
15
14
|
export declare function isDeleted(memory: Memory): boolean;
|
|
16
15
|
export declare function memoryToDict(memory: Memory): Record<string, unknown>;
|
|
16
|
+
export type SearchIntent = 'continuity' | 'fact_check' | 'frequent' | 'associative' | 'explore';
|
|
17
|
+
export interface IntentProfile {
|
|
18
|
+
weights: {
|
|
19
|
+
relevance: number;
|
|
20
|
+
recency: number;
|
|
21
|
+
utility: number;
|
|
22
|
+
};
|
|
23
|
+
jitter: number;
|
|
24
|
+
}
|
|
25
|
+
export interface HybridRow extends Memory {
|
|
26
|
+
rrfScore: number;
|
|
27
|
+
}
|
|
17
28
|
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/types/memory.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../../src/types/memory.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAE3C,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,SAAS,EAAE,IAAI,CAAC;IAChB,SAAS,EAAE,IAAI,CAAC;IAChB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,IAAI,GAAG,IAAI,CAAC;CAC3B;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAYpE;AAED,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,SAAS,CAAC;AAEhG,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IACjE,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,SAAU,SAAQ,MAAM;IACvC,QAAQ,EAAE,MAAM,CAAC;CAClB"}
|
package/dist/src/types/memory.js
CHANGED
|
@@ -10,6 +10,9 @@ export function memoryToDict(memory) {
|
|
|
10
10
|
createdAt: memory.createdAt.toISOString(),
|
|
11
11
|
updatedAt: memory.updatedAt.toISOString(),
|
|
12
12
|
supersededBy: memory.supersededBy,
|
|
13
|
+
usefulness: memory.usefulness,
|
|
14
|
+
accessCount: memory.accessCount,
|
|
15
|
+
lastAccessed: memory.lastAccessed?.toISOString() ?? null,
|
|
13
16
|
};
|
|
14
17
|
}
|
|
15
18
|
//# sourceMappingURL=memory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/types/memory.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../../src/types/memory.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,SAAS,CAAC;AAe3C,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,OAAO,MAAM,CAAC,YAAY,KAAK,iBAAiB,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,EAAE;QACb,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;QACzC,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,WAAW,EAAE;QACzC,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,UAAU,EAAE,MAAM,CAAC,UAAU;QAC7B,WAAW,EAAE,MAAM,CAAC,WAAW;QAC/B,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,IAAI;KACzD,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aeriondyseti/vector-memory-mcp",
|
|
3
|
-
"version": "0.9.0-dev.
|
|
3
|
+
"version": "0.9.0-dev.8",
|
|
4
4
|
"description": "A zero-configuration RAG memory server for MCP clients",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/src/index.js",
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"files": [
|
|
11
11
|
"dist",
|
|
12
|
+
"src",
|
|
12
13
|
"scripts",
|
|
13
14
|
"hooks",
|
|
14
15
|
"README.md",
|
|
@@ -25,8 +26,8 @@
|
|
|
25
26
|
"homepage": "https://github.com/AerionDyseti/vector-memory-mcp#readme",
|
|
26
27
|
"scripts": {
|
|
27
28
|
"start": "node dist/src/index.js",
|
|
28
|
-
"
|
|
29
|
-
"dev
|
|
29
|
+
"start:bun": "bun run src/index.ts",
|
|
30
|
+
"dev": "bun --watch run src/index.ts",
|
|
30
31
|
"build": "tsc",
|
|
31
32
|
"prebuild": "rm -rf dist",
|
|
32
33
|
"typecheck": "bunx tsc --noEmit",
|
|
@@ -34,12 +35,10 @@
|
|
|
34
35
|
"test:raw": "bun test --preload ./tests/preload.ts",
|
|
35
36
|
"test:quick": "bun test",
|
|
36
37
|
"test:coverage": "bun test --preload ./tests/preload.ts --coverage",
|
|
38
|
+
"benchmark": "bun test tests/benchmark.test.ts --preload ./tests/preload.ts",
|
|
37
39
|
"test:preload": "bun run tests/preload.ts",
|
|
38
|
-
"warmup": "
|
|
39
|
-
"postinstall": "
|
|
40
|
-
"publish:check": "bun run scripts/publish.ts --dry-run",
|
|
41
|
-
"publish:npm": "bun run scripts/publish.ts",
|
|
42
|
-
"publish:dev": "npm publish --access public --tag dev",
|
|
40
|
+
"warmup": "bun run scripts/warmup.ts",
|
|
41
|
+
"postinstall": "bun run scripts/warmup.ts",
|
|
43
42
|
"prepublishOnly": "bun run build"
|
|
44
43
|
},
|
|
45
44
|
"keywords": [
|
|
@@ -51,7 +50,7 @@
|
|
|
51
50
|
],
|
|
52
51
|
"license": "MIT",
|
|
53
52
|
"dependencies": {
|
|
54
|
-
"@hono/node-server": "^1.19.
|
|
53
|
+
"@hono/node-server": "^1.19.9",
|
|
55
54
|
"@huggingface/transformers": "^3.8.0",
|
|
56
55
|
"@lancedb/lancedb": "^0.22.3",
|
|
57
56
|
"@modelcontextprotocol/sdk": "^1.0.0",
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import arg from "arg";
|
|
2
|
+
import { isAbsolute, join } from "path";
|
|
3
|
+
import packageJson from "../../package.json" with { type: "json" };
|
|
4
|
+
|
|
5
|
+
export const VERSION = packageJson.version;
|
|
6
|
+
|
|
7
|
+
export type TransportMode = "stdio" | "http" | "both";
|
|
8
|
+
|
|
9
|
+
export interface Config {
|
|
10
|
+
dbPath: string;
|
|
11
|
+
embeddingModel: string;
|
|
12
|
+
embeddingDimension: number;
|
|
13
|
+
httpPort: number;
|
|
14
|
+
httpHost: string;
|
|
15
|
+
enableHttp: boolean;
|
|
16
|
+
transportMode: TransportMode;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface ConfigOverrides {
|
|
20
|
+
dbPath?: string;
|
|
21
|
+
httpPort?: number;
|
|
22
|
+
enableHttp?: boolean;
|
|
23
|
+
transportMode?: TransportMode;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
// Defaults - always use repo-local .vector-memory folder
|
|
27
|
+
const DEFAULT_DB_PATH = join(process.cwd(), ".vector-memory", "memories.db");
|
|
28
|
+
const DEFAULT_EMBEDDING_MODEL = "Xenova/all-MiniLM-L6-v2";
|
|
29
|
+
const DEFAULT_EMBEDDING_DIMENSION = 384;
|
|
30
|
+
const DEFAULT_HTTP_PORT = 3271;
|
|
31
|
+
const DEFAULT_HTTP_HOST = "127.0.0.1";
|
|
32
|
+
|
|
33
|
+
function resolvePath(path: string): string {
|
|
34
|
+
return isAbsolute(path) ? path : join(process.cwd(), path);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
export function loadConfig(overrides: ConfigOverrides = {}): Config {
|
|
38
|
+
const transportMode = overrides.transportMode ?? "stdio";
|
|
39
|
+
// HTTP enabled by default (needed for hooks), can disable with --no-http
|
|
40
|
+
const enableHttp = overrides.enableHttp ?? true;
|
|
41
|
+
|
|
42
|
+
return {
|
|
43
|
+
dbPath: resolvePath(overrides.dbPath ?? DEFAULT_DB_PATH),
|
|
44
|
+
embeddingModel: DEFAULT_EMBEDDING_MODEL,
|
|
45
|
+
embeddingDimension: DEFAULT_EMBEDDING_DIMENSION,
|
|
46
|
+
httpPort: overrides.httpPort ?? DEFAULT_HTTP_PORT,
|
|
47
|
+
httpHost: DEFAULT_HTTP_HOST,
|
|
48
|
+
enableHttp,
|
|
49
|
+
transportMode,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Parse CLI arguments into config overrides.
|
|
55
|
+
*/
|
|
56
|
+
export function parseCliArgs(argv: string[]): ConfigOverrides {
|
|
57
|
+
const args = arg(
|
|
58
|
+
{
|
|
59
|
+
"--db-file": String,
|
|
60
|
+
"--port": Number,
|
|
61
|
+
"--no-http": Boolean,
|
|
62
|
+
|
|
63
|
+
// Aliases
|
|
64
|
+
"-d": "--db-file",
|
|
65
|
+
"-p": "--port",
|
|
66
|
+
},
|
|
67
|
+
{ argv, permissive: true }
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
return {
|
|
71
|
+
dbPath: args["--db-file"],
|
|
72
|
+
httpPort: args["--port"],
|
|
73
|
+
enableHttp: args["--no-http"] ? false : undefined,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Default config for imports that don't use CLI args
|
|
78
|
+
export const config = loadConfig();
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as lancedb from "@lancedb/lancedb";
|
|
2
|
+
import { mkdirSync } from "fs";
|
|
3
|
+
import { dirname } from "path";
|
|
4
|
+
|
|
5
|
+
export async function connectToDatabase(dbPath: string): Promise<lancedb.Connection> {
|
|
6
|
+
// Ensure directory exists
|
|
7
|
+
mkdirSync(dirname(dbPath), { recursive: true });
|
|
8
|
+
|
|
9
|
+
const db = await lancedb.connect(dbPath);
|
|
10
|
+
return db;
|
|
11
|
+
}
|