@aeriondyseti/vector-memory-mcp 1.1.0-dev.6 → 2.0.0-rc
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 +22 -4
- package/package.json +12 -18
- package/scripts/migrate-from-lancedb.ts +56 -0
- package/scripts/smoke-test.ts +699 -0
- package/scripts/test-runner.ts +11 -1
- package/src/db/connection.ts +18 -4
- package/src/db/conversation.repository.ts +164 -79
- package/src/db/memory.repository.ts +182 -170
- package/src/db/migrations.ts +70 -0
- package/src/db/sqlite-utils.ts +78 -0
- package/src/http/server.ts +40 -35
- package/src/index.ts +33 -3
- package/src/mcp/server.ts +2 -1
- package/src/migration.ts +254 -0
- package/dist/package.json +0 -71
- package/dist/scripts/test-runner.d.ts +0 -9
- package/dist/scripts/test-runner.d.ts.map +0 -1
- package/dist/scripts/test-runner.js +0 -61
- package/dist/scripts/test-runner.js.map +0 -1
- package/dist/scripts/warmup.d.ts +0 -8
- package/dist/scripts/warmup.d.ts.map +0 -1
- package/dist/scripts/warmup.js +0 -61
- package/dist/scripts/warmup.js.map +0 -1
- package/dist/src/config/index.d.ts +0 -41
- package/dist/src/config/index.d.ts.map +0 -1
- package/dist/src/config/index.js +0 -75
- package/dist/src/config/index.js.map +0 -1
- package/dist/src/db/connection.d.ts +0 -3
- package/dist/src/db/connection.d.ts.map +0 -1
- package/dist/src/db/connection.js +0 -10
- package/dist/src/db/connection.js.map +0 -1
- package/dist/src/db/conversation.repository.d.ts +0 -26
- package/dist/src/db/conversation.repository.d.ts.map +0 -1
- package/dist/src/db/conversation.repository.js +0 -73
- package/dist/src/db/conversation.repository.js.map +0 -1
- package/dist/src/db/conversation.schema.d.ts +0 -4
- package/dist/src/db/conversation.schema.d.ts.map +0 -1
- package/dist/src/db/conversation.schema.js +0 -15
- package/dist/src/db/conversation.schema.js.map +0 -1
- package/dist/src/db/lancedb-utils.d.ts +0 -57
- package/dist/src/db/lancedb-utils.d.ts.map +0 -1
- package/dist/src/db/lancedb-utils.js +0 -124
- package/dist/src/db/lancedb-utils.js.map +0 -1
- package/dist/src/db/memory.repository.d.ts +0 -40
- package/dist/src/db/memory.repository.d.ts.map +0 -1
- package/dist/src/db/memory.repository.js +0 -183
- package/dist/src/db/memory.repository.js.map +0 -1
- package/dist/src/db/schema.d.ts +0 -7
- package/dist/src/db/schema.d.ts.map +0 -1
- package/dist/src/db/schema.js +0 -19
- package/dist/src/db/schema.js.map +0 -1
- package/dist/src/http/mcp-transport.d.ts +0 -19
- package/dist/src/http/mcp-transport.d.ts.map +0 -1
- package/dist/src/http/mcp-transport.js +0 -191
- package/dist/src/http/mcp-transport.js.map +0 -1
- package/dist/src/http/server.d.ts +0 -13
- package/dist/src/http/server.d.ts.map +0 -1
- package/dist/src/http/server.js +0 -224
- package/dist/src/http/server.js.map +0 -1
- package/dist/src/index.d.ts +0 -3
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -68
- package/dist/src/index.js.map +0 -1
- package/dist/src/mcp/handlers.d.ts +0 -15
- package/dist/src/mcp/handlers.d.ts.map +0 -1
- package/dist/src/mcp/handlers.js +0 -313
- package/dist/src/mcp/handlers.js.map +0 -1
- package/dist/src/mcp/server.d.ts +0 -5
- package/dist/src/mcp/server.d.ts.map +0 -1
- package/dist/src/mcp/server.js +0 -22
- package/dist/src/mcp/server.js.map +0 -1
- package/dist/src/mcp/tools.d.ts +0 -13
- package/dist/src/mcp/tools.d.ts.map +0 -1
- package/dist/src/mcp/tools.js +0 -352
- package/dist/src/mcp/tools.js.map +0 -1
- package/dist/src/services/conversation.service.d.ts +0 -38
- package/dist/src/services/conversation.service.d.ts.map +0 -1
- package/dist/src/services/conversation.service.js +0 -252
- package/dist/src/services/conversation.service.js.map +0 -1
- package/dist/src/services/embeddings.service.d.ts +0 -12
- package/dist/src/services/embeddings.service.d.ts.map +0 -1
- package/dist/src/services/embeddings.service.js +0 -37
- package/dist/src/services/embeddings.service.js.map +0 -1
- package/dist/src/services/memory.service.d.ts +0 -40
- package/dist/src/services/memory.service.d.ts.map +0 -1
- package/dist/src/services/memory.service.js +0 -258
- package/dist/src/services/memory.service.js.map +0 -1
- package/dist/src/services/parsers/claude-code.parser.d.ts +0 -8
- package/dist/src/services/parsers/claude-code.parser.d.ts.map +0 -1
- package/dist/src/services/parsers/claude-code.parser.js +0 -191
- package/dist/src/services/parsers/claude-code.parser.js.map +0 -1
- package/dist/src/services/parsers/types.d.ts +0 -9
- package/dist/src/services/parsers/types.d.ts.map +0 -1
- package/dist/src/services/parsers/types.js +0 -2
- package/dist/src/services/parsers/types.js.map +0 -1
- package/dist/src/types/conversation.d.ts +0 -99
- package/dist/src/types/conversation.d.ts.map +0 -1
- package/dist/src/types/conversation.js +0 -2
- package/dist/src/types/conversation.js.map +0 -1
- package/dist/src/types/memory.d.ts +0 -30
- package/dist/src/types/memory.d.ts.map +0 -1
- package/dist/src/types/memory.js +0 -18
- package/dist/src/types/memory.js.map +0 -1
- package/src/db/conversation.schema.ts +0 -33
- package/src/db/lancedb-utils.ts +0 -142
- package/src/db/schema.ts +0 -38
package/dist/src/http/server.js
DELETED
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import { Hono } from "hono";
|
|
2
|
-
import { cors } from "hono/cors";
|
|
3
|
-
import { serve as nodeServe } from "@hono/node-server";
|
|
4
|
-
import { createServer } from "net";
|
|
5
|
-
import { isDeleted } from "../types/memory.js";
|
|
6
|
-
import { createMcpRoutes } from "./mcp-transport.js";
|
|
7
|
-
// Detect runtime
|
|
8
|
-
const isBun = typeof globalThis.Bun !== "undefined";
|
|
9
|
-
/**
|
|
10
|
-
* Check if a port is available by attempting to bind to it
|
|
11
|
-
*/
|
|
12
|
-
async function isPortAvailable(port, host) {
|
|
13
|
-
return new Promise((resolve) => {
|
|
14
|
-
const server = createServer();
|
|
15
|
-
server.once("error", () => {
|
|
16
|
-
resolve(false);
|
|
17
|
-
});
|
|
18
|
-
server.once("listening", () => {
|
|
19
|
-
server.close(() => resolve(true));
|
|
20
|
-
});
|
|
21
|
-
server.listen(port, host);
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* Find an available port, starting with the preferred port.
|
|
26
|
-
* If preferred port is unavailable, picks a random available port.
|
|
27
|
-
*/
|
|
28
|
-
async function findAvailablePort(preferredPort, host) {
|
|
29
|
-
if (await isPortAvailable(preferredPort, host)) {
|
|
30
|
-
return preferredPort;
|
|
31
|
-
}
|
|
32
|
-
console.error(`[vector-memory-mcp] Port ${preferredPort} is in use, finding an available port...`);
|
|
33
|
-
// Let the OS pick a random available port
|
|
34
|
-
return new Promise((resolve, reject) => {
|
|
35
|
-
const server = createServer();
|
|
36
|
-
server.once("error", reject);
|
|
37
|
-
server.once("listening", () => {
|
|
38
|
-
const address = server.address();
|
|
39
|
-
const port = typeof address === "object" && address ? address.port : 0;
|
|
40
|
-
server.close(() => resolve(port));
|
|
41
|
-
});
|
|
42
|
-
server.listen(0, host);
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
// Track server start time for uptime calculation
|
|
46
|
-
const startedAt = Date.now();
|
|
47
|
-
export function createHttpApp(memoryService, config) {
|
|
48
|
-
const app = new Hono();
|
|
49
|
-
// Enable CORS for local development
|
|
50
|
-
app.use("/*", cors());
|
|
51
|
-
// Mount MCP routes for StreamableHTTP transport
|
|
52
|
-
const mcpApp = createMcpRoutes(memoryService);
|
|
53
|
-
app.route("/", mcpApp);
|
|
54
|
-
// Health check endpoint with config info
|
|
55
|
-
app.get("/health", (c) => {
|
|
56
|
-
return c.json({
|
|
57
|
-
status: "ok",
|
|
58
|
-
timestamp: new Date().toISOString(),
|
|
59
|
-
pid: process.pid,
|
|
60
|
-
uptime: Math.floor((Date.now() - startedAt) / 1000),
|
|
61
|
-
config: {
|
|
62
|
-
dbPath: config.dbPath,
|
|
63
|
-
embeddingModel: config.embeddingModel,
|
|
64
|
-
embeddingDimension: config.embeddingDimension,
|
|
65
|
-
historyEnabled: config.conversationHistory.enabled,
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
});
|
|
69
|
-
// Search endpoint
|
|
70
|
-
app.post("/search", async (c) => {
|
|
71
|
-
try {
|
|
72
|
-
const body = await c.req.json();
|
|
73
|
-
const query = body.query;
|
|
74
|
-
const intent = body.intent ?? "fact_check";
|
|
75
|
-
const limit = body.limit ?? 10;
|
|
76
|
-
if (!query || typeof query !== "string") {
|
|
77
|
-
return c.json({ error: "Missing or invalid 'query' field" }, 400);
|
|
78
|
-
}
|
|
79
|
-
const results = await memoryService.search(query, intent, limit);
|
|
80
|
-
return c.json({
|
|
81
|
-
results: results.map((r) => ({
|
|
82
|
-
id: r.id,
|
|
83
|
-
content: r.content,
|
|
84
|
-
metadata: r.metadata,
|
|
85
|
-
source: r.source,
|
|
86
|
-
createdAt: r.createdAt.toISOString(),
|
|
87
|
-
})),
|
|
88
|
-
count: results.length,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
catch (error) {
|
|
92
|
-
const message = error instanceof Error ? error.message : "Unknown error";
|
|
93
|
-
return c.json({ error: message }, 500);
|
|
94
|
-
}
|
|
95
|
-
});
|
|
96
|
-
// Store endpoint
|
|
97
|
-
app.post("/store", async (c) => {
|
|
98
|
-
try {
|
|
99
|
-
const body = await c.req.json();
|
|
100
|
-
const { content, metadata, embeddingText } = body;
|
|
101
|
-
if (!content || typeof content !== "string") {
|
|
102
|
-
return c.json({ error: "Missing or invalid 'content' field" }, 400);
|
|
103
|
-
}
|
|
104
|
-
const memory = await memoryService.store(content, metadata ?? {}, embeddingText);
|
|
105
|
-
return c.json({
|
|
106
|
-
id: memory.id,
|
|
107
|
-
createdAt: memory.createdAt.toISOString(),
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
catch (error) {
|
|
111
|
-
const message = error instanceof Error ? error.message : "Unknown error";
|
|
112
|
-
return c.json({ error: message }, 500);
|
|
113
|
-
}
|
|
114
|
-
});
|
|
115
|
-
// Delete endpoint
|
|
116
|
-
app.delete("/memories/:id", async (c) => {
|
|
117
|
-
try {
|
|
118
|
-
const id = c.req.param("id");
|
|
119
|
-
const deleted = await memoryService.delete(id);
|
|
120
|
-
if (!deleted) {
|
|
121
|
-
return c.json({ error: "Memory not found" }, 404);
|
|
122
|
-
}
|
|
123
|
-
return c.json({ deleted: true });
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
const message = error instanceof Error ? error.message : "Unknown error";
|
|
127
|
-
return c.json({ error: message }, 500);
|
|
128
|
-
}
|
|
129
|
-
});
|
|
130
|
-
// Get latest waypoint
|
|
131
|
-
app.get("/waypoint", async (c) => {
|
|
132
|
-
try {
|
|
133
|
-
const waypoint = await memoryService.getLatestWaypoint();
|
|
134
|
-
if (!waypoint) {
|
|
135
|
-
return c.json({ error: "No waypoint found" }, 404);
|
|
136
|
-
}
|
|
137
|
-
// Fetch referenced memories in a single query
|
|
138
|
-
const memoryIds = waypoint.metadata.memory_ids ?? [];
|
|
139
|
-
const memories = await memoryService.getMultiple(memoryIds);
|
|
140
|
-
const referencedMemories = memories.map((m) => ({ id: m.id, content: m.content }));
|
|
141
|
-
return c.json({
|
|
142
|
-
content: waypoint.content,
|
|
143
|
-
metadata: waypoint.metadata,
|
|
144
|
-
referencedMemories,
|
|
145
|
-
updatedAt: waypoint.updatedAt.toISOString(),
|
|
146
|
-
});
|
|
147
|
-
}
|
|
148
|
-
catch (error) {
|
|
149
|
-
const message = error instanceof Error ? error.message : "Unknown error";
|
|
150
|
-
return c.json({ error: message }, 500);
|
|
151
|
-
}
|
|
152
|
-
});
|
|
153
|
-
// Index conversations (trigger incremental indexing)
|
|
154
|
-
app.post("/index-conversations", async (c) => {
|
|
155
|
-
try {
|
|
156
|
-
const conversationService = memoryService.getConversationService();
|
|
157
|
-
if (!conversationService) {
|
|
158
|
-
return c.json({ error: "Conversation history indexing is not enabled" }, 400);
|
|
159
|
-
}
|
|
160
|
-
const body = await c.req.json().catch(() => ({}));
|
|
161
|
-
const since = body.since ? new Date(body.since) : undefined;
|
|
162
|
-
const result = await conversationService.indexConversations(body.path, since);
|
|
163
|
-
return c.json(result);
|
|
164
|
-
}
|
|
165
|
-
catch (error) {
|
|
166
|
-
const message = error instanceof Error ? error.message : "Unknown error";
|
|
167
|
-
return c.json({ error: message }, 500);
|
|
168
|
-
}
|
|
169
|
-
});
|
|
170
|
-
// Get single memory
|
|
171
|
-
app.get("/memories/:id", async (c) => {
|
|
172
|
-
try {
|
|
173
|
-
const id = c.req.param("id");
|
|
174
|
-
const memory = await memoryService.get(id);
|
|
175
|
-
if (!memory || isDeleted(memory)) {
|
|
176
|
-
return c.json({ error: "Memory not found" }, 404);
|
|
177
|
-
}
|
|
178
|
-
return c.json({
|
|
179
|
-
id: memory.id,
|
|
180
|
-
content: memory.content,
|
|
181
|
-
metadata: memory.metadata,
|
|
182
|
-
createdAt: memory.createdAt.toISOString(),
|
|
183
|
-
updatedAt: memory.updatedAt.toISOString(),
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
catch (error) {
|
|
187
|
-
const message = error instanceof Error ? error.message : "Unknown error";
|
|
188
|
-
return c.json({ error: message }, 500);
|
|
189
|
-
}
|
|
190
|
-
});
|
|
191
|
-
return app;
|
|
192
|
-
}
|
|
193
|
-
export async function startHttpServer(memoryService, config) {
|
|
194
|
-
const app = createHttpApp(memoryService, config);
|
|
195
|
-
// Find an available port (uses configured port if available, otherwise picks a random one)
|
|
196
|
-
const actualPort = await findAvailablePort(config.httpPort, config.httpHost);
|
|
197
|
-
if (isBun) {
|
|
198
|
-
// Use Bun's native server
|
|
199
|
-
const server = Bun.serve({
|
|
200
|
-
port: actualPort,
|
|
201
|
-
hostname: config.httpHost,
|
|
202
|
-
fetch: app.fetch,
|
|
203
|
-
});
|
|
204
|
-
console.error(`[vector-memory-mcp] HTTP server listening on http://${config.httpHost}:${actualPort}`);
|
|
205
|
-
return {
|
|
206
|
-
stop: () => server.stop(),
|
|
207
|
-
port: actualPort,
|
|
208
|
-
};
|
|
209
|
-
}
|
|
210
|
-
else {
|
|
211
|
-
// Use Node.js server via @hono/node-server
|
|
212
|
-
const server = nodeServe({
|
|
213
|
-
fetch: app.fetch,
|
|
214
|
-
port: actualPort,
|
|
215
|
-
hostname: config.httpHost,
|
|
216
|
-
});
|
|
217
|
-
console.error(`[vector-memory-mcp] HTTP server listening on http://${config.httpHost}:${actualPort}`);
|
|
218
|
-
return {
|
|
219
|
-
stop: () => server.close(),
|
|
220
|
-
port: actualPort,
|
|
221
|
-
};
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
//# sourceMappingURL=server.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/http/server.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
DELETED
package/dist/src/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":""}
|
package/dist/src/index.js
DELETED
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { loadConfig, parseCliArgs } from "./config/index.js";
|
|
3
|
-
import { connectToDatabase } from "./db/connection.js";
|
|
4
|
-
import { MemoryRepository } from "./db/memory.repository.js";
|
|
5
|
-
import { ConversationRepository } from "./db/conversation.repository.js";
|
|
6
|
-
import { EmbeddingsService } from "./services/embeddings.service.js";
|
|
7
|
-
import { MemoryService } from "./services/memory.service.js";
|
|
8
|
-
import { ConversationHistoryService } from "./services/conversation.service.js";
|
|
9
|
-
import { startServer } from "./mcp/server.js";
|
|
10
|
-
import { startHttpServer } from "./http/server.js";
|
|
11
|
-
async function main() {
|
|
12
|
-
const args = process.argv.slice(2);
|
|
13
|
-
// Check for warmup command
|
|
14
|
-
if (args[0] === "warmup") {
|
|
15
|
-
const { warmup } = await import("../scripts/warmup.js");
|
|
16
|
-
await warmup();
|
|
17
|
-
return;
|
|
18
|
-
}
|
|
19
|
-
// Parse CLI args and load config
|
|
20
|
-
const overrides = parseCliArgs(args);
|
|
21
|
-
const config = loadConfig(overrides);
|
|
22
|
-
// Initialize database
|
|
23
|
-
const db = await connectToDatabase(config.dbPath);
|
|
24
|
-
// Initialize layers
|
|
25
|
-
const repository = new MemoryRepository(db);
|
|
26
|
-
const embeddings = new EmbeddingsService(config.embeddingModel, config.embeddingDimension);
|
|
27
|
-
const memoryService = new MemoryService(repository, embeddings);
|
|
28
|
-
// Conditionally initialize conversation history indexing
|
|
29
|
-
if (config.conversationHistory.enabled) {
|
|
30
|
-
const conversationRepository = new ConversationRepository(db);
|
|
31
|
-
const conversationService = new ConversationHistoryService(conversationRepository, embeddings, config.conversationHistory, config.dbPath);
|
|
32
|
-
memoryService.setConversationService(conversationService);
|
|
33
|
-
console.error("[vector-memory-mcp] Conversation history indexing enabled");
|
|
34
|
-
}
|
|
35
|
-
// Track cleanup functions
|
|
36
|
-
let httpStop = null;
|
|
37
|
-
// Graceful shutdown handler
|
|
38
|
-
const shutdown = () => {
|
|
39
|
-
console.error("[vector-memory-mcp] Shutting down...");
|
|
40
|
-
if (httpStop)
|
|
41
|
-
httpStop();
|
|
42
|
-
db.close();
|
|
43
|
-
process.exit(0);
|
|
44
|
-
};
|
|
45
|
-
// Handle signals and stdin close (parent process exit)
|
|
46
|
-
process.on("SIGTERM", shutdown);
|
|
47
|
-
process.on("SIGINT", shutdown);
|
|
48
|
-
process.stdin.on("close", shutdown);
|
|
49
|
-
process.stdin.on("end", shutdown);
|
|
50
|
-
// Start HTTP server if transport mode includes it
|
|
51
|
-
if (config.enableHttp) {
|
|
52
|
-
const http = await startHttpServer(memoryService, config);
|
|
53
|
-
httpStop = http.stop;
|
|
54
|
-
console.error(`[vector-memory-mcp] MCP available at http://${config.httpHost}:${config.httpPort}/mcp`);
|
|
55
|
-
}
|
|
56
|
-
// Start stdio transport unless in HTTP-only mode
|
|
57
|
-
if (config.transportMode !== "http") {
|
|
58
|
-
await startServer(memoryService);
|
|
59
|
-
}
|
|
60
|
-
else {
|
|
61
|
-
// In HTTP-only mode, keep the process running
|
|
62
|
-
console.error("[vector-memory-mcp] Running in HTTP-only mode (no stdio)");
|
|
63
|
-
// Keep process alive - the HTTP server runs indefinitely
|
|
64
|
-
await new Promise(() => { });
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
main().catch(console.error);
|
|
68
|
-
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,oCAAoC,CAAC;AAChF,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,2BAA2B;IAC3B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,CAAC;QACxD,MAAM,MAAM,EAAE,CAAC;QACf,OAAO;IACT,CAAC;IAED,iCAAiC;IACjC,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;IAErC,sBAAsB;IACtB,MAAM,EAAE,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAElD,oBAAoB;IACpB,MAAM,UAAU,GAAG,IAAI,gBAAgB,CAAC,EAAE,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,IAAI,iBAAiB,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAC3F,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;IAEhE,yDAAyD;IACzD,IAAI,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,CAAC;QACvC,MAAM,sBAAsB,GAAG,IAAI,sBAAsB,CAAC,EAAE,CAAC,CAAC;QAC9D,MAAM,mBAAmB,GAAG,IAAI,0BAA0B,CACxD,sBAAsB,EACtB,UAAU,EACV,MAAM,CAAC,mBAAmB,EAC1B,MAAM,CAAC,MAAM,CACd,CAAC;QACF,aAAa,CAAC,sBAAsB,CAAC,mBAAmB,CAAC,CAAC;QAC1D,OAAO,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;IAC7E,CAAC;IAED,0BAA0B;IAC1B,IAAI,QAAQ,GAAwB,IAAI,CAAC;IAEzC,4BAA4B;IAC5B,MAAM,QAAQ,GAAG,GAAG,EAAE;QACpB,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;QACtD,IAAI,QAAQ;YAAE,QAAQ,EAAE,CAAC;QACzB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC;IAEF,uDAAuD;IACvD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;IAChC,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACpC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IAElC,kDAAkD;IAClD,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,MAAM,eAAe,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;QAC1D,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;QACrB,OAAO,CAAC,KAAK,CACX,+CAA+C,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,MAAM,CACxF,CAAC;IACJ,CAAC;IAED,iDAAiD;IACjD,IAAI,MAAM,CAAC,aAAa,KAAK,MAAM,EAAE,CAAC;QACpC,MAAM,WAAW,CAAC,aAAa,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,8CAA8C;QAC9C,OAAO,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,yDAAyD;QACzD,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
-
import type { MemoryService } from "../services/memory.service.js";
|
|
3
|
-
export declare function handleStoreMemories(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
4
|
-
export declare function handleDeleteMemories(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
5
|
-
export declare function handleUpdateMemories(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
6
|
-
export declare function handleSearchMemories(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
7
|
-
export declare function handleGetMemories(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
8
|
-
export declare function handleReportMemoryUsefulness(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
9
|
-
export declare function handleSetWaypoint(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
10
|
-
export declare function handleGetWaypoint(_args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
11
|
-
export declare function handleIndexConversations(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
12
|
-
export declare function handleListIndexedSessions(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
13
|
-
export declare function handleReindexSession(args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
14
|
-
export declare function handleToolCall(name: string, args: Record<string, unknown> | undefined, service: MemoryService): Promise<CallToolResult>;
|
|
15
|
-
//# sourceMappingURL=handlers.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.d.ts","sourceRoot":"","sources":["../../../src/mcp/handlers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAKnE,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA4BzB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAGD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAgCzB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAsCzB;AAsBD,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAYzB;AAED,wBAAsB,4BAA4B,CAChD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAqBzB;AAED,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAgBzB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAwBzB;AAqCD,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAuBzB;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAkCzB;AAED,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA6BzB;AAED,wBAAsB,cAAc,CAClC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EACzC,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CA8BzB"}
|
package/dist/src/mcp/handlers.js
DELETED
|
@@ -1,313 +0,0 @@
|
|
|
1
|
-
export async function handleStoreMemories(args, service) {
|
|
2
|
-
const memories = args?.memories;
|
|
3
|
-
const ids = [];
|
|
4
|
-
for (const item of memories) {
|
|
5
|
-
const memory = await service.store(item.content, item.metadata ?? {}, item.embedding_text);
|
|
6
|
-
ids.push(memory.id);
|
|
7
|
-
}
|
|
8
|
-
return {
|
|
9
|
-
content: [
|
|
10
|
-
{
|
|
11
|
-
type: "text",
|
|
12
|
-
text: ids.length === 1
|
|
13
|
-
? `Memory stored with ID: ${ids[0]}`
|
|
14
|
-
: `Stored ${ids.length} memories:\n${ids.map((id) => `- ${id}`).join("\n")}`,
|
|
15
|
-
},
|
|
16
|
-
],
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
export async function handleDeleteMemories(args, service) {
|
|
20
|
-
const ids = args?.ids;
|
|
21
|
-
const results = [];
|
|
22
|
-
for (const id of ids) {
|
|
23
|
-
const success = await service.delete(id);
|
|
24
|
-
results.push(success ? `Memory ${id} deleted successfully` : `Memory ${id} not found`);
|
|
25
|
-
}
|
|
26
|
-
return {
|
|
27
|
-
content: [
|
|
28
|
-
{
|
|
29
|
-
type: "text",
|
|
30
|
-
text: results.join("\n"),
|
|
31
|
-
},
|
|
32
|
-
],
|
|
33
|
-
};
|
|
34
|
-
}
|
|
35
|
-
export async function handleUpdateMemories(args, service) {
|
|
36
|
-
const updates = args?.updates;
|
|
37
|
-
const results = [];
|
|
38
|
-
for (const update of updates) {
|
|
39
|
-
const memory = await service.update(update.id, {
|
|
40
|
-
content: update.content,
|
|
41
|
-
embeddingText: update.embedding_text,
|
|
42
|
-
metadata: update.metadata,
|
|
43
|
-
});
|
|
44
|
-
if (memory) {
|
|
45
|
-
results.push(`Memory ${update.id} updated successfully`);
|
|
46
|
-
}
|
|
47
|
-
else {
|
|
48
|
-
results.push(`Memory ${update.id} not found`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
return {
|
|
52
|
-
content: [
|
|
53
|
-
{
|
|
54
|
-
type: "text",
|
|
55
|
-
text: results.join("\n"),
|
|
56
|
-
},
|
|
57
|
-
],
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
export async function handleSearchMemories(args, service) {
|
|
61
|
-
const query = args?.query;
|
|
62
|
-
const intent = args?.intent ?? "fact_check";
|
|
63
|
-
const limit = args?.limit ?? 10;
|
|
64
|
-
const includeDeleted = args?.include_deleted ?? false;
|
|
65
|
-
const historyOnly = args?.history_only ?? false;
|
|
66
|
-
// history_only implies include_history
|
|
67
|
-
const includeHistory = historyOnly ? true : args?.include_history;
|
|
68
|
-
const results = await service.search(query, intent, limit, includeDeleted, {
|
|
69
|
-
includeHistory,
|
|
70
|
-
historyOnly,
|
|
71
|
-
historyFilters: parseHistoryFilters(args),
|
|
72
|
-
});
|
|
73
|
-
if (results.length === 0) {
|
|
74
|
-
return {
|
|
75
|
-
content: [{ type: "text", text: "No results found matching your query." }],
|
|
76
|
-
};
|
|
77
|
-
}
|
|
78
|
-
const formatted = results.map((r) => {
|
|
79
|
-
let result = `[${r.source}] ID: ${r.id}\nContent: ${r.content}`;
|
|
80
|
-
if (r.metadata && Object.keys(r.metadata).length > 0) {
|
|
81
|
-
result += `\nMetadata: ${JSON.stringify(r.metadata)}`;
|
|
82
|
-
}
|
|
83
|
-
if (r.source === "memory" && includeDeleted && r.supersededBy) {
|
|
84
|
-
result += `\n[DELETED]`;
|
|
85
|
-
}
|
|
86
|
-
if (r.source === "conversation_history" && r.sessionId) {
|
|
87
|
-
result += `\nSession: ${r.sessionId}`;
|
|
88
|
-
}
|
|
89
|
-
return result;
|
|
90
|
-
});
|
|
91
|
-
return {
|
|
92
|
-
content: [{ type: "text", text: formatted.join("\n\n---\n\n") }],
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
function formatMemoryDetail(memoryId, memory) {
|
|
96
|
-
if (!memory) {
|
|
97
|
-
return `Memory ${memoryId} not found`;
|
|
98
|
-
}
|
|
99
|
-
let result = `ID: ${memory.id}\nContent: ${memory.content}`;
|
|
100
|
-
if (memory.metadata && Object.keys(memory.metadata).length > 0) {
|
|
101
|
-
result += `\nMetadata: ${JSON.stringify(memory.metadata)}`;
|
|
102
|
-
}
|
|
103
|
-
result += `\nCreated: ${memory.createdAt.toISOString()}`;
|
|
104
|
-
result += `\nUpdated: ${memory.updatedAt.toISOString()}`;
|
|
105
|
-
if (memory.supersededBy) {
|
|
106
|
-
result += `\nSuperseded by: ${memory.supersededBy}`;
|
|
107
|
-
}
|
|
108
|
-
return result;
|
|
109
|
-
}
|
|
110
|
-
export async function handleGetMemories(args, service) {
|
|
111
|
-
const ids = args?.ids;
|
|
112
|
-
const memories = await service.getMultiple(ids);
|
|
113
|
-
const memoryMap = new Map(memories.map((m) => [m.id, m]));
|
|
114
|
-
// Preserve requested order; show "not found" for missing IDs
|
|
115
|
-
const blocks = ids.map((id) => formatMemoryDetail(id, memoryMap.get(id) ?? null));
|
|
116
|
-
return {
|
|
117
|
-
content: [{ type: "text", text: blocks.join("\n\n---\n\n") }],
|
|
118
|
-
};
|
|
119
|
-
}
|
|
120
|
-
export async function handleReportMemoryUsefulness(args, service) {
|
|
121
|
-
const memoryId = args?.memory_id;
|
|
122
|
-
const useful = args?.useful;
|
|
123
|
-
const memory = await service.vote(memoryId, useful ? 1 : -1);
|
|
124
|
-
if (!memory) {
|
|
125
|
-
return {
|
|
126
|
-
content: [{ type: "text", text: `Memory ${memoryId} not found` }],
|
|
127
|
-
isError: true,
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
return {
|
|
131
|
-
content: [
|
|
132
|
-
{
|
|
133
|
-
type: "text",
|
|
134
|
-
text: `Memory ${memoryId} marked as ${useful ? "useful" : "not useful"}. New usefulness score: ${memory.usefulness}`,
|
|
135
|
-
},
|
|
136
|
-
],
|
|
137
|
-
};
|
|
138
|
-
}
|
|
139
|
-
export async function handleSetWaypoint(args, service) {
|
|
140
|
-
const memory = await service.setWaypoint({
|
|
141
|
-
project: args?.project,
|
|
142
|
-
branch: args?.branch,
|
|
143
|
-
summary: args?.summary,
|
|
144
|
-
completed: args?.completed ?? [],
|
|
145
|
-
in_progress_blocked: args?.in_progress_blocked ?? [],
|
|
146
|
-
key_decisions: args?.key_decisions ?? [],
|
|
147
|
-
next_steps: args?.next_steps ?? [],
|
|
148
|
-
memory_ids: args?.memory_ids ?? [],
|
|
149
|
-
metadata: args?.metadata ?? {},
|
|
150
|
-
});
|
|
151
|
-
return {
|
|
152
|
-
content: [{ type: "text", text: `Waypoint stored with memory ID: ${memory.id}` }],
|
|
153
|
-
};
|
|
154
|
-
}
|
|
155
|
-
export async function handleGetWaypoint(_args, service) {
|
|
156
|
-
const waypoint = await service.getLatestWaypoint();
|
|
157
|
-
if (!waypoint) {
|
|
158
|
-
return {
|
|
159
|
-
content: [{ type: "text", text: "No stored waypoint found." }],
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
// Fetch referenced memories in batch
|
|
163
|
-
const memoryIds = waypoint.metadata.memory_ids ?? [];
|
|
164
|
-
let memoriesSection = "";
|
|
165
|
-
if (memoryIds.length > 0) {
|
|
166
|
-
const fetched = await service.getMultiple(memoryIds);
|
|
167
|
-
const blocks = fetched.map((m) => `### Memory: ${m.id}\n${m.content}`);
|
|
168
|
-
if (blocks.length > 0) {
|
|
169
|
-
memoriesSection = `\n\n## Referenced Memories\n\n${blocks.join("\n\n")}`;
|
|
170
|
-
}
|
|
171
|
-
}
|
|
172
|
-
return {
|
|
173
|
-
content: [{ type: "text", text: waypoint.content + memoriesSection }],
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
function parseHistoryFilters(args) {
|
|
177
|
-
return {
|
|
178
|
-
sessionId: args?.session_id,
|
|
179
|
-
role: args?.role_filter,
|
|
180
|
-
after: args?.history_after
|
|
181
|
-
? new Date(args.history_after)
|
|
182
|
-
: undefined,
|
|
183
|
-
before: args?.history_before
|
|
184
|
-
? new Date(args.history_before)
|
|
185
|
-
: undefined,
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
function requireConversationService(service) {
|
|
189
|
-
const conversationService = service.getConversationService();
|
|
190
|
-
if (!conversationService) {
|
|
191
|
-
return {
|
|
192
|
-
error: {
|
|
193
|
-
content: [
|
|
194
|
-
{
|
|
195
|
-
type: "text",
|
|
196
|
-
text: "Conversation history indexing is not enabled. Enable it with --enable-history.",
|
|
197
|
-
},
|
|
198
|
-
],
|
|
199
|
-
isError: true,
|
|
200
|
-
},
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
return { service: conversationService };
|
|
204
|
-
}
|
|
205
|
-
export async function handleIndexConversations(args, service) {
|
|
206
|
-
const conv = requireConversationService(service);
|
|
207
|
-
if ("error" in conv)
|
|
208
|
-
return conv.error;
|
|
209
|
-
const conversationService = conv.service;
|
|
210
|
-
const path = args?.path;
|
|
211
|
-
const sinceStr = args?.since;
|
|
212
|
-
const since = sinceStr ? new Date(sinceStr) : undefined;
|
|
213
|
-
const result = await conversationService.indexConversations(path, since);
|
|
214
|
-
return {
|
|
215
|
-
content: [
|
|
216
|
-
{
|
|
217
|
-
type: "text",
|
|
218
|
-
text: `Indexing complete:\n- Indexed: ${result.indexed} sessions\n- Skipped: ${result.skipped} sessions (unchanged)\n` +
|
|
219
|
-
(result.errors.length > 0
|
|
220
|
-
? `- Errors: ${result.errors.length}\n${result.errors.map((e) => ` - ${e}`).join("\n")}`
|
|
221
|
-
: "- No errors"),
|
|
222
|
-
},
|
|
223
|
-
],
|
|
224
|
-
};
|
|
225
|
-
}
|
|
226
|
-
export async function handleListIndexedSessions(args, service) {
|
|
227
|
-
const conv = requireConversationService(service);
|
|
228
|
-
if ("error" in conv)
|
|
229
|
-
return conv.error;
|
|
230
|
-
const conversationService = conv.service;
|
|
231
|
-
const limit = args?.limit ?? 20;
|
|
232
|
-
const offset = args?.offset ?? 0;
|
|
233
|
-
const { sessions, total } = await conversationService.listIndexedSessions(limit, offset);
|
|
234
|
-
if (sessions.length === 0) {
|
|
235
|
-
return {
|
|
236
|
-
content: [
|
|
237
|
-
{
|
|
238
|
-
type: "text",
|
|
239
|
-
text: "No indexed sessions found. Run index_conversations first.",
|
|
240
|
-
},
|
|
241
|
-
],
|
|
242
|
-
};
|
|
243
|
-
}
|
|
244
|
-
const lines = sessions.map((s) => `Session: ${s.sessionId}\n Project: ${s.project}\n Messages: ${s.messageCount} | Chunks: ${s.chunkCount}\n Period: ${s.firstMessageAt.toISOString()} to ${s.lastMessageAt.toISOString()}\n Indexed: ${s.indexedAt.toISOString()}`);
|
|
245
|
-
return {
|
|
246
|
-
content: [
|
|
247
|
-
{
|
|
248
|
-
type: "text",
|
|
249
|
-
text: `Showing ${offset + 1}-${offset + sessions.length} of ${total} sessions:\n\n${lines.join("\n\n")}`,
|
|
250
|
-
},
|
|
251
|
-
],
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
export async function handleReindexSession(args, service) {
|
|
255
|
-
const conv = requireConversationService(service);
|
|
256
|
-
if ("error" in conv)
|
|
257
|
-
return conv.error;
|
|
258
|
-
const conversationService = conv.service;
|
|
259
|
-
const sessionId = args?.session_id;
|
|
260
|
-
if (!sessionId) {
|
|
261
|
-
return {
|
|
262
|
-
content: [{ type: "text", text: "session_id is required" }],
|
|
263
|
-
isError: true,
|
|
264
|
-
};
|
|
265
|
-
}
|
|
266
|
-
const result = await conversationService.reindexSession(sessionId);
|
|
267
|
-
if (!result.success) {
|
|
268
|
-
return {
|
|
269
|
-
content: [{ type: "text", text: `Reindex failed: ${result.error}` }],
|
|
270
|
-
isError: true,
|
|
271
|
-
};
|
|
272
|
-
}
|
|
273
|
-
return {
|
|
274
|
-
content: [
|
|
275
|
-
{
|
|
276
|
-
type: "text",
|
|
277
|
-
text: `Session ${sessionId} reindexed successfully. ${result.chunkCount} chunks created.`,
|
|
278
|
-
},
|
|
279
|
-
],
|
|
280
|
-
};
|
|
281
|
-
}
|
|
282
|
-
export async function handleToolCall(name, args, service) {
|
|
283
|
-
switch (name) {
|
|
284
|
-
case "store_memories":
|
|
285
|
-
return handleStoreMemories(args, service);
|
|
286
|
-
case "update_memories":
|
|
287
|
-
return handleUpdateMemories(args, service);
|
|
288
|
-
case "delete_memories":
|
|
289
|
-
return handleDeleteMemories(args, service);
|
|
290
|
-
case "search_memories":
|
|
291
|
-
return handleSearchMemories(args, service);
|
|
292
|
-
case "get_memories":
|
|
293
|
-
return handleGetMemories(args, service);
|
|
294
|
-
case "report_memory_usefulness":
|
|
295
|
-
return handleReportMemoryUsefulness(args, service);
|
|
296
|
-
case "set_waypoint":
|
|
297
|
-
return handleSetWaypoint(args, service);
|
|
298
|
-
case "get_waypoint":
|
|
299
|
-
return handleGetWaypoint(args, service);
|
|
300
|
-
case "index_conversations":
|
|
301
|
-
return handleIndexConversations(args, service);
|
|
302
|
-
case "list_indexed_sessions":
|
|
303
|
-
return handleListIndexedSessions(args, service);
|
|
304
|
-
case "reindex_session":
|
|
305
|
-
return handleReindexSession(args, service);
|
|
306
|
-
default:
|
|
307
|
-
return {
|
|
308
|
-
content: [{ type: "text", text: `Unknown tool: ${name}` }],
|
|
309
|
-
isError: true,
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
//# sourceMappingURL=handlers.js.map
|