@aeriondyseti/vector-memory-mcp 0.9.0-dev.2 → 0.9.0-dev.3
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 +21 -1
- package/dist/scripts/publish.d.ts +13 -0
- package/dist/scripts/publish.d.ts.map +1 -0
- package/dist/scripts/publish.js +56 -0
- package/dist/scripts/publish.js.map +1 -0
- package/dist/scripts/test-runner.d.ts +9 -0
- package/dist/scripts/test-runner.d.ts.map +1 -0
- package/dist/scripts/test-runner.js +61 -0
- package/dist/scripts/test-runner.js.map +1 -0
- package/dist/scripts/warmup.d.ts +8 -0
- package/dist/scripts/warmup.d.ts.map +1 -0
- package/dist/scripts/warmup.js +61 -0
- package/dist/scripts/warmup.js.map +1 -0
- package/dist/src/config/index.d.ts +23 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +46 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/db/connection.d.ts +3 -0
- package/dist/src/db/connection.d.ts.map +1 -0
- package/dist/src/db/connection.js +10 -0
- package/dist/src/db/connection.js.map +1 -0
- package/dist/src/db/memory.repository.d.ts +13 -0
- package/dist/src/db/memory.repository.d.ts.map +1 -0
- package/dist/src/db/memory.repository.js +97 -0
- package/dist/src/db/memory.repository.js.map +1 -0
- package/dist/src/db/schema.d.ts +4 -0
- package/dist/src/db/schema.d.ts.map +1 -0
- package/dist/src/db/schema.js +12 -0
- package/dist/src/db/schema.js.map +1 -0
- package/dist/src/http/mcp-transport.d.ts +19 -0
- package/dist/src/http/mcp-transport.d.ts.map +1 -0
- package/dist/src/http/mcp-transport.js +191 -0
- package/dist/src/http/mcp-transport.js.map +1 -0
- package/dist/src/http/server.d.ts +12 -0
- package/dist/src/http/server.d.ts.map +1 -0
- package/dist/src/http/server.js +168 -0
- package/dist/src/http/server.js.map +1 -0
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +59 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mcp/handlers.d.ts +11 -0
- package/dist/src/mcp/handlers.d.ts.map +1 -0
- package/dist/src/mcp/handlers.js +175 -0
- package/dist/src/mcp/handlers.js.map +1 -0
- package/dist/src/mcp/server.d.ts +5 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +22 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/tools.d.ts +9 -0
- package/dist/src/mcp/tools.d.ts.map +1 -0
- package/dist/src/mcp/tools.js +243 -0
- package/dist/src/mcp/tools.js.map +1 -0
- package/dist/src/services/embeddings.service.d.ts +12 -0
- package/dist/src/services/embeddings.service.d.ts.map +1 -0
- package/dist/src/services/embeddings.service.js +37 -0
- package/dist/src/services/embeddings.service.js.map +1 -0
- package/dist/src/services/memory.service.d.ts +31 -0
- package/dist/src/services/memory.service.d.ts.map +1 -0
- package/dist/src/services/memory.service.js +131 -0
- package/dist/src/services/memory.service.js.map +1 -0
- package/dist/src/types/memory.d.ts +17 -0
- package/dist/src/types/memory.d.ts.map +1 -0
- package/dist/src/types/memory.js +15 -0
- package/dist/src/types/memory.js.map +1 -0
- package/package.json +12 -8
- package/src/config/index.ts +0 -75
- package/src/db/connection.ts +0 -11
- package/src/db/memory.repository.ts +0 -115
- package/src/db/schema.ts +0 -34
- package/src/http/mcp-transport.ts +0 -255
- package/src/http/server.ts +0 -190
- package/src/index.ts +0 -70
- package/src/mcp/handlers.ts +0 -248
- package/src/mcp/server.ts +0 -34
- package/src/mcp/tools.ts +0 -254
- package/src/services/embeddings.service.ts +0 -48
- package/src/services/memory.service.ts +0 -185
- package/src/types/memory.ts +0 -31
|
@@ -1,185 +0,0 @@
|
|
|
1
|
-
import { randomUUID } from "crypto";
|
|
2
|
-
import type { Memory } from "../types/memory.js";
|
|
3
|
-
import { isDeleted } from "../types/memory.js";
|
|
4
|
-
import type { MemoryRepository } from "../db/memory.repository.js";
|
|
5
|
-
import type { EmbeddingsService } from "./embeddings.service.js";
|
|
6
|
-
|
|
7
|
-
export class MemoryService {
|
|
8
|
-
constructor(
|
|
9
|
-
private repository: MemoryRepository,
|
|
10
|
-
private embeddings: EmbeddingsService
|
|
11
|
-
) {}
|
|
12
|
-
|
|
13
|
-
async store(
|
|
14
|
-
content: string,
|
|
15
|
-
metadata: Record<string, unknown> = {},
|
|
16
|
-
embeddingText?: string
|
|
17
|
-
): Promise<Memory> {
|
|
18
|
-
const id = randomUUID();
|
|
19
|
-
const now = new Date();
|
|
20
|
-
const textToEmbed = embeddingText ?? content;
|
|
21
|
-
const embedding = await this.embeddings.embed(textToEmbed);
|
|
22
|
-
|
|
23
|
-
const memory: Memory = {
|
|
24
|
-
id,
|
|
25
|
-
content,
|
|
26
|
-
embedding,
|
|
27
|
-
metadata,
|
|
28
|
-
createdAt: now,
|
|
29
|
-
updatedAt: now,
|
|
30
|
-
supersededBy: null,
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
await this.repository.insert(memory);
|
|
34
|
-
return memory;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
async get(id: string): Promise<Memory | null> {
|
|
38
|
-
return await this.repository.findById(id);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
async delete(id: string): Promise<boolean> {
|
|
42
|
-
return await this.repository.markDeleted(id);
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
async update(
|
|
47
|
-
id: string,
|
|
48
|
-
updates: {
|
|
49
|
-
content?: string;
|
|
50
|
-
embeddingText?: string;
|
|
51
|
-
metadata?: Record<string, unknown>;
|
|
52
|
-
}
|
|
53
|
-
): Promise<Memory | null> {
|
|
54
|
-
const existing = await this.repository.findById(id);
|
|
55
|
-
if (!existing) {
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
const newContent = updates.content ?? existing.content;
|
|
60
|
-
const newMetadata = updates.metadata ?? existing.metadata;
|
|
61
|
-
|
|
62
|
-
// Regenerate embedding if content or embeddingText changed
|
|
63
|
-
let newEmbedding = existing.embedding;
|
|
64
|
-
if (updates.content !== undefined || updates.embeddingText !== undefined) {
|
|
65
|
-
const textToEmbed = updates.embeddingText ?? newContent;
|
|
66
|
-
newEmbedding = await this.embeddings.embed(textToEmbed);
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
const updatedMemory: Memory = {
|
|
70
|
-
...existing,
|
|
71
|
-
content: newContent,
|
|
72
|
-
embedding: newEmbedding,
|
|
73
|
-
metadata: newMetadata,
|
|
74
|
-
updatedAt: new Date(),
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
await this.repository.upsert(updatedMemory);
|
|
78
|
-
return updatedMemory;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
async search(
|
|
82
|
-
query: string,
|
|
83
|
-
limit: number = 10,
|
|
84
|
-
includeDeleted: boolean = false
|
|
85
|
-
): Promise<Memory[]> {
|
|
86
|
-
const queryEmbedding = await this.embeddings.embed(query);
|
|
87
|
-
const fetchLimit = limit * 3;
|
|
88
|
-
|
|
89
|
-
const rows = await this.repository.findSimilar(queryEmbedding, fetchLimit);
|
|
90
|
-
|
|
91
|
-
const results: Memory[] = [];
|
|
92
|
-
|
|
93
|
-
for (const row of rows) {
|
|
94
|
-
const memory = await this.repository.findById(row.id);
|
|
95
|
-
|
|
96
|
-
if (!memory) {
|
|
97
|
-
continue;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
if (!includeDeleted && isDeleted(memory)) {
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
results.push(memory);
|
|
105
|
-
if (results.length >= limit) {
|
|
106
|
-
break;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
return results;
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
private static readonly UUID_ZERO =
|
|
114
|
-
"00000000-0000-0000-0000-000000000000";
|
|
115
|
-
|
|
116
|
-
async storeHandoff(args: {
|
|
117
|
-
project: string;
|
|
118
|
-
branch?: string;
|
|
119
|
-
summary: string;
|
|
120
|
-
completed?: string[];
|
|
121
|
-
in_progress_blocked?: string[];
|
|
122
|
-
key_decisions?: string[];
|
|
123
|
-
next_steps?: string[];
|
|
124
|
-
memory_ids?: string[];
|
|
125
|
-
metadata?: Record<string, unknown>;
|
|
126
|
-
}): Promise<Memory> {
|
|
127
|
-
const now = new Date();
|
|
128
|
-
const date = now.toISOString().slice(0, 10);
|
|
129
|
-
const time = now.toISOString().slice(11, 16);
|
|
130
|
-
|
|
131
|
-
const list = (items: string[] | undefined) => {
|
|
132
|
-
if (!items || items.length === 0) {
|
|
133
|
-
return "- (none)";
|
|
134
|
-
}
|
|
135
|
-
return items.map((i) => `- ${i}`).join("\n");
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
const content = `# Handoff - ${args.project}
|
|
139
|
-
**Date:** ${date} ${time} | **Branch:** ${args.branch ?? "unknown"}
|
|
140
|
-
|
|
141
|
-
## Summary
|
|
142
|
-
${args.summary}
|
|
143
|
-
|
|
144
|
-
## Completed
|
|
145
|
-
${list(args.completed)}
|
|
146
|
-
|
|
147
|
-
## In Progress / Blocked
|
|
148
|
-
${list(args.in_progress_blocked)}
|
|
149
|
-
|
|
150
|
-
## Key Decisions
|
|
151
|
-
${list(args.key_decisions)}
|
|
152
|
-
|
|
153
|
-
## Next Steps
|
|
154
|
-
${list(args.next_steps)}
|
|
155
|
-
|
|
156
|
-
## Memory IDs
|
|
157
|
-
${list(args.memory_ids)}`;
|
|
158
|
-
|
|
159
|
-
const metadata: Record<string, unknown> = {
|
|
160
|
-
...(args.metadata ?? {}),
|
|
161
|
-
type: "handoff",
|
|
162
|
-
project: args.project,
|
|
163
|
-
date,
|
|
164
|
-
branch: args.branch ?? "unknown",
|
|
165
|
-
memory_ids: args.memory_ids ?? [],
|
|
166
|
-
};
|
|
167
|
-
|
|
168
|
-
const memory: Memory = {
|
|
169
|
-
id: MemoryService.UUID_ZERO,
|
|
170
|
-
content,
|
|
171
|
-
embedding: new Array(this.embeddings.dimension).fill(0),
|
|
172
|
-
metadata,
|
|
173
|
-
createdAt: now,
|
|
174
|
-
updatedAt: now,
|
|
175
|
-
supersededBy: null,
|
|
176
|
-
};
|
|
177
|
-
|
|
178
|
-
await this.repository.upsert(memory);
|
|
179
|
-
return memory;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
async getLatestHandoff(): Promise<Memory | null> {
|
|
183
|
-
return await this.get(MemoryService.UUID_ZERO);
|
|
184
|
-
}
|
|
185
|
-
}
|
package/src/types/memory.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
export const DELETED_TOMBSTONE = "DELETED";
|
|
2
|
-
|
|
3
|
-
export interface Memory {
|
|
4
|
-
id: string;
|
|
5
|
-
content: string;
|
|
6
|
-
embedding: number[];
|
|
7
|
-
metadata: Record<string, unknown>;
|
|
8
|
-
createdAt: Date;
|
|
9
|
-
updatedAt: Date;
|
|
10
|
-
supersededBy: string | null;
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export interface VectorRow {
|
|
14
|
-
id: string;
|
|
15
|
-
distance: number;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export function isDeleted(memory: Memory): boolean {
|
|
19
|
-
return memory.supersededBy === DELETED_TOMBSTONE;
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export function memoryToDict(memory: Memory): Record<string, unknown> {
|
|
23
|
-
return {
|
|
24
|
-
id: memory.id,
|
|
25
|
-
content: memory.content,
|
|
26
|
-
metadata: memory.metadata,
|
|
27
|
-
createdAt: memory.createdAt.toISOString(),
|
|
28
|
-
updatedAt: memory.updatedAt.toISOString(),
|
|
29
|
-
supersededBy: memory.supersededBy,
|
|
30
|
-
};
|
|
31
|
-
}
|