simple-memory-mcp 1.1.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/LICENSE +21 -0
- package/README.md +742 -0
- package/dist/cli/arg-parser.d.ts +9 -0
- package/dist/cli/arg-parser.d.ts.map +1 -0
- package/dist/cli/arg-parser.js +68 -0
- package/dist/cli/arg-parser.js.map +1 -0
- package/dist/cli/help-generator.d.ts +8 -0
- package/dist/cli/help-generator.d.ts.map +1 -0
- package/dist/cli/help-generator.js +89 -0
- package/dist/cli/help-generator.js.map +1 -0
- package/dist/cli/index.d.ts +27 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +56 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/query-builder.d.ts +8 -0
- package/dist/cli/query-builder.d.ts.map +1 -0
- package/dist/cli/query-builder.js +63 -0
- package/dist/cli/query-builder.js.map +1 -0
- package/dist/cli/shortcuts-config.d.ts +26 -0
- package/dist/cli/shortcuts-config.d.ts.map +1 -0
- package/dist/cli/shortcuts-config.js +94 -0
- package/dist/cli/shortcuts-config.js.map +1 -0
- package/dist/graphql/resolvers.d.ts +101 -0
- package/dist/graphql/resolvers.d.ts.map +1 -0
- package/dist/graphql/resolvers.js +98 -0
- package/dist/graphql/resolvers.js.map +1 -0
- package/dist/graphql/schema.d.ts +13 -0
- package/dist/graphql/schema.d.ts.map +1 -0
- package/dist/graphql/schema.js +314 -0
- package/dist/graphql/schema.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +573 -0
- package/dist/index.js.map +1 -0
- package/dist/services/backup-service.d.ts +57 -0
- package/dist/services/backup-service.d.ts.map +1 -0
- package/dist/services/backup-service.js +191 -0
- package/dist/services/backup-service.js.map +1 -0
- package/dist/services/database-optimizer.d.ts +15 -0
- package/dist/services/database-optimizer.d.ts.map +1 -0
- package/dist/services/database-optimizer.js +45 -0
- package/dist/services/database-optimizer.js.map +1 -0
- package/dist/services/memory-service.d.ts +126 -0
- package/dist/services/memory-service.d.ts.map +1 -0
- package/dist/services/memory-service.js +862 -0
- package/dist/services/memory-service.js.map +1 -0
- package/dist/services/migrations.d.ts +17 -0
- package/dist/services/migrations.d.ts.map +1 -0
- package/dist/services/migrations.js +273 -0
- package/dist/services/migrations.js.map +1 -0
- package/dist/tests/backup-export-test.d.ts +2 -0
- package/dist/tests/backup-export-test.d.ts.map +1 -0
- package/dist/tests/backup-export-test.js +162 -0
- package/dist/tests/backup-export-test.js.map +1 -0
- package/dist/tests/backup-test.d.ts +14 -0
- package/dist/tests/backup-test.d.ts.map +1 -0
- package/dist/tests/backup-test.js +209 -0
- package/dist/tests/backup-test.js.map +1 -0
- package/dist/tests/export-import-test.d.ts +15 -0
- package/dist/tests/export-import-test.d.ts.map +1 -0
- package/dist/tests/export-import-test.js +227 -0
- package/dist/tests/export-import-test.js.map +1 -0
- package/dist/tests/graphql-comprehensive-test.d.ts +6 -0
- package/dist/tests/graphql-comprehensive-test.d.ts.map +1 -0
- package/dist/tests/graphql-comprehensive-test.js +342 -0
- package/dist/tests/graphql-comprehensive-test.js.map +1 -0
- package/dist/tests/graphql-performance-test.d.ts +6 -0
- package/dist/tests/graphql-performance-test.d.ts.map +1 -0
- package/dist/tests/graphql-performance-test.js +141 -0
- package/dist/tests/graphql-performance-test.js.map +1 -0
- package/dist/tests/graphql-test.d.ts +5 -0
- package/dist/tests/graphql-test.d.ts.map +1 -0
- package/dist/tests/graphql-test.js +47 -0
- package/dist/tests/graphql-test.js.map +1 -0
- package/dist/tests/memory-server-tests.d.ts +7 -0
- package/dist/tests/memory-server-tests.d.ts.map +1 -0
- package/dist/tests/memory-server-tests.js +466 -0
- package/dist/tests/memory-server-tests.js.map +1 -0
- package/dist/tests/migration-test.d.ts +2 -0
- package/dist/tests/migration-test.d.ts.map +1 -0
- package/dist/tests/migration-test.js +270 -0
- package/dist/tests/migration-test.js.map +1 -0
- package/dist/tests/performance-benchmark.d.ts +7 -0
- package/dist/tests/performance-benchmark.d.ts.map +1 -0
- package/dist/tests/performance-benchmark.js +234 -0
- package/dist/tests/performance-benchmark.js.map +1 -0
- package/dist/tests/performance-test.d.ts +3 -0
- package/dist/tests/performance-test.d.ts.map +1 -0
- package/dist/tests/performance-test.js +61 -0
- package/dist/tests/performance-test.js.map +1 -0
- package/dist/tests/time-range-test.d.ts +7 -0
- package/dist/tests/time-range-test.d.ts.map +1 -0
- package/dist/tests/time-range-test.js +169 -0
- package/dist/tests/time-range-test.js.map +1 -0
- package/dist/tools/delete-memory/cli-parser.d.ts +2 -0
- package/dist/tools/delete-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/delete-memory/cli-parser.js +13 -0
- package/dist/tools/delete-memory/cli-parser.js.map +1 -0
- package/dist/tools/delete-memory/executor.d.ts +13 -0
- package/dist/tools/delete-memory/executor.d.ts.map +1 -0
- package/dist/tools/delete-memory/executor.js +40 -0
- package/dist/tools/delete-memory/executor.js.map +1 -0
- package/dist/tools/delete-memory/index.d.ts +3 -0
- package/dist/tools/delete-memory/index.d.ts.map +1 -0
- package/dist/tools/delete-memory/index.js +24 -0
- package/dist/tools/delete-memory/index.js.map +1 -0
- package/dist/tools/export-memory/cli-parser.d.ts +2 -0
- package/dist/tools/export-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/export-memory/cli-parser.js +34 -0
- package/dist/tools/export-memory/cli-parser.js.map +1 -0
- package/dist/tools/export-memory/executor.d.ts +10 -0
- package/dist/tools/export-memory/executor.d.ts.map +1 -0
- package/dist/tools/export-memory/executor.js +41 -0
- package/dist/tools/export-memory/executor.js.map +1 -0
- package/dist/tools/export-memory/index.d.ts +4 -0
- package/dist/tools/export-memory/index.d.ts.map +1 -0
- package/dist/tools/export-memory/index.js +99 -0
- package/dist/tools/export-memory/index.js.map +1 -0
- package/dist/tools/import-memory/cli-parser.d.ts +2 -0
- package/dist/tools/import-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/import-memory/cli-parser.js +25 -0
- package/dist/tools/import-memory/cli-parser.js.map +1 -0
- package/dist/tools/import-memory/executor.d.ts +8 -0
- package/dist/tools/import-memory/executor.d.ts.map +1 -0
- package/dist/tools/import-memory/executor.js +31 -0
- package/dist/tools/import-memory/executor.js.map +1 -0
- package/dist/tools/import-memory/index.d.ts +4 -0
- package/dist/tools/import-memory/index.d.ts.map +1 -0
- package/dist/tools/import-memory/index.js +70 -0
- package/dist/tools/import-memory/index.js.map +1 -0
- package/dist/tools/index.d.ts +14 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +48 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/memory-graphql/cli-parser.d.ts +6 -0
- package/dist/tools/memory-graphql/cli-parser.d.ts.map +1 -0
- package/dist/tools/memory-graphql/cli-parser.js +24 -0
- package/dist/tools/memory-graphql/cli-parser.js.map +1 -0
- package/dist/tools/memory-graphql/executor.d.ts +18 -0
- package/dist/tools/memory-graphql/executor.d.ts.map +1 -0
- package/dist/tools/memory-graphql/executor.js +53 -0
- package/dist/tools/memory-graphql/executor.js.map +1 -0
- package/dist/tools/memory-graphql/index.d.ts +3 -0
- package/dist/tools/memory-graphql/index.d.ts.map +1 -0
- package/dist/tools/memory-graphql/index.js +73 -0
- package/dist/tools/memory-graphql/index.js.map +1 -0
- package/dist/tools/memory-stats/cli-parser.d.ts +2 -0
- package/dist/tools/memory-stats/cli-parser.d.ts.map +1 -0
- package/dist/tools/memory-stats/cli-parser.js +8 -0
- package/dist/tools/memory-stats/cli-parser.js.map +1 -0
- package/dist/tools/memory-stats/executor.d.ts +4 -0
- package/dist/tools/memory-stats/executor.d.ts.map +1 -0
- package/dist/tools/memory-stats/executor.js +4 -0
- package/dist/tools/memory-stats/executor.js.map +1 -0
- package/dist/tools/memory-stats/index.d.ts +3 -0
- package/dist/tools/memory-stats/index.d.ts.map +1 -0
- package/dist/tools/memory-stats/index.js +15 -0
- package/dist/tools/memory-stats/index.js.map +1 -0
- package/dist/tools/search-memory/cli-parser.d.ts +2 -0
- package/dist/tools/search-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/search-memory/cli-parser.js +56 -0
- package/dist/tools/search-memory/cli-parser.js.map +1 -0
- package/dist/tools/search-memory/executor.d.ts +36 -0
- package/dist/tools/search-memory/executor.d.ts.map +1 -0
- package/dist/tools/search-memory/executor.js +83 -0
- package/dist/tools/search-memory/executor.js.map +1 -0
- package/dist/tools/search-memory/index.d.ts +3 -0
- package/dist/tools/search-memory/index.d.ts.map +1 -0
- package/dist/tools/search-memory/index.js +89 -0
- package/dist/tools/search-memory/index.js.map +1 -0
- package/dist/tools/store-memory/cli-parser.d.ts +2 -0
- package/dist/tools/store-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/store-memory/cli-parser.js +21 -0
- package/dist/tools/store-memory/cli-parser.js.map +1 -0
- package/dist/tools/store-memory/executor.d.ts +16 -0
- package/dist/tools/store-memory/executor.d.ts.map +1 -0
- package/dist/tools/store-memory/executor.js +100 -0
- package/dist/tools/store-memory/executor.js.map +1 -0
- package/dist/tools/store-memory/index.d.ts +3 -0
- package/dist/tools/store-memory/index.d.ts.map +1 -0
- package/dist/tools/store-memory/index.js +68 -0
- package/dist/tools/store-memory/index.js.map +1 -0
- package/dist/tools/sync-memory/cli-parser.d.ts +1 -0
- package/dist/tools/sync-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/sync-memory/cli-parser.js +2 -0
- package/dist/tools/sync-memory/cli-parser.js.map +1 -0
- package/dist/tools/sync-memory/executor.d.ts +1 -0
- package/dist/tools/sync-memory/executor.d.ts.map +1 -0
- package/dist/tools/sync-memory/executor.js +2 -0
- package/dist/tools/sync-memory/executor.js.map +1 -0
- package/dist/tools/sync-memory/index.d.ts +1 -0
- package/dist/tools/sync-memory/index.d.ts.map +1 -0
- package/dist/tools/sync-memory/index.js +2 -0
- package/dist/tools/sync-memory/index.js.map +1 -0
- package/dist/tools/update-memory/cli-parser.d.ts +2 -0
- package/dist/tools/update-memory/cli-parser.d.ts.map +1 -0
- package/dist/tools/update-memory/cli-parser.js +17 -0
- package/dist/tools/update-memory/cli-parser.js.map +1 -0
- package/dist/tools/update-memory/executor.d.ts +16 -0
- package/dist/tools/update-memory/executor.d.ts.map +1 -0
- package/dist/tools/update-memory/executor.js +59 -0
- package/dist/tools/update-memory/executor.js.map +1 -0
- package/dist/tools/update-memory/index.d.ts +3 -0
- package/dist/tools/update-memory/index.d.ts.map +1 -0
- package/dist/tools/update-memory/index.js +30 -0
- package/dist/tools/update-memory/index.js.map +1 -0
- package/dist/transports/streamable-http.d.ts +38 -0
- package/dist/transports/streamable-http.d.ts.map +1 -0
- package/dist/transports/streamable-http.js +209 -0
- package/dist/transports/streamable-http.js.map +1 -0
- package/dist/types/tools.d.ts +79 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +3 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/cli-parser.d.ts +12 -0
- package/dist/utils/cli-parser.d.ts.map +1 -0
- package/dist/utils/cli-parser.js +43 -0
- package/dist/utils/cli-parser.js.map +1 -0
- package/dist/utils/config.d.ts +95 -0
- package/dist/utils/config.d.ts.map +1 -0
- package/dist/utils/config.js +176 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/db-integrity-check.d.ts +22 -0
- package/dist/utils/db-integrity-check.d.ts.map +1 -0
- package/dist/utils/db-integrity-check.js +69 -0
- package/dist/utils/db-integrity-check.js.map +1 -0
- package/dist/utils/debug.d.ts +25 -0
- package/dist/utils/debug.d.ts.map +1 -0
- package/dist/utils/debug.js +67 -0
- package/dist/utils/debug.js.map +1 -0
- package/dist/utils/help-generator.d.ts +18 -0
- package/dist/utils/help-generator.d.ts.map +1 -0
- package/dist/utils/help-generator.js +81 -0
- package/dist/utils/help-generator.js.map +1 -0
- package/dist/utils/json-parser.d.ts +12 -0
- package/dist/utils/json-parser.d.ts.map +1 -0
- package/dist/utils/json-parser.js +52 -0
- package/dist/utils/json-parser.js.map +1 -0
- package/dist/utils/mcp-config.d.ts +12 -0
- package/dist/utils/mcp-config.d.ts.map +1 -0
- package/dist/utils/mcp-config.js +64 -0
- package/dist/utils/mcp-config.js.map +1 -0
- package/dist/web-server.d.ts +3 -0
- package/dist/web-server.d.ts.map +1 -0
- package/dist/web-server.js +265 -0
- package/dist/web-server.js.map +1 -0
- package/package.json +75 -0
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* StreamableHTTPServerTransport - MCP transport over HTTP
|
|
3
|
+
*
|
|
4
|
+
* Implements the MCP Server transport interface using HTTP instead of stdio.
|
|
5
|
+
* Properly handles the async nature of MCP over synchronous HTTP.
|
|
6
|
+
*/
|
|
7
|
+
import { createServer } from 'http';
|
|
8
|
+
import { debugLog } from '../utils/debug.js';
|
|
9
|
+
export class StreamableHTTPServerTransport {
|
|
10
|
+
port;
|
|
11
|
+
host;
|
|
12
|
+
timeout;
|
|
13
|
+
httpServer = null;
|
|
14
|
+
// Map request IDs to their response handlers
|
|
15
|
+
pendingResponses = new Map();
|
|
16
|
+
// Transport interface properties
|
|
17
|
+
onmessage;
|
|
18
|
+
onclose;
|
|
19
|
+
onerror;
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
this.port = options.port || 3000;
|
|
22
|
+
this.host = options.host || 'localhost';
|
|
23
|
+
this.timeout = options.timeout || 30000; // 30 second default
|
|
24
|
+
}
|
|
25
|
+
async start() {
|
|
26
|
+
if (this.httpServer) {
|
|
27
|
+
throw new Error('Server already started');
|
|
28
|
+
}
|
|
29
|
+
return new Promise((resolve, reject) => {
|
|
30
|
+
this.httpServer = createServer(this.handleRequest.bind(this));
|
|
31
|
+
this.httpServer.once('error', (error) => {
|
|
32
|
+
this.httpServer = null;
|
|
33
|
+
if (error.code === 'EADDRINUSE') {
|
|
34
|
+
reject(new Error(`Port ${this.port} is already in use`));
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
reject(error);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
this.httpServer.once('listening', () => {
|
|
41
|
+
console.log(`✅ HTTP MCP Transport listening on http://${this.host}:${this.port}/mcp`);
|
|
42
|
+
resolve();
|
|
43
|
+
});
|
|
44
|
+
this.httpServer.listen(this.port, this.host);
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
async close() {
|
|
48
|
+
// Clear all pending responses
|
|
49
|
+
for (const [id, pending] of this.pendingResponses) {
|
|
50
|
+
clearTimeout(pending.timer);
|
|
51
|
+
pending.resolve({
|
|
52
|
+
jsonrpc: '2.0',
|
|
53
|
+
error: { code: -32603, message: 'Server shutting down' },
|
|
54
|
+
id
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
this.pendingResponses.clear();
|
|
58
|
+
return new Promise((resolve) => {
|
|
59
|
+
if (this.httpServer) {
|
|
60
|
+
this.httpServer.close(() => {
|
|
61
|
+
console.log('✓ HTTP MCP Transport closed');
|
|
62
|
+
resolve();
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
resolve();
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Send a message (response) back to the waiting HTTP request
|
|
72
|
+
*/
|
|
73
|
+
async send(message) {
|
|
74
|
+
debugLog('[HTTP Transport] Sending message:', message);
|
|
75
|
+
// Check if this is a response to a pending request
|
|
76
|
+
if ('id' in message && message.id !== null && message.id !== undefined) {
|
|
77
|
+
const pending = this.pendingResponses.get(message.id);
|
|
78
|
+
if (pending) {
|
|
79
|
+
clearTimeout(pending.timer);
|
|
80
|
+
this.pendingResponses.delete(message.id);
|
|
81
|
+
pending.resolve(message);
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
debugLog('[HTTP Transport] No pending request for response:', message.id);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Notifications don't need handling in HTTP context
|
|
88
|
+
}
|
|
89
|
+
async handleRequest(req, res) {
|
|
90
|
+
// Add CORS headers
|
|
91
|
+
res.setHeader('Access-Control-Allow-Origin', '*');
|
|
92
|
+
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, OPTIONS');
|
|
93
|
+
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
|
|
94
|
+
// Handle OPTIONS requests
|
|
95
|
+
if (req.method === 'OPTIONS') {
|
|
96
|
+
res.writeHead(200);
|
|
97
|
+
res.end();
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
// Health check endpoint
|
|
101
|
+
if (req.url === '/health' && req.method === 'GET') {
|
|
102
|
+
this.sendJSON(res, 200, { status: 'ok', transport: 'http' });
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// MCP protocol endpoint
|
|
106
|
+
if (req.url === '/mcp' && req.method === 'POST') {
|
|
107
|
+
await this.handleMCPRequest(req, res);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
// Unknown endpoint
|
|
111
|
+
this.sendJSON(res, 404, { error: 'Not found' });
|
|
112
|
+
}
|
|
113
|
+
async handleMCPRequest(req, res) {
|
|
114
|
+
try {
|
|
115
|
+
const body = await this.readBody(req);
|
|
116
|
+
const request = this.parseRequest(body);
|
|
117
|
+
if (!request) {
|
|
118
|
+
this.sendError(res, 400, -32700, 'Parse error');
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
debugLog('[HTTP Transport] Received request:', request);
|
|
122
|
+
// Handle based on whether it's a request or notification
|
|
123
|
+
if ('id' in request && request.id !== null) {
|
|
124
|
+
// Request - expects a response
|
|
125
|
+
const response = await this.waitForResponse(request);
|
|
126
|
+
this.sendJSON(res, 200, response);
|
|
127
|
+
}
|
|
128
|
+
else {
|
|
129
|
+
// Notification - no response expected
|
|
130
|
+
if (this.onmessage) {
|
|
131
|
+
this.onmessage(request);
|
|
132
|
+
}
|
|
133
|
+
res.writeHead(202);
|
|
134
|
+
res.end();
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
debugLog('[HTTP Transport] Request error:', error);
|
|
139
|
+
if (!res.headersSent) {
|
|
140
|
+
this.sendError(res, 500, -32603, error.message || 'Internal server error');
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
async waitForResponse(request) {
|
|
145
|
+
return new Promise((resolve) => {
|
|
146
|
+
// Type narrowing - we know this request has an id because we checked before calling this method
|
|
147
|
+
if (!('id' in request) || request.id === null || request.id === undefined) {
|
|
148
|
+
resolve({
|
|
149
|
+
jsonrpc: '2.0',
|
|
150
|
+
error: { code: -32600, message: 'Invalid request - missing id' }
|
|
151
|
+
});
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const id = request.id;
|
|
155
|
+
// Set up timeout
|
|
156
|
+
const timer = setTimeout(() => {
|
|
157
|
+
this.pendingResponses.delete(id);
|
|
158
|
+
resolve({
|
|
159
|
+
jsonrpc: '2.0',
|
|
160
|
+
error: { code: -32603, message: 'Request timeout' },
|
|
161
|
+
id
|
|
162
|
+
});
|
|
163
|
+
}, this.timeout);
|
|
164
|
+
// Store the response handler
|
|
165
|
+
this.pendingResponses.set(id, { resolve, timer });
|
|
166
|
+
// Process the request
|
|
167
|
+
if (this.onmessage) {
|
|
168
|
+
this.onmessage(request);
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
}
|
|
172
|
+
async readBody(req) {
|
|
173
|
+
return new Promise((resolve, reject) => {
|
|
174
|
+
let body = '';
|
|
175
|
+
req.on('data', (chunk) => {
|
|
176
|
+
body += chunk.toString('utf-8');
|
|
177
|
+
// Prevent body from growing too large (1MB limit)
|
|
178
|
+
if (body.length > 1024 * 1024) {
|
|
179
|
+
req.removeAllListeners();
|
|
180
|
+
reject(new Error('Payload too large'));
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
req.on('end', () => resolve(body));
|
|
184
|
+
req.on('error', reject);
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
parseRequest(body) {
|
|
188
|
+
try {
|
|
189
|
+
return JSON.parse(body);
|
|
190
|
+
}
|
|
191
|
+
catch {
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
// Helper methods
|
|
196
|
+
sendJSON(res, statusCode, data) {
|
|
197
|
+
res.writeHead(statusCode, { 'Content-Type': 'application/json' });
|
|
198
|
+
res.end(JSON.stringify(data));
|
|
199
|
+
}
|
|
200
|
+
sendError(res, statusCode, code, message, id = null) {
|
|
201
|
+
this.sendJSON(res, statusCode, {
|
|
202
|
+
jsonrpc: '2.0',
|
|
203
|
+
error: { code, message },
|
|
204
|
+
id
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
export default StreamableHTTPServerTransport;
|
|
209
|
+
//# sourceMappingURL=streamable-http.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"streamable-http.js","sourceRoot":"","sources":["../../src/transports/streamable-http.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAmC,MAAM,MAAM,CAAC;AAErE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAQ7C,MAAM,OAAO,6BAA6B;IAChC,IAAI,CAAS;IACb,IAAI,CAAS;IACb,OAAO,CAAS;IAChB,UAAU,GAAQ,IAAI,CAAC;IAE/B,6CAA6C;IACrC,gBAAgB,GAAG,IAAI,GAAG,EAG9B,CAAC;IAEL,iCAAiC;IACjC,SAAS,CAAqC;IAC9C,OAAO,CAAc;IACrB,OAAO,CAA0B;IAEjC,YAAY,UAAgC,EAAE;QAC5C,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC;QACxC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,oBAAoB;IAC/D,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;QAC5C,CAAC;QAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;YAE9D,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAAU,EAAE,EAAE;gBAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAChC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,IAAI,oBAAoB,CAAC,CAAC,CAAC;gBAC3D,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,EAAE;gBACrC,OAAO,CAAC,GAAG,CAAC,4CAA4C,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,MAAM,CAAC,CAAC;gBACtF,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,KAAK;QACT,8BAA8B;QAC9B,KAAK,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,gBAAgB,EAAE,CAAC;YAClD,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;YAC5B,OAAO,CAAC,OAAO,CAAC;gBACd,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,sBAAsB,EAAE;gBACxD,EAAE;aACH,CAAC,CAAC;QACL,CAAC;QACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;QAE9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,EAAE;oBACzB,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;oBAC3C,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,OAAO,EAAE,CAAC;YACZ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,IAAI,CAAC,OAAuB;QAChC,QAAQ,CAAC,mCAAmC,EAAE,OAAO,CAAC,CAAC;QAEvD,mDAAmD;QACnD,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YACvE,MAAM,OAAO,GAAG,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YACtD,IAAI,OAAO,EAAE,CAAC;gBACZ,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;gBAC5B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;gBACzC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC3B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,mDAAmD,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QACD,oDAAoD;IACtD,CAAC;IAEO,KAAK,CAAC,aAAa,CAAC,GAAoB,EAAE,GAAmB;QACnE,mBAAmB;QACnB,GAAG,CAAC,SAAS,CAAC,6BAA6B,EAAE,GAAG,CAAC,CAAC;QAClD,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,oBAAoB,CAAC,CAAC;QACpE,GAAG,CAAC,SAAS,CAAC,8BAA8B,EAAE,cAAc,CAAC,CAAC;QAE9D,0BAA0B;QAC1B,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC7B,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACV,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,IAAI,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;YAClD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7D,OAAO;QACT,CAAC;QAED,wBAAwB;QACxB,IAAI,GAAG,CAAC,GAAG,KAAK,MAAM,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAChD,MAAM,IAAI,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;IAClD,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAAC,GAAoB,EAAE,GAAmB;QACtE,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,oCAAoC,EAAE,OAAO,CAAC,CAAC;YAExD,yDAAyD;YACzD,IAAI,IAAI,IAAI,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC;gBAC3C,+BAA+B;gBAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACrD,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;YACpC,CAAC;iBAAM,CAAC;gBACN,sCAAsC;gBACtC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBACnB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBAC1B,CAAC;gBACD,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;gBACnB,GAAG,CAAC,GAAG,EAAE,CAAC;YACZ,CAAC;QACH,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,QAAQ,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,uBAAuB,CAAC,CAAC;YAC7E,CAAC;QACH,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAAC,OAAuB;QACnD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,gGAAgG;YAChG,IAAI,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC1E,OAAO,CAAC;oBACN,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE;iBAC/C,CAAC,CAAC;gBACrB,OAAO;YACT,CAAC;YAED,MAAM,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC;YAEtB,iBAAiB;YACjB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC5B,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;gBACjC,OAAO,CAAC;oBACN,OAAO,EAAE,KAAK;oBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE;oBACnD,EAAE;iBACe,CAAC,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YAEjB,6BAA6B;YAC7B,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAElD,sBAAsB;YACtB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACnB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,QAAQ,CAAC,GAAoB;QACzC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,IAAI,IAAI,GAAG,EAAE,CAAC;YAEd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAa,EAAE,EAAE;gBAC/B,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;gBAEhC,kDAAkD;gBAClD,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC;oBAC9B,GAAG,CAAC,kBAAkB,EAAE,CAAC;oBACzB,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACnC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,YAAY,CAAC,IAAY;QAC/B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,iBAAiB;IACT,QAAQ,CAAC,GAAmB,EAAE,UAAkB,EAAE,IAAS;QACjE,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;QAClE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAChC,CAAC;IAEO,SAAS,CAAC,GAAmB,EAAE,UAAkB,EAAE,IAAY,EAAE,OAAe,EAAE,KAAU,IAAI;QACtG,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,UAAU,EAAE;YAC7B,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE;YACxB,EAAE;SACH,CAAC,CAAC;IACL,CAAC;CACF;AAED,eAAe,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import type { MemoryService } from '../services/memory-service.js';
|
|
2
|
+
export interface ToolDefinition {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: {
|
|
6
|
+
type: 'object';
|
|
7
|
+
properties: Record<string, any>;
|
|
8
|
+
required?: string[];
|
|
9
|
+
};
|
|
10
|
+
}
|
|
11
|
+
export interface ToolContext {
|
|
12
|
+
memoryService: MemoryService;
|
|
13
|
+
config: Record<string, any>;
|
|
14
|
+
}
|
|
15
|
+
export interface ToolHandler {
|
|
16
|
+
(args: any, context: ToolContext): Promise<any>;
|
|
17
|
+
}
|
|
18
|
+
export interface CliParser {
|
|
19
|
+
(args: string[]): any;
|
|
20
|
+
}
|
|
21
|
+
export interface ToolCliMetadata {
|
|
22
|
+
positionalArgs?: {
|
|
23
|
+
name: string;
|
|
24
|
+
description: string;
|
|
25
|
+
required?: boolean;
|
|
26
|
+
}[];
|
|
27
|
+
options?: {
|
|
28
|
+
name: string;
|
|
29
|
+
description: string;
|
|
30
|
+
hasValue?: boolean;
|
|
31
|
+
example?: string;
|
|
32
|
+
}[];
|
|
33
|
+
examples?: string[];
|
|
34
|
+
}
|
|
35
|
+
export interface Tool {
|
|
36
|
+
definition: ToolDefinition;
|
|
37
|
+
handler: ToolHandler;
|
|
38
|
+
cliParser?: CliParser;
|
|
39
|
+
cliMetadata?: ToolCliMetadata;
|
|
40
|
+
}
|
|
41
|
+
export interface ExportFilters {
|
|
42
|
+
tags?: string[];
|
|
43
|
+
startDate?: Date;
|
|
44
|
+
endDate?: Date;
|
|
45
|
+
limit?: number;
|
|
46
|
+
}
|
|
47
|
+
export interface ImportOptions {
|
|
48
|
+
skipDuplicates?: boolean;
|
|
49
|
+
preserveTimestamps?: boolean;
|
|
50
|
+
preserveIds?: boolean;
|
|
51
|
+
}
|
|
52
|
+
export interface ImportResult {
|
|
53
|
+
imported: number;
|
|
54
|
+
skipped: number;
|
|
55
|
+
errors: Array<{
|
|
56
|
+
memory: any;
|
|
57
|
+
error: string;
|
|
58
|
+
}>;
|
|
59
|
+
}
|
|
60
|
+
export interface ExportFormat {
|
|
61
|
+
exportedAt: string;
|
|
62
|
+
exportVersion: string;
|
|
63
|
+
source?: string;
|
|
64
|
+
totalMemories: number;
|
|
65
|
+
memories: ExportedMemory[];
|
|
66
|
+
}
|
|
67
|
+
export interface ExportedMemory {
|
|
68
|
+
id: number;
|
|
69
|
+
content: string;
|
|
70
|
+
tags: string[];
|
|
71
|
+
createdAt: string;
|
|
72
|
+
hash: string;
|
|
73
|
+
relationships?: Array<{
|
|
74
|
+
relatedMemoryHash: string;
|
|
75
|
+
relatedMemoryId?: number;
|
|
76
|
+
relationshipType: string;
|
|
77
|
+
}>;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAEnE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,aAAa,EAAE,aAAa,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IAC1B,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,SAAS;IACxB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;CACvB;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,EAAE,CAAC;IACJ,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,EAAE,CAAC;IACJ,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAGD,MAAM,WAAW,IAAI;IACnB,UAAU,EAAE,cAAc,CAAC;IAC3B,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,eAAe,CAAC;CAC/B;AAGD,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,OAAO,CAAC,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,KAAK,CAAC;QAAE,MAAM,EAAE,GAAG,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,cAAc,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,KAAK,CAAC;QACpB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,EAAE,MAAM,CAAC;KAC1B,CAAC,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/types/tools.ts"],"names":[],"mappings":"AAAA,mCAAmC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic CLI argument parser utility
|
|
3
|
+
*/
|
|
4
|
+
export interface ParsedArgs {
|
|
5
|
+
[key: string]: string | boolean | number | undefined;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Parse command line arguments into structured format
|
|
9
|
+
* Handles flags (--flag) and key-value pairs (--key value)
|
|
10
|
+
*/
|
|
11
|
+
export declare function parseCommandLineArgs(args: string[]): ParsedArgs;
|
|
12
|
+
//# sourceMappingURL=cli-parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-parser.d.ts","sourceRoot":"","sources":["../../src/utils/cli-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,UAAU;IACvB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;CACxD;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAmC/D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic CLI argument parser utility
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Parse command line arguments into structured format
|
|
6
|
+
* Handles flags (--flag) and key-value pairs (--key value)
|
|
7
|
+
*/
|
|
8
|
+
export function parseCommandLineArgs(args) {
|
|
9
|
+
const parsed = {};
|
|
10
|
+
let i = 0; // Start from index 0 since args are already filtered
|
|
11
|
+
while (i < args.length) {
|
|
12
|
+
const arg = args[i];
|
|
13
|
+
if (arg.startsWith('--')) {
|
|
14
|
+
const flagName = arg.slice(2).replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
15
|
+
if (i + 1 < args.length && !args[i + 1].startsWith('--')) {
|
|
16
|
+
const value = args[i + 1];
|
|
17
|
+
// Handle boolean strings explicitly
|
|
18
|
+
const lowerValue = value.toLowerCase();
|
|
19
|
+
if (lowerValue === 'true') {
|
|
20
|
+
parsed[flagName] = true;
|
|
21
|
+
}
|
|
22
|
+
else if (lowerValue === 'false') {
|
|
23
|
+
parsed[flagName] = false;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
// Keep as string - let tool-specific parsers handle type conversion
|
|
27
|
+
parsed[flagName] = value;
|
|
28
|
+
}
|
|
29
|
+
i += 2;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Flag without value
|
|
33
|
+
parsed[flagName] = true;
|
|
34
|
+
i++;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
i++;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return parsed;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=cli-parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-parser.js","sourceRoot":"","sources":["../../src/utils/cli-parser.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAc;IAC/C,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,qDAAqD;IAEhE,OAAO,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEpB,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACvB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAExF,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACvD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE1B,oCAAoC;gBACpC,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;gBACvC,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;oBACxB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;gBAC5B,CAAC;qBAAM,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;oBAChC,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;gBAC7B,CAAC;qBAAM,CAAC;oBACJ,oEAAoE;oBACpE,MAAM,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;gBAC7B,CAAC;gBACD,CAAC,IAAI,CAAC,CAAC;YACX,CAAC;iBAAM,CAAC;gBACJ,qBAAqB;gBACrB,MAAM,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;gBACxB,CAAC,EAAE,CAAC;YACR,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,CAAC,EAAE,CAAC;QACR,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration utilities for simple-memory-mcp
|
|
3
|
+
* Provides sensible defaults with config file and environment variable overrides
|
|
4
|
+
*
|
|
5
|
+
* Resolution order (highest priority first):
|
|
6
|
+
* 1. Environment variables (per-client overrides)
|
|
7
|
+
* 2. ~/.simple-memory/config.json (user config file)
|
|
8
|
+
* 3. Sensible defaults
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Configuration schema for simple-memory
|
|
12
|
+
*/
|
|
13
|
+
export interface SimpleMemoryConfig {
|
|
14
|
+
/** Path to the database file */
|
|
15
|
+
database?: string;
|
|
16
|
+
/** Backup settings */
|
|
17
|
+
backup?: {
|
|
18
|
+
/** Path to backup directory */
|
|
19
|
+
path?: string;
|
|
20
|
+
/** Minutes between backups (0 = every write) */
|
|
21
|
+
interval?: number;
|
|
22
|
+
/** Number of backups to keep */
|
|
23
|
+
keep?: number;
|
|
24
|
+
/** Source identifier (e.g., "work", "personal") */
|
|
25
|
+
source?: string;
|
|
26
|
+
};
|
|
27
|
+
/** Cloud storage safe mode (uses DELETE journal instead of WAL) */
|
|
28
|
+
cloudSafe?: boolean;
|
|
29
|
+
/** Enable debug logging */
|
|
30
|
+
debug?: boolean;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Default directory for simple-memory data
|
|
34
|
+
* ~/.simple-memory/ on all platforms
|
|
35
|
+
*/
|
|
36
|
+
export declare function getDefaultDir(): string;
|
|
37
|
+
/**
|
|
38
|
+
* Get the path to the config file
|
|
39
|
+
*/
|
|
40
|
+
export declare function getConfigPath(): string;
|
|
41
|
+
/**
|
|
42
|
+
* Load configuration from ~/.simple-memory/config.json
|
|
43
|
+
* Returns empty object if file doesn't exist
|
|
44
|
+
*/
|
|
45
|
+
export declare function loadConfigFile(): SimpleMemoryConfig;
|
|
46
|
+
/**
|
|
47
|
+
* Clear the config cache (useful for testing or after config changes)
|
|
48
|
+
*/
|
|
49
|
+
export declare function clearConfigCache(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Get the full resolved configuration
|
|
52
|
+
* Merges: defaults < config.json < environment variables
|
|
53
|
+
*/
|
|
54
|
+
export declare function getConfig(): Required<SimpleMemoryConfig>;
|
|
55
|
+
/**
|
|
56
|
+
* Get the database path with sensible defaults.
|
|
57
|
+
*
|
|
58
|
+
* Resolution order:
|
|
59
|
+
* 1. MEMORY_DB environment variable (per-client override)
|
|
60
|
+
* 2. config.json database setting
|
|
61
|
+
* 3. ~/.simple-memory/memory.db (default)
|
|
62
|
+
*
|
|
63
|
+
* @returns Object with path and whether it's the default location
|
|
64
|
+
*/
|
|
65
|
+
export declare function getDatabasePath(): {
|
|
66
|
+
path: string;
|
|
67
|
+
isDefault: boolean;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Get backup configuration
|
|
71
|
+
*
|
|
72
|
+
* Resolution order:
|
|
73
|
+
* 1. Environment variables (per-client override)
|
|
74
|
+
* 2. config.json backup settings
|
|
75
|
+
* 3. Defaults (backups disabled)
|
|
76
|
+
*/
|
|
77
|
+
export declare function getBackupConfig(): {
|
|
78
|
+
path?: string;
|
|
79
|
+
interval: number;
|
|
80
|
+
keep: number;
|
|
81
|
+
source?: string;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Ensure the default config directory exists
|
|
85
|
+
*/
|
|
86
|
+
export declare function ensureConfigDir(): string;
|
|
87
|
+
/**
|
|
88
|
+
* Create a default config file with comments
|
|
89
|
+
* Only creates if it doesn't exist
|
|
90
|
+
*/
|
|
91
|
+
export declare function initConfigFile(): {
|
|
92
|
+
path: string;
|
|
93
|
+
created: boolean;
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,sBAAsB;IACtB,MAAM,CAAC,EAAE;QACP,+BAA+B;QAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,gDAAgD;QAChD,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,gCAAgC;QAChC,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,mDAAmD;QACnD,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IAEF,mEAAmE;IACnE,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAKD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI,kBAAkB,CAsBnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;GAGG;AACH,wBAAgB,SAAS,IAAI,QAAQ,CAAC,kBAAkB,CAAC,CAcxD;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,CAiBtE;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,IAAI;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CASpG;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAMxC;AAED;;;GAGG;AACH,wBAAgB,cAAc,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CA4CnE"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration utilities for simple-memory-mcp
|
|
3
|
+
* Provides sensible defaults with config file and environment variable overrides
|
|
4
|
+
*
|
|
5
|
+
* Resolution order (highest priority first):
|
|
6
|
+
* 1. Environment variables (per-client overrides)
|
|
7
|
+
* 2. ~/.simple-memory/config.json (user config file)
|
|
8
|
+
* 3. Sensible defaults
|
|
9
|
+
*/
|
|
10
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';
|
|
11
|
+
import { join } from 'path';
|
|
12
|
+
import { homedir } from 'os';
|
|
13
|
+
import { debugLog } from './debug.js';
|
|
14
|
+
// Cached config to avoid repeated file reads
|
|
15
|
+
let cachedConfig = null;
|
|
16
|
+
/**
|
|
17
|
+
* Default directory for simple-memory data
|
|
18
|
+
* ~/.simple-memory/ on all platforms
|
|
19
|
+
*/
|
|
20
|
+
export function getDefaultDir() {
|
|
21
|
+
return join(homedir(), '.simple-memory');
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the path to the config file
|
|
25
|
+
*/
|
|
26
|
+
export function getConfigPath() {
|
|
27
|
+
return join(getDefaultDir(), 'config.json');
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Load configuration from ~/.simple-memory/config.json
|
|
31
|
+
* Returns empty object if file doesn't exist
|
|
32
|
+
*/
|
|
33
|
+
export function loadConfigFile() {
|
|
34
|
+
if (cachedConfig !== null) {
|
|
35
|
+
return cachedConfig;
|
|
36
|
+
}
|
|
37
|
+
const configPath = getConfigPath();
|
|
38
|
+
if (!existsSync(configPath)) {
|
|
39
|
+
cachedConfig = {};
|
|
40
|
+
return cachedConfig;
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const content = readFileSync(configPath, 'utf-8');
|
|
44
|
+
cachedConfig = JSON.parse(content);
|
|
45
|
+
debugLog(`Loaded config from: ${configPath}`);
|
|
46
|
+
return cachedConfig;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
debugLog(`Warning: Could not read config file: ${error}`);
|
|
50
|
+
cachedConfig = {};
|
|
51
|
+
return cachedConfig;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Clear the config cache (useful for testing or after config changes)
|
|
56
|
+
*/
|
|
57
|
+
export function clearConfigCache() {
|
|
58
|
+
cachedConfig = null;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get the full resolved configuration
|
|
62
|
+
* Merges: defaults < config.json < environment variables
|
|
63
|
+
*/
|
|
64
|
+
export function getConfig() {
|
|
65
|
+
const fileConfig = loadConfigFile();
|
|
66
|
+
const defaultDir = getDefaultDir();
|
|
67
|
+
return {
|
|
68
|
+
database: process.env.MEMORY_DB || fileConfig.database || join(defaultDir, 'memory.db'),
|
|
69
|
+
backup: {
|
|
70
|
+
path: process.env.MEMORY_BACKUP_PATH || fileConfig.backup?.path || undefined,
|
|
71
|
+
interval: parseInt(process.env.MEMORY_BACKUP_INTERVAL || '', 10) || fileConfig.backup?.interval || 0,
|
|
72
|
+
keep: parseInt(process.env.MEMORY_BACKUP_KEEP || '', 10) || fileConfig.backup?.keep || 10,
|
|
73
|
+
},
|
|
74
|
+
cloudSafe: process.env.MEMORY_CLOUD_SAFE === 'true' || fileConfig.cloudSafe || false,
|
|
75
|
+
debug: process.env.MEMORY_DEBUG === 'true' || process.env.DEBUG === 'true' || fileConfig.debug || false,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Get the database path with sensible defaults.
|
|
80
|
+
*
|
|
81
|
+
* Resolution order:
|
|
82
|
+
* 1. MEMORY_DB environment variable (per-client override)
|
|
83
|
+
* 2. config.json database setting
|
|
84
|
+
* 3. ~/.simple-memory/memory.db (default)
|
|
85
|
+
*
|
|
86
|
+
* @returns Object with path and whether it's the default location
|
|
87
|
+
*/
|
|
88
|
+
export function getDatabasePath() {
|
|
89
|
+
// 1. Explicit env var (per-client override)
|
|
90
|
+
if (process.env.MEMORY_DB) {
|
|
91
|
+
return { path: process.env.MEMORY_DB, isDefault: false };
|
|
92
|
+
}
|
|
93
|
+
// 2. Config file
|
|
94
|
+
const fileConfig = loadConfigFile();
|
|
95
|
+
if (fileConfig.database) {
|
|
96
|
+
return { path: fileConfig.database, isDefault: false };
|
|
97
|
+
}
|
|
98
|
+
// 3. Sensible default - always the same predictable path
|
|
99
|
+
const defaultDir = getDefaultDir();
|
|
100
|
+
const defaultPath = join(defaultDir, 'memory.db');
|
|
101
|
+
return { path: defaultPath, isDefault: true };
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Get backup configuration
|
|
105
|
+
*
|
|
106
|
+
* Resolution order:
|
|
107
|
+
* 1. Environment variables (per-client override)
|
|
108
|
+
* 2. config.json backup settings
|
|
109
|
+
* 3. Defaults (backups disabled)
|
|
110
|
+
*/
|
|
111
|
+
export function getBackupConfig() {
|
|
112
|
+
const fileConfig = loadConfigFile();
|
|
113
|
+
return {
|
|
114
|
+
path: process.env.MEMORY_BACKUP_PATH || fileConfig.backup?.path,
|
|
115
|
+
interval: parseInt(process.env.MEMORY_BACKUP_INTERVAL || '', 10) || fileConfig.backup?.interval || 0,
|
|
116
|
+
keep: parseInt(process.env.MEMORY_BACKUP_KEEP || '', 10) || fileConfig.backup?.keep || 10,
|
|
117
|
+
source: process.env.MEMORY_BACKUP_SOURCE || fileConfig.backup?.source,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Ensure the default config directory exists
|
|
122
|
+
*/
|
|
123
|
+
export function ensureConfigDir() {
|
|
124
|
+
const dir = getDefaultDir();
|
|
125
|
+
if (!existsSync(dir)) {
|
|
126
|
+
mkdirSync(dir, { recursive: true });
|
|
127
|
+
}
|
|
128
|
+
return dir;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Create a default config file with comments
|
|
132
|
+
* Only creates if it doesn't exist
|
|
133
|
+
*/
|
|
134
|
+
export function initConfigFile() {
|
|
135
|
+
ensureConfigDir();
|
|
136
|
+
const configPath = getConfigPath();
|
|
137
|
+
if (existsSync(configPath)) {
|
|
138
|
+
return { path: configPath, created: false };
|
|
139
|
+
}
|
|
140
|
+
const defaultConfig = {
|
|
141
|
+
// Commented examples in the actual file
|
|
142
|
+
};
|
|
143
|
+
// Write a nicely formatted config with descriptive fields
|
|
144
|
+
const configContent = `{
|
|
145
|
+
"_comment": "Simple Memory MCP Configuration - settings apply to CLI, MCP clients, and all consumers",
|
|
146
|
+
"_docs": "https://github.com/chrisribe/simple-memory-mcp#configuration",
|
|
147
|
+
|
|
148
|
+
"_database_comment": "Database path (default: ~/.simple-memory/memory.db)",
|
|
149
|
+
"database": null,
|
|
150
|
+
|
|
151
|
+
"_backup_comment": "Backup settings: path=directory, interval=minutes between backups (0=every write), keep=number to retain, source=identifier",
|
|
152
|
+
"backup": {
|
|
153
|
+
"path": null,
|
|
154
|
+
"interval": 0,
|
|
155
|
+
"keep": 10,
|
|
156
|
+
"source": null
|
|
157
|
+
},
|
|
158
|
+
|
|
159
|
+
"_cloudSafe_comment": "Use DELETE journal instead of WAL for cloud storage (OneDrive/Dropbox) - slower but safer",
|
|
160
|
+
"cloudSafe": false,
|
|
161
|
+
|
|
162
|
+
"_debug_comment": "Enable debug logging",
|
|
163
|
+
"debug": false
|
|
164
|
+
}
|
|
165
|
+
`;
|
|
166
|
+
try {
|
|
167
|
+
writeFileSync(configPath, configContent, 'utf-8');
|
|
168
|
+
debugLog(`Created default config file: ${configPath}`);
|
|
169
|
+
return { path: configPath, created: true };
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
debugLog(`Warning: Could not create config file: ${error}`);
|
|
173
|
+
return { path: configPath, created: false };
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/utils/config.ts"],"names":[],"mappings":"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"}
|