engram-sdk 0.1.0
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/CONTRIBUTING.md +65 -0
- package/Dockerfile +21 -0
- package/EVAL-FRAMEWORK.md +70 -0
- package/EVAL.md +127 -0
- package/LICENSE +17 -0
- package/README.md +309 -0
- package/ROADMAP.md +113 -0
- package/deploy/fly.toml +26 -0
- package/dist/auto-ingest.d.ts +3 -0
- package/dist/auto-ingest.d.ts.map +1 -0
- package/dist/auto-ingest.js +334 -0
- package/dist/auto-ingest.js.map +1 -0
- package/dist/brief.d.ts +45 -0
- package/dist/brief.d.ts.map +1 -0
- package/dist/brief.js +183 -0
- package/dist/brief.js.map +1 -0
- package/dist/claude-watcher.d.ts +3 -0
- package/dist/claude-watcher.d.ts.map +1 -0
- package/dist/claude-watcher.js +385 -0
- package/dist/claude-watcher.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +764 -0
- package/dist/cli.js.map +1 -0
- package/dist/embeddings.d.ts +42 -0
- package/dist/embeddings.d.ts.map +1 -0
- package/dist/embeddings.js +145 -0
- package/dist/embeddings.js.map +1 -0
- package/dist/eval.d.ts +2 -0
- package/dist/eval.d.ts.map +1 -0
- package/dist/eval.js +281 -0
- package/dist/eval.js.map +1 -0
- package/dist/extract.d.ts +11 -0
- package/dist/extract.d.ts.map +1 -0
- package/dist/extract.js +139 -0
- package/dist/extract.js.map +1 -0
- package/dist/hosted.d.ts +3 -0
- package/dist/hosted.d.ts.map +1 -0
- package/dist/hosted.js +144 -0
- package/dist/hosted.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/ingest.d.ts +28 -0
- package/dist/ingest.d.ts.map +1 -0
- package/dist/ingest.js +192 -0
- package/dist/ingest.js.map +1 -0
- package/dist/mcp.d.ts +3 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +349 -0
- package/dist/mcp.js.map +1 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +515 -0
- package/dist/server.js.map +1 -0
- package/dist/store.d.ts +87 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +548 -0
- package/dist/store.js.map +1 -0
- package/dist/types.d.ts +204 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +77 -0
- package/dist/types.js.map +1 -0
- package/dist/vault.d.ts +116 -0
- package/dist/vault.d.ts.map +1 -0
- package/dist/vault.js +1234 -0
- package/dist/vault.js.map +1 -0
- package/package.json +61 -0
package/dist/mcp.js
ADDED
|
@@ -0,0 +1,349 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// ============================================================
|
|
3
|
+
// Engram MCP Server — Memory tools for any MCP-compatible agent
|
|
4
|
+
// ============================================================
|
|
5
|
+
//
|
|
6
|
+
// Works with: Claude Code, Cursor, Windsurf, Cline, etc.
|
|
7
|
+
//
|
|
8
|
+
// Setup (Claude Code):
|
|
9
|
+
// Add to ~/.claude/claude_desktop_config.json:
|
|
10
|
+
// {
|
|
11
|
+
// "mcpServers": {
|
|
12
|
+
// "engram": {
|
|
13
|
+
// "command": "npx",
|
|
14
|
+
// "args": ["engram", "mcp"],
|
|
15
|
+
// "env": {
|
|
16
|
+
// "ENGRAM_OWNER": "my-agent",
|
|
17
|
+
// "GEMINI_API_KEY": "your-key-here"
|
|
18
|
+
// }
|
|
19
|
+
// }
|
|
20
|
+
// }
|
|
21
|
+
// }
|
|
22
|
+
//
|
|
23
|
+
// Or run standalone:
|
|
24
|
+
// ENGRAM_OWNER=my-agent npx tsx src/mcp.ts
|
|
25
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
26
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
27
|
+
import { z } from 'zod';
|
|
28
|
+
import { Vault } from './vault.js';
|
|
29
|
+
import { GeminiEmbeddings, OpenAIEmbeddings } from './embeddings.js';
|
|
30
|
+
import path from 'path';
|
|
31
|
+
import { homedir } from 'os';
|
|
32
|
+
import { readFileSync, writeFileSync, existsSync } from 'fs';
|
|
33
|
+
// ============================================================
|
|
34
|
+
// Config from environment
|
|
35
|
+
// ============================================================
|
|
36
|
+
const owner = process.env.ENGRAM_OWNER ?? 'default';
|
|
37
|
+
const engramDir = path.join(homedir(), '.engram');
|
|
38
|
+
const dbPath = process.env.ENGRAM_DB_PATH ?? path.join(engramDir, `${owner}.db`);
|
|
39
|
+
const geminiKey = process.env.GEMINI_API_KEY;
|
|
40
|
+
const openaiKey = process.env.OPENAI_API_KEY;
|
|
41
|
+
const anthropicKey = process.env.ANTHROPIC_API_KEY;
|
|
42
|
+
// Determine LLM provider
|
|
43
|
+
const llmProvider = process.env.ENGRAM_LLM_PROVIDER ??
|
|
44
|
+
(geminiKey ? 'gemini' : openaiKey ? 'openai' : anthropicKey ? 'anthropic' : undefined);
|
|
45
|
+
const llmKey = geminiKey ?? openaiKey ?? anthropicKey;
|
|
46
|
+
// ============================================================
|
|
47
|
+
// Initialize Vault
|
|
48
|
+
// ============================================================
|
|
49
|
+
const vaultConfig = {
|
|
50
|
+
owner,
|
|
51
|
+
dbPath,
|
|
52
|
+
...(llmProvider && llmKey ? {
|
|
53
|
+
llm: {
|
|
54
|
+
provider: llmProvider,
|
|
55
|
+
apiKey: llmKey,
|
|
56
|
+
},
|
|
57
|
+
} : {}),
|
|
58
|
+
};
|
|
59
|
+
let embedder;
|
|
60
|
+
if (geminiKey) {
|
|
61
|
+
embedder = new GeminiEmbeddings(geminiKey);
|
|
62
|
+
}
|
|
63
|
+
else if (openaiKey) {
|
|
64
|
+
embedder = new OpenAIEmbeddings(openaiKey);
|
|
65
|
+
}
|
|
66
|
+
const vault = new Vault(vaultConfig, embedder);
|
|
67
|
+
// ============================================================
|
|
68
|
+
// Auto-ingest state
|
|
69
|
+
// ============================================================
|
|
70
|
+
const INGEST_STATE_PATH = path.join(homedir(), '.config', 'engram', 'ingest-state.json');
|
|
71
|
+
function loadIngestState() {
|
|
72
|
+
if (existsSync(INGEST_STATE_PATH)) {
|
|
73
|
+
return JSON.parse(readFileSync(INGEST_STATE_PATH, 'utf-8'));
|
|
74
|
+
}
|
|
75
|
+
return { lastIngestedLine: {}, lastRunAt: new Date(0).toISOString(), totalMemoriesCreated: 0, totalRunCount: 0 };
|
|
76
|
+
}
|
|
77
|
+
function saveIngestState(state) {
|
|
78
|
+
const dir = path.dirname(INGEST_STATE_PATH);
|
|
79
|
+
if (!existsSync(dir)) {
|
|
80
|
+
const { mkdirSync } = require('fs');
|
|
81
|
+
mkdirSync(dir, { recursive: true });
|
|
82
|
+
}
|
|
83
|
+
writeFileSync(INGEST_STATE_PATH, JSON.stringify(state, null, 2));
|
|
84
|
+
}
|
|
85
|
+
// ============================================================
|
|
86
|
+
// Create MCP Server
|
|
87
|
+
// ============================================================
|
|
88
|
+
const server = new McpServer({
|
|
89
|
+
name: 'engram',
|
|
90
|
+
version: '0.1.0',
|
|
91
|
+
});
|
|
92
|
+
// ============================================================
|
|
93
|
+
// Tool: remember
|
|
94
|
+
// ============================================================
|
|
95
|
+
server.tool('engram_remember', 'Store a memory in the Engram vault. Auto-extracts entities and topics if not provided.', {
|
|
96
|
+
content: z.string().describe('The memory content — a clear statement worth remembering'),
|
|
97
|
+
type: z.enum(['episodic', 'semantic', 'procedural']).optional().describe('Memory type: episodic (events), semantic (facts), procedural (how-to)'),
|
|
98
|
+
entities: z.array(z.string()).optional().describe('People, projects, tools, places mentioned'),
|
|
99
|
+
topics: z.array(z.string()).optional().describe('Topic tags'),
|
|
100
|
+
salience: z.number().min(0).max(1).optional().describe('Importance 0-1 (default 0.5)'),
|
|
101
|
+
status: z.enum(['active', 'pending', 'fulfilled', 'superseded', 'archived']).optional().describe('Memory lifecycle status'),
|
|
102
|
+
}, async (args) => {
|
|
103
|
+
const memory = vault.remember({
|
|
104
|
+
content: args.content,
|
|
105
|
+
type: args.type,
|
|
106
|
+
entities: args.entities,
|
|
107
|
+
topics: args.topics,
|
|
108
|
+
salience: args.salience,
|
|
109
|
+
status: args.status,
|
|
110
|
+
});
|
|
111
|
+
// Compute embedding async
|
|
112
|
+
if (embedder) {
|
|
113
|
+
vault.computeAndStoreEmbedding(memory.id, memory.content).catch(() => { });
|
|
114
|
+
}
|
|
115
|
+
return {
|
|
116
|
+
content: [{
|
|
117
|
+
type: 'text',
|
|
118
|
+
text: JSON.stringify({
|
|
119
|
+
stored: true,
|
|
120
|
+
id: memory.id,
|
|
121
|
+
entities: memory.entities,
|
|
122
|
+
topics: memory.topics,
|
|
123
|
+
salience: memory.salience,
|
|
124
|
+
status: memory.status,
|
|
125
|
+
}, null, 2),
|
|
126
|
+
}],
|
|
127
|
+
};
|
|
128
|
+
});
|
|
129
|
+
// ============================================================
|
|
130
|
+
// Tool: recall
|
|
131
|
+
// ============================================================
|
|
132
|
+
server.tool('engram_recall', 'Recall relevant memories from the Engram vault. Uses semantic search when embeddings are available.', {
|
|
133
|
+
context: z.string().describe('What you want to remember — a question or topic'),
|
|
134
|
+
entities: z.array(z.string()).optional().describe('Filter by specific entities'),
|
|
135
|
+
topics: z.array(z.string()).optional().describe('Filter by topics'),
|
|
136
|
+
limit: z.number().int().min(1).max(50).optional().describe('Max results (default 10)'),
|
|
137
|
+
}, async (args) => {
|
|
138
|
+
const memories = await vault.recall({
|
|
139
|
+
context: args.context,
|
|
140
|
+
entities: args.entities,
|
|
141
|
+
topics: args.topics,
|
|
142
|
+
limit: args.limit ?? 10,
|
|
143
|
+
});
|
|
144
|
+
if (memories.length === 0) {
|
|
145
|
+
return { content: [{ type: 'text', text: 'No relevant memories found.' }] };
|
|
146
|
+
}
|
|
147
|
+
const formatted = memories.map((m, i) => `[${i + 1}] (${m.type}, salience=${m.salience.toFixed(2)}, status=${m.status})\n${m.content}\nEntities: ${m.entities.join(', ') || 'none'} | Topics: ${m.topics.join(', ') || 'none'}`).join('\n\n');
|
|
148
|
+
return {
|
|
149
|
+
content: [{
|
|
150
|
+
type: 'text',
|
|
151
|
+
text: `Found ${memories.length} memories:\n\n${formatted}`,
|
|
152
|
+
}],
|
|
153
|
+
};
|
|
154
|
+
});
|
|
155
|
+
// ============================================================
|
|
156
|
+
// Tool: forget
|
|
157
|
+
// ============================================================
|
|
158
|
+
server.tool('engram_forget', 'Forget a memory. Soft forget reduces salience to 0; hard forget permanently deletes.', {
|
|
159
|
+
id: z.string().describe('Memory ID to forget'),
|
|
160
|
+
hard: z.boolean().optional().describe('Permanently delete (default: soft forget)'),
|
|
161
|
+
}, async (args) => {
|
|
162
|
+
vault.forget(args.id, args.hard ?? false);
|
|
163
|
+
return {
|
|
164
|
+
content: [{ type: 'text', text: `Memory ${args.id} ${args.hard ? 'permanently deleted' : 'soft forgotten (salience → 0)'}.` }],
|
|
165
|
+
};
|
|
166
|
+
});
|
|
167
|
+
// ============================================================
|
|
168
|
+
// Tool: consolidate
|
|
169
|
+
// ============================================================
|
|
170
|
+
server.tool('engram_consolidate', 'Run the consolidation engine — distills recent episodes into semantic knowledge, discovers entities, finds contradictions, forms connections.', {}, async () => {
|
|
171
|
+
const report = await vault.consolidate();
|
|
172
|
+
return {
|
|
173
|
+
content: [{
|
|
174
|
+
type: 'text',
|
|
175
|
+
text: JSON.stringify(report, null, 2),
|
|
176
|
+
}],
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
// ============================================================
|
|
180
|
+
// Tool: connect
|
|
181
|
+
// ============================================================
|
|
182
|
+
server.tool('engram_connect', 'Create a relationship between two memories in the knowledge graph.', {
|
|
183
|
+
sourceId: z.string().describe('Source memory ID'),
|
|
184
|
+
targetId: z.string().describe('Target memory ID'),
|
|
185
|
+
type: z.enum([
|
|
186
|
+
'supports', 'contradicts', 'elaborates', 'supersedes',
|
|
187
|
+
'causes', 'caused_by', 'part_of', 'instance_of',
|
|
188
|
+
'associated_with', 'temporal_next', 'derived_from',
|
|
189
|
+
]).describe('Relationship type'),
|
|
190
|
+
strength: z.number().min(0).max(1).optional().describe('Connection strength 0-1'),
|
|
191
|
+
}, async (args) => {
|
|
192
|
+
const edge = vault.connect(args.sourceId, args.targetId, args.type, args.strength);
|
|
193
|
+
return {
|
|
194
|
+
content: [{ type: 'text', text: `Connected: ${args.sourceId} —[${args.type}]→ ${args.targetId} (strength: ${edge.strength})` }],
|
|
195
|
+
};
|
|
196
|
+
});
|
|
197
|
+
// ============================================================
|
|
198
|
+
// Tool: stats
|
|
199
|
+
// ============================================================
|
|
200
|
+
server.tool('engram_stats', 'Get vault statistics — memory counts by type, entity count, etc.', {}, async () => {
|
|
201
|
+
const stats = vault.stats();
|
|
202
|
+
const entities = vault.entities();
|
|
203
|
+
return {
|
|
204
|
+
content: [{
|
|
205
|
+
type: 'text',
|
|
206
|
+
text: JSON.stringify({
|
|
207
|
+
...stats,
|
|
208
|
+
topEntities: entities.slice(0, 10).map(e => ({ name: e.name, memories: e.memoryCount })),
|
|
209
|
+
}, null, 2),
|
|
210
|
+
}],
|
|
211
|
+
};
|
|
212
|
+
});
|
|
213
|
+
// ============================================================
|
|
214
|
+
// Tool: ingest
|
|
215
|
+
// ============================================================
|
|
216
|
+
server.tool('engram_ingest', 'Auto-ingest a conversation transcript or raw text. Extracts structured memories using LLM.', {
|
|
217
|
+
text: z.string().describe('Raw conversation text or transcript to ingest'),
|
|
218
|
+
humanName: z.string().optional().describe('Name of the human in the conversation'),
|
|
219
|
+
}, async (args) => {
|
|
220
|
+
if (!geminiKey) {
|
|
221
|
+
// Simple mode: just remember with auto-extraction
|
|
222
|
+
const memory = vault.remember({ content: args.text });
|
|
223
|
+
return { content: [{ type: 'text', text: `Stored 1 memory (simple mode — set GEMINI_API_KEY for LLM extraction).` }] };
|
|
224
|
+
}
|
|
225
|
+
// LLM extraction
|
|
226
|
+
const prompt = `You are a memory extraction engine. Analyze this text and extract structured memories.
|
|
227
|
+
|
|
228
|
+
TEXT:
|
|
229
|
+
${args.text.slice(0, 4000)}
|
|
230
|
+
|
|
231
|
+
Extract memories worth keeping long-term. For each:
|
|
232
|
+
- content: Clear standalone statement
|
|
233
|
+
- type: "episodic", "semantic", or "procedural"
|
|
234
|
+
- entities: People, projects, tools mentioned
|
|
235
|
+
- topics: Topic tags
|
|
236
|
+
- salience: 0.0-1.0
|
|
237
|
+
- status: "active" or "pending" (for commitments)
|
|
238
|
+
|
|
239
|
+
Be selective. Skip trivial content.
|
|
240
|
+
|
|
241
|
+
JSON: {"memories": [{"content":"...","type":"...","entities":["..."],"topics":["..."],"salience":0.5,"status":"active"}]}
|
|
242
|
+
If nothing worth remembering: {"memories": []}`;
|
|
243
|
+
try {
|
|
244
|
+
const response = await fetch(`https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent?key=${geminiKey}`, {
|
|
245
|
+
method: 'POST',
|
|
246
|
+
headers: { 'Content-Type': 'application/json' },
|
|
247
|
+
body: JSON.stringify({
|
|
248
|
+
contents: [{ parts: [{ text: prompt }] }],
|
|
249
|
+
generationConfig: { responseMimeType: 'application/json', maxOutputTokens: 2048 },
|
|
250
|
+
}),
|
|
251
|
+
});
|
|
252
|
+
if (!response.ok) {
|
|
253
|
+
const memory = vault.remember({ content: args.text });
|
|
254
|
+
return { content: [{ type: 'text', text: `LLM unavailable, stored 1 raw memory as fallback.` }] };
|
|
255
|
+
}
|
|
256
|
+
const data = await response.json();
|
|
257
|
+
const text = data.candidates?.[0]?.content?.parts?.[0]?.text ?? '{}';
|
|
258
|
+
const parsed = JSON.parse(text);
|
|
259
|
+
let created = 0;
|
|
260
|
+
for (const mem of parsed.memories ?? []) {
|
|
261
|
+
if (mem.salience < 0.2)
|
|
262
|
+
continue;
|
|
263
|
+
// Security filter
|
|
264
|
+
if (/(?:sk-|api[_-]?key|password|token|secret)[:\s=]+\S{10,}/i.test(mem.content))
|
|
265
|
+
continue;
|
|
266
|
+
if (/AIza[a-zA-Z0-9_-]{30,}/.test(mem.content))
|
|
267
|
+
continue;
|
|
268
|
+
vault.remember({
|
|
269
|
+
content: mem.content,
|
|
270
|
+
type: mem.type ?? 'episodic',
|
|
271
|
+
entities: mem.entities ?? [],
|
|
272
|
+
topics: [...(mem.topics ?? []), 'auto-ingested'],
|
|
273
|
+
salience: mem.salience ?? 0.5,
|
|
274
|
+
status: mem.status ?? 'active',
|
|
275
|
+
});
|
|
276
|
+
created++;
|
|
277
|
+
}
|
|
278
|
+
return { content: [{ type: 'text', text: `Extracted ${created} memories from text.` }] };
|
|
279
|
+
}
|
|
280
|
+
catch (err) {
|
|
281
|
+
const memory = vault.remember({ content: args.text });
|
|
282
|
+
return { content: [{ type: 'text', text: `LLM error, stored 1 raw memory as fallback.` }] };
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
// ============================================================
|
|
286
|
+
// Tool: surface
|
|
287
|
+
// ============================================================
|
|
288
|
+
server.tool('engram_surface', 'Proactive memory surfacing — send current context and get back memories you SHOULD know about right now. Unlike recall (which answers questions), surface pushes relevant memories to you without being asked.', {
|
|
289
|
+
context: z.string().describe('What is happening right now — current conversation, task, or situation'),
|
|
290
|
+
activeEntities: z.array(z.string()).optional().describe('People, projects, tools currently active in conversation'),
|
|
291
|
+
activeTopics: z.array(z.string()).optional().describe('Topics currently being discussed'),
|
|
292
|
+
seen: z.array(z.string()).optional().describe('Memory IDs already seen this session (to avoid repeats)'),
|
|
293
|
+
}, async (args) => {
|
|
294
|
+
const results = await vault.surface({
|
|
295
|
+
context: args.context,
|
|
296
|
+
activeEntities: args.activeEntities,
|
|
297
|
+
activeTopics: args.activeTopics,
|
|
298
|
+
seen: args.seen,
|
|
299
|
+
});
|
|
300
|
+
if (results.length === 0) {
|
|
301
|
+
return { content: [{ type: 'text', text: 'No proactive memories to surface right now.' }] };
|
|
302
|
+
}
|
|
303
|
+
const formatted = results.map((r, i) => `[${i + 1}] (relevance: ${r.relevance.toFixed(2)}) ${r.memory.content}\n Why: ${r.reason}\n Path: ${r.activationPath}`).join('\n\n');
|
|
304
|
+
return {
|
|
305
|
+
content: [{
|
|
306
|
+
type: 'text',
|
|
307
|
+
text: `💡 ${results.length} memories surfaced:\n\n${formatted}`,
|
|
308
|
+
}],
|
|
309
|
+
};
|
|
310
|
+
});
|
|
311
|
+
// ============================================================
|
|
312
|
+
// Tool: briefing
|
|
313
|
+
// ============================================================
|
|
314
|
+
server.tool('engram_briefing', 'Get a structured session briefing — key facts, pending commitments, recent activity, and contradictions. Use at session start instead of reading flat memory files.', {
|
|
315
|
+
context: z.string().optional().describe('Optional context to focus the briefing on'),
|
|
316
|
+
}, async (args) => {
|
|
317
|
+
const briefing = await vault.briefing(args.context ?? '');
|
|
318
|
+
return {
|
|
319
|
+
content: [{
|
|
320
|
+
type: 'text',
|
|
321
|
+
text: JSON.stringify(briefing, null, 2),
|
|
322
|
+
}],
|
|
323
|
+
};
|
|
324
|
+
});
|
|
325
|
+
// ============================================================
|
|
326
|
+
// Tool: entities
|
|
327
|
+
// ============================================================
|
|
328
|
+
server.tool('engram_entities', 'List all tracked entities (people, projects, concepts) with memory counts.', {}, async () => {
|
|
329
|
+
const entities = vault.entities();
|
|
330
|
+
if (entities.length === 0) {
|
|
331
|
+
return { content: [{ type: 'text', text: 'No entities tracked yet.' }] };
|
|
332
|
+
}
|
|
333
|
+
const formatted = entities.map(e => `${e.name} (${e.type}, ${e.memoryCount} memories, importance: ${e.importance.toFixed(2)})`).join('\n');
|
|
334
|
+
return { content: [{ type: 'text', text: `${entities.length} entities:\n${formatted}` }] };
|
|
335
|
+
});
|
|
336
|
+
// ============================================================
|
|
337
|
+
// Start server
|
|
338
|
+
// ============================================================
|
|
339
|
+
async function main() {
|
|
340
|
+
const transport = new StdioServerTransport();
|
|
341
|
+
await server.connect(transport);
|
|
342
|
+
console.error(`🧠 Engram MCP server running (owner: ${owner}, db: ${dbPath})`);
|
|
343
|
+
if (embedder)
|
|
344
|
+
console.error(` Embeddings: ${geminiKey ? 'Gemini' : 'OpenAI'}`);
|
|
345
|
+
if (llmProvider)
|
|
346
|
+
console.error(` LLM: ${llmProvider} (consolidation enabled)`);
|
|
347
|
+
}
|
|
348
|
+
main().catch(console.error);
|
|
349
|
+
//# sourceMappingURL=mcp.js.map
|
package/dist/mcp.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import type { VaultConfig } from './types.js';
|
|
3
|
+
interface ServerConfig {
|
|
4
|
+
port?: number;
|
|
5
|
+
host?: string;
|
|
6
|
+
/** Map of API key → vault config. Each key gets its own vault. */
|
|
7
|
+
vaults: Record<string, VaultConfig>;
|
|
8
|
+
/** Default vault config for single-tenant mode */
|
|
9
|
+
defaultVault?: VaultConfig;
|
|
10
|
+
}
|
|
11
|
+
export declare function createEngramServer(config: ServerConfig): {
|
|
12
|
+
listen: () => Promise<void>;
|
|
13
|
+
close: () => Promise<void>;
|
|
14
|
+
server: import("http").Server<typeof import("http").IncomingMessage, typeof import("http").ServerResponse>;
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAIA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAO9C,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACpC,kDAAkD;IAClD,YAAY,CAAC,EAAE,WAAW,CAAC;CAC5B;AAkaD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,YAAY;;;;EAwGtD"}
|