@aman_asmuei/amem 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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { AmemDatabase } from "./database.js";
2
+ export declare const MemoryType: {
3
+ readonly CORRECTION: "correction";
4
+ readonly DECISION: "decision";
5
+ readonly PATTERN: "pattern";
6
+ readonly PREFERENCE: "preference";
7
+ readonly TOPOLOGY: "topology";
8
+ readonly FACT: "fact";
9
+ };
10
+ export type MemoryTypeValue = (typeof MemoryType)[keyof typeof MemoryType];
11
+ export declare const IMPORTANCE_WEIGHTS: Record<MemoryTypeValue, number>;
12
+ export interface Memory {
13
+ id: string;
14
+ content: string;
15
+ type: MemoryTypeValue;
16
+ tags: string[];
17
+ confidence: number;
18
+ accessCount: number;
19
+ createdAt: number;
20
+ lastAccessed: number;
21
+ source: string;
22
+ embedding: Float32Array | null;
23
+ }
24
+ export interface ScoreInput {
25
+ relevance: number;
26
+ confidence: number;
27
+ lastAccessed: number;
28
+ importance: number;
29
+ now: number;
30
+ }
31
+ export declare function computeScore(input: ScoreInput): number;
32
+ export interface ConflictResult {
33
+ isConflict: boolean;
34
+ similarity: number;
35
+ }
36
+ export declare function detectConflict(newContent: string, existingContent: string, similarity: number): ConflictResult;
37
+ export interface RecallOptions {
38
+ query: string | null;
39
+ queryEmbedding?: Float32Array | null;
40
+ limit: number;
41
+ type?: MemoryTypeValue;
42
+ tag?: string;
43
+ minConfidence?: number;
44
+ }
45
+ export interface RecalledMemory extends Memory {
46
+ score: number;
47
+ }
48
+ export declare function recallMemories(db: AmemDatabase, options: RecallOptions): RecalledMemory[];
package/dist/memory.js ADDED
@@ -0,0 +1,77 @@
1
+ import { cosineSimilarity } from "./embeddings.js";
2
+ export const MemoryType = {
3
+ CORRECTION: "correction",
4
+ DECISION: "decision",
5
+ PATTERN: "pattern",
6
+ PREFERENCE: "preference",
7
+ TOPOLOGY: "topology",
8
+ FACT: "fact",
9
+ };
10
+ export const IMPORTANCE_WEIGHTS = {
11
+ correction: 1.0,
12
+ decision: 0.85,
13
+ pattern: 0.7,
14
+ preference: 0.7,
15
+ topology: 0.5,
16
+ fact: 0.4,
17
+ };
18
+ export function computeScore(input) {
19
+ const hoursSinceAccess = (input.now - input.lastAccessed) / (1000 * 60 * 60);
20
+ const recency = Math.pow(0.995, Math.max(0, hoursSinceAccess));
21
+ return input.relevance * recency * input.confidence * input.importance;
22
+ }
23
+ export function detectConflict(newContent, existingContent, similarity) {
24
+ if (newContent === existingContent) {
25
+ return { isConflict: false, similarity };
26
+ }
27
+ return {
28
+ isConflict: similarity > 0.85,
29
+ similarity,
30
+ };
31
+ }
32
+ export function recallMemories(db, options) {
33
+ const { query, queryEmbedding, limit, type, tag, minConfidence } = options;
34
+ const now = Date.now();
35
+ let candidates;
36
+ if (type) {
37
+ candidates = db.searchByType(type);
38
+ }
39
+ else if (tag) {
40
+ candidates = db.searchByTag(tag);
41
+ }
42
+ else {
43
+ candidates = db.getAll();
44
+ }
45
+ if (minConfidence) {
46
+ candidates = candidates.filter((m) => m.confidence >= minConfidence);
47
+ }
48
+ // When query exists but no embeddings, filter to keyword matches only
49
+ if (query && !queryEmbedding) {
50
+ const q = query.toLowerCase();
51
+ const keywordMatches = candidates.filter((m) => m.content.toLowerCase().includes(q) || m.tags.some((t) => t.toLowerCase().includes(q)));
52
+ if (keywordMatches.length > 0) {
53
+ candidates = keywordMatches;
54
+ }
55
+ // If no keyword matches, keep all candidates (broad fallback)
56
+ }
57
+ const scored = candidates.map((memory) => {
58
+ let relevance = 0.5;
59
+ if (queryEmbedding && memory.embedding) {
60
+ relevance = Math.max(0, cosineSimilarity(queryEmbedding, memory.embedding));
61
+ }
62
+ else if (query && memory.content.toLowerCase().includes(query.toLowerCase())) {
63
+ relevance = 0.75;
64
+ }
65
+ const score = computeScore({
66
+ relevance,
67
+ confidence: memory.confidence,
68
+ lastAccessed: memory.lastAccessed,
69
+ importance: IMPORTANCE_WEIGHTS[memory.type] ?? 0.4,
70
+ now,
71
+ });
72
+ return { ...memory, score };
73
+ });
74
+ scored.sort((a, b) => b.score - a.score);
75
+ return scored.slice(0, limit);
76
+ }
77
+ //# sourceMappingURL=memory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory.js","sourceRoot":"","sources":["../src/memory.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import type { AmemDatabase } from "./database.js";
3
+ export declare function registerTools(server: McpServer, db: AmemDatabase): void;
package/dist/tools.js ADDED
@@ -0,0 +1,373 @@
1
+ import { z } from "zod";
2
+ import { MemoryType, recallMemories, detectConflict } from "./memory.js";
3
+ import { generateEmbedding, cosineSimilarity } from "./embeddings.js";
4
+ const MEMORY_TYPES = Object.values(MemoryType);
5
+ export function registerTools(server, db) {
6
+ // ── memory_store ──────────────────────────────────────────
7
+ server.registerTool("memory_store", {
8
+ title: "Store Memory",
9
+ description: "Store a developer memory. Types: correction (highest priority), decision (architectural choice + rationale), pattern (coding style/habit), preference (tool/style preference), topology (where things are in the codebase), fact (general knowledge). Always include tags for better recall.",
10
+ inputSchema: z.object({
11
+ content: z.string().describe("The memory content — be specific and include context"),
12
+ type: z.enum(MEMORY_TYPES).describe("Memory type — corrections are highest priority"),
13
+ tags: z.array(z.string()).default([]).describe("Tags for filtering (e.g., ['typescript', 'auth', 'testing'])"),
14
+ confidence: z.number().min(0).max(1).default(0.8).describe("How confident is this memory (0-1). Corrections from user = 1.0"),
15
+ source: z.string().default("conversation").describe("Where this memory came from"),
16
+ }),
17
+ }, async ({ content, type, tags, confidence, source }) => {
18
+ const embedding = await generateEmbedding(content);
19
+ let conflictWarning = "";
20
+ if (embedding) {
21
+ const existing = db.getAllWithEmbeddings();
22
+ for (const mem of existing) {
23
+ if (!mem.embedding)
24
+ continue;
25
+ const sim = cosineSimilarity(embedding, mem.embedding);
26
+ const conflict = detectConflict(content, mem.content, sim);
27
+ if (conflict.isConflict) {
28
+ db.updateConfidence(mem.id, Math.max(mem.confidence, confidence));
29
+ return {
30
+ content: [{
31
+ type: "text",
32
+ text: `Memory conflict detected. Similar memory exists (${(sim * 100).toFixed(0)}% match): "${mem.content}" — updated its confidence instead of creating duplicate.\n\nIf these are genuinely different memories, rephrase to be more distinct.`,
33
+ }],
34
+ };
35
+ }
36
+ if (sim > 0.8) {
37
+ db.updateConfidence(mem.id, Math.min(1.0, mem.confidence + 0.1));
38
+ }
39
+ }
40
+ }
41
+ const id = db.insertMemory({
42
+ content,
43
+ type: type,
44
+ tags,
45
+ confidence,
46
+ source,
47
+ embedding,
48
+ });
49
+ // Memory evolution: find related memories and enrich them
50
+ let evolved = 0;
51
+ if (embedding) {
52
+ const related = db.getAllWithEmbeddings().filter(m => m.id !== id);
53
+ for (const mem of related) {
54
+ if (!mem.embedding)
55
+ continue;
56
+ const sim = cosineSimilarity(embedding, mem.embedding);
57
+ // Related but not duplicate (0.6-0.8 similarity range)
58
+ if (sim > 0.6 && sim <= 0.8) {
59
+ // Reinforce related memory — it's still relevant
60
+ db.touchAccess(mem.id);
61
+ evolved++;
62
+ }
63
+ }
64
+ }
65
+ const stats = db.getStats();
66
+ const evolvedNote = evolved > 0 ? ` Reinforced ${evolved} related memories.` : "";
67
+ return {
68
+ content: [{
69
+ type: "text",
70
+ text: `Stored ${type} memory (${id.slice(0, 8)}). Confidence: ${confidence}. Tags: [${tags.join(", ")}]. Total memories: ${stats.total}.${evolvedNote}`,
71
+ }],
72
+ };
73
+ });
74
+ // ── memory_recall ─────────────────────────────────────────
75
+ server.registerTool("memory_recall", {
76
+ title: "Recall Memories",
77
+ description: "Search memories semantically. Returns the most relevant memories ranked by relevance, recency, confidence, and importance. Use this when you need to remember something about the user, project, or past decisions.",
78
+ inputSchema: z.object({
79
+ query: z.string().describe("What to search for — natural language works best"),
80
+ limit: z.number().min(1).max(50).default(10).describe("Max results to return"),
81
+ type: z.enum(MEMORY_TYPES).optional().describe("Filter by memory type"),
82
+ tag: z.string().optional().describe("Filter by tag"),
83
+ min_confidence: z.number().min(0).max(1).optional().describe("Minimum confidence threshold"),
84
+ }),
85
+ }, async ({ query, limit, type, tag, min_confidence }) => {
86
+ const queryEmbedding = await generateEmbedding(query);
87
+ const results = recallMemories(db, {
88
+ query,
89
+ queryEmbedding,
90
+ limit,
91
+ type: type,
92
+ tag,
93
+ minConfidence: min_confidence,
94
+ });
95
+ for (const r of results) {
96
+ db.touchAccess(r.id);
97
+ }
98
+ if (results.length === 0) {
99
+ return {
100
+ content: [{ type: "text", text: `No memories found for: "${query}"` }],
101
+ };
102
+ }
103
+ const lines = results.map((r, i) => {
104
+ const age = formatAge(r.createdAt);
105
+ const conf = (r.confidence * 100).toFixed(0);
106
+ return `${i + 1}. [${r.type}] ${r.content}\n Score: ${r.score.toFixed(3)} | Confidence: ${conf}% | Age: ${age} | Tags: [${r.tags.join(", ")}]`;
107
+ });
108
+ return {
109
+ content: [{
110
+ type: "text",
111
+ text: `Found ${results.length} memories for "${query}":\n\n${lines.join("\n\n")}`,
112
+ }],
113
+ };
114
+ });
115
+ // ── memory_context ────────────────────────────────────────
116
+ server.registerTool("memory_context", {
117
+ title: "Get Memory Context",
118
+ description: "Get all relevant context for a topic — combines memories across types to build a complete picture. Use at the start of a task to load relevant background. Returns corrections first (they override other context).",
119
+ inputSchema: z.object({
120
+ topic: z.string().describe("The topic or task you need context for"),
121
+ max_tokens: z.number().default(2000).describe("Approximate token budget for context"),
122
+ }),
123
+ }, async ({ topic, max_tokens }) => {
124
+ const queryEmbedding = await generateEmbedding(topic);
125
+ const results = recallMemories(db, {
126
+ query: topic,
127
+ queryEmbedding,
128
+ limit: 50,
129
+ });
130
+ if (results.length === 0) {
131
+ return {
132
+ content: [{ type: "text", text: `No context found for: "${topic}"` }],
133
+ };
134
+ }
135
+ const grouped = {};
136
+ const typeOrder = ["correction", "decision", "pattern", "preference", "topology", "fact"];
137
+ for (const r of results) {
138
+ if (!grouped[r.type])
139
+ grouped[r.type] = [];
140
+ grouped[r.type].push(r);
141
+ }
142
+ let output = `## Context for: ${topic}\n\n`;
143
+ let approxTokens = 0;
144
+ const CHARS_PER_TOKEN = 4;
145
+ for (const t of typeOrder) {
146
+ const memories = grouped[t];
147
+ if (!memories || memories.length === 0)
148
+ continue;
149
+ const header = `### ${t.charAt(0).toUpperCase() + t.slice(1)}s\n`;
150
+ output += header;
151
+ approxTokens += header.length / CHARS_PER_TOKEN;
152
+ for (const m of memories) {
153
+ const line = `- ${m.content} (${(m.confidence * 100).toFixed(0)}% confidence)\n`;
154
+ approxTokens += line.length / CHARS_PER_TOKEN;
155
+ if (approxTokens > max_tokens)
156
+ break;
157
+ output += line;
158
+ }
159
+ output += "\n";
160
+ if (approxTokens > max_tokens)
161
+ break;
162
+ }
163
+ for (const r of results)
164
+ db.touchAccess(r.id);
165
+ return {
166
+ content: [{ type: "text", text: output.trim() }],
167
+ };
168
+ });
169
+ // ── memory_forget ─────────────────────────────────────────
170
+ server.registerTool("memory_forget", {
171
+ title: "Forget Memory",
172
+ description: "Delete a specific memory by ID, or delete all memories matching a query. Use when information is outdated, wrong, or the user explicitly asks to forget something.",
173
+ inputSchema: z.object({
174
+ id: z.string().optional().describe("Specific memory ID to delete"),
175
+ query: z.string().optional().describe("Delete all memories matching this query (requires confirmation)"),
176
+ confirm: z.boolean().default(false).describe("Must be true to actually delete when using query-based deletion"),
177
+ }),
178
+ }, async ({ id, query, confirm }) => {
179
+ if (id) {
180
+ const memory = db.getById(id);
181
+ if (!memory) {
182
+ return { content: [{ type: "text", text: `Memory ${id} not found.` }] };
183
+ }
184
+ db.deleteMemory(id);
185
+ return {
186
+ content: [{ type: "text", text: `Deleted memory: "${memory.content}" (${memory.type})` }],
187
+ };
188
+ }
189
+ if (query) {
190
+ const queryEmbedding = await generateEmbedding(query);
191
+ const matches = recallMemories(db, { query, queryEmbedding, limit: 20, minConfidence: 0 });
192
+ if (!confirm) {
193
+ const preview = matches.slice(0, 5).map((m, i) => `${i + 1}. [${m.id.slice(0, 8)}] ${m.content}`).join("\n");
194
+ return {
195
+ content: [{
196
+ type: "text",
197
+ text: `Found ${matches.length} memories matching "${query}". Preview:\n${preview}\n\nCall again with confirm=true to delete these.`,
198
+ }],
199
+ };
200
+ }
201
+ for (const m of matches)
202
+ db.deleteMemory(m.id);
203
+ return {
204
+ content: [{ type: "text", text: `Deleted ${matches.length} memories matching "${query}".` }],
205
+ };
206
+ }
207
+ return {
208
+ content: [{ type: "text", text: "Provide either an id or a query to delete memories." }],
209
+ };
210
+ });
211
+ // ── memory_extract ─────────────────────────────────────────
212
+ server.registerTool("memory_extract", {
213
+ title: "Extract Memories from Conversation",
214
+ description: `Extract and store multiple memories from the current conversation in one call. Use this PROACTIVELY:
215
+
216
+ WHEN to extract:
217
+ - User corrects your approach → correction (confidence: 1.0)
218
+ - An architectural decision is made → decision (confidence: 0.9)
219
+ - You notice a coding pattern the user prefers → pattern (confidence: 0.7)
220
+ - User expresses a tool/style preference → preference (confidence: 0.8)
221
+ - You learn where something is in the codebase → topology (confidence: 0.7)
222
+ - A project fact is established → fact (confidence: 0.6)
223
+
224
+ HOW OFTEN: Every ~10 exchanges, or when the conversation is ending, or after any significant decision/correction.
225
+
226
+ Each memory should be a specific, self-contained statement that would be useful in a future conversation without additional context.`,
227
+ inputSchema: z.object({
228
+ memories: z.array(z.object({
229
+ content: z.string().describe("Specific, self-contained memory statement"),
230
+ type: z.enum(MEMORY_TYPES).describe("Memory type"),
231
+ tags: z.array(z.string()).default([]).describe("Relevant tags"),
232
+ confidence: z.number().min(0).max(1).default(0.8).describe("Confidence level"),
233
+ })).describe("Array of memories to extract and store"),
234
+ source: z.string().default("conversation").describe("Source identifier"),
235
+ }),
236
+ }, async ({ memories: memoryInputs, source }) => {
237
+ let stored = 0;
238
+ let skipped = 0;
239
+ let reinforced = 0;
240
+ const details = [];
241
+ for (const input of memoryInputs) {
242
+ const embedding = await generateEmbedding(input.content);
243
+ // Check for duplicates/conflicts
244
+ let isDuplicate = false;
245
+ if (embedding) {
246
+ const existing = db.getAllWithEmbeddings();
247
+ for (const mem of existing) {
248
+ if (!mem.embedding)
249
+ continue;
250
+ const sim = cosineSimilarity(embedding, mem.embedding);
251
+ if (sim > 0.85) {
252
+ // Near-duplicate — reinforce existing
253
+ db.updateConfidence(mem.id, Math.min(1.0, mem.confidence + 0.1));
254
+ db.touchAccess(mem.id);
255
+ reinforced++;
256
+ details.push(` ~ Reinforced: "${mem.content}" (${(sim * 100).toFixed(0)}% match)`);
257
+ isDuplicate = true;
258
+ break;
259
+ }
260
+ }
261
+ }
262
+ if (!isDuplicate) {
263
+ const id = db.insertMemory({
264
+ content: input.content,
265
+ type: input.type,
266
+ tags: input.tags,
267
+ confidence: input.confidence,
268
+ source,
269
+ embedding,
270
+ });
271
+ stored++;
272
+ details.push(` + Stored [${input.type}]: "${input.content}" (${id.slice(0, 8)})`);
273
+ }
274
+ }
275
+ const stats = db.getStats();
276
+ const summary = [
277
+ `Extraction complete: ${stored} stored, ${reinforced} reinforced, ${skipped} skipped.`,
278
+ `Total memories: ${stats.total}.`,
279
+ "",
280
+ ...details,
281
+ ].join("\n");
282
+ return {
283
+ content: [{ type: "text", text: summary }],
284
+ };
285
+ });
286
+ // ── memory_stats ──────────────────────────────────────────
287
+ server.registerTool("memory_stats", {
288
+ title: "Memory Statistics",
289
+ description: "Show memory statistics: total count, breakdown by type, confidence distribution, embedding coverage.",
290
+ inputSchema: z.object({}),
291
+ }, async () => {
292
+ const stats = db.getStats();
293
+ const all = db.getAll();
294
+ if (stats.total === 0) {
295
+ return {
296
+ content: [{ type: "text", text: "No memories stored yet." }],
297
+ };
298
+ }
299
+ const typeOrder = ["correction", "decision", "pattern", "preference", "topology", "fact"];
300
+ const typeLines = typeOrder
301
+ .filter(t => (stats.byType[t] || 0) > 0)
302
+ .map(t => ` ${t}: ${stats.byType[t]}`);
303
+ const highConf = all.filter(m => m.confidence >= 0.8).length;
304
+ const medConf = all.filter(m => m.confidence >= 0.5 && m.confidence < 0.8).length;
305
+ const lowConf = all.filter(m => m.confidence < 0.5).length;
306
+ const withEmbeddings = db.getAllWithEmbeddings().length;
307
+ const text = [
308
+ `Total memories: ${stats.total}`,
309
+ "",
310
+ "By type:",
311
+ ...typeLines,
312
+ "",
313
+ "Confidence:",
314
+ ` High (≥80%): ${highConf}`,
315
+ ` Medium (50-79%): ${medConf}`,
316
+ ` Low (<50%): ${lowConf}`,
317
+ "",
318
+ `Embeddings: ${withEmbeddings}/${stats.total}`,
319
+ ].join("\n");
320
+ return {
321
+ content: [{ type: "text", text }],
322
+ };
323
+ });
324
+ // ── memory_export ─────────────────────────────────────────
325
+ server.registerTool("memory_export", {
326
+ title: "Export Memories",
327
+ description: "Export all memories as formatted markdown, grouped by type. Useful for backup, review, or sharing.",
328
+ inputSchema: z.object({}),
329
+ }, async () => {
330
+ const all = db.getAll();
331
+ if (all.length === 0) {
332
+ return {
333
+ content: [{ type: "text", text: "No memories to export." }],
334
+ };
335
+ }
336
+ const typeOrder = ["correction", "decision", "pattern", "preference", "topology", "fact"];
337
+ let md = `# Amem Memory Export\n\n`;
338
+ md += `*Exported: ${new Date().toISOString()}*\n`;
339
+ md += `*Total: ${all.length} memories*\n\n`;
340
+ for (const t of typeOrder) {
341
+ const memories = all.filter(m => m.type === t);
342
+ if (memories.length === 0)
343
+ continue;
344
+ md += `## ${t.charAt(0).toUpperCase() + t.slice(1)}s\n\n`;
345
+ for (const m of memories) {
346
+ const conf = (m.confidence * 100).toFixed(0);
347
+ md += `- **${m.content}** (${conf}% confidence)\n`;
348
+ if (m.tags.length > 0) {
349
+ md += ` Tags: ${m.tags.join(", ")}\n`;
350
+ }
351
+ md += "\n";
352
+ }
353
+ }
354
+ return {
355
+ content: [{ type: "text", text: md.trim() }],
356
+ };
357
+ });
358
+ }
359
+ function formatAge(timestamp) {
360
+ const ms = Date.now() - timestamp;
361
+ const minutes = Math.floor(ms / 60000);
362
+ if (minutes < 60)
363
+ return `${minutes}m ago`;
364
+ const hours = Math.floor(minutes / 60);
365
+ if (hours < 24)
366
+ return `${hours}h ago`;
367
+ const days = Math.floor(hours / 24);
368
+ if (days < 30)
369
+ return `${days}d ago`;
370
+ const months = Math.floor(days / 30);
371
+ return `${months}mo ago`;
372
+ }
373
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@aman_asmuei/amem",
3
+ "version": "0.1.0",
4
+ "description": "The memory layer for AI coding tools. Local-first, developer-specific, works everywhere.",
5
+ "type": "module",
6
+ "bin": {
7
+ "amem": "dist/index.js",
8
+ "amem-cli": "dist/cli.js"
9
+ },
10
+ "files": ["dist"],
11
+ "scripts": {
12
+ "build": "tsc",
13
+ "dev": "tsc --watch",
14
+ "test": "vitest run",
15
+ "test:watch": "vitest",
16
+ "prepare": "npm run build",
17
+ "start": "node dist/index.js"
18
+ },
19
+ "keywords": ["mcp", "memory", "ai", "developer-tools", "context", "sqlite", "embeddings"],
20
+ "license": "MIT",
21
+ "author": "Aman Asmuei",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "git+https://github.com/amanasmuei/aman-ai-memory.git"
25
+ },
26
+ "homepage": "https://github.com/amanasmuei/aman-ai-memory#readme",
27
+ "engines": {
28
+ "node": ">=18.0.0"
29
+ },
30
+ "dependencies": {
31
+ "@modelcontextprotocol/sdk": "^1.25.2",
32
+ "better-sqlite3": "^12.0.0",
33
+ "zod": "^3.25.0"
34
+ },
35
+ "optionalDependencies": {
36
+ "@huggingface/transformers": "^3.8.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/better-sqlite3": "^7.6.0",
40
+ "@types/node": "^22.0.0",
41
+ "typescript": "^5.6.0",
42
+ "vitest": "^3.0.0"
43
+ }
44
+ }