@naveenadi/mnemonic 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.
Files changed (80) hide show
  1. package/README.md +93 -0
  2. package/SKILL.md +158 -0
  3. package/bin/mne +8 -0
  4. package/dist/chunker/index.d.ts +8 -0
  5. package/dist/chunker/index.d.ts.map +1 -0
  6. package/dist/chunker/index.js +157 -0
  7. package/dist/chunker/index.js.map +1 -0
  8. package/dist/cli/commands.d.ts +2 -0
  9. package/dist/cli/commands.d.ts.map +1 -0
  10. package/dist/cli/commands.js +793 -0
  11. package/dist/cli/commands.js.map +1 -0
  12. package/dist/cli/index.d.ts +3 -0
  13. package/dist/cli/index.d.ts.map +1 -0
  14. package/dist/cli/index.js +7 -0
  15. package/dist/cli/index.js.map +1 -0
  16. package/dist/cli/mne.d.ts +3 -0
  17. package/dist/cli/mne.d.ts.map +1 -0
  18. package/dist/cli/mne.js +7 -0
  19. package/dist/cli/mne.js.map +1 -0
  20. package/dist/index.d.ts +13 -0
  21. package/dist/index.d.ts.map +1 -0
  22. package/dist/index.js +15 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/llm/factory.d.ts +15 -0
  25. package/dist/llm/factory.d.ts.map +1 -0
  26. package/dist/llm/factory.js +60 -0
  27. package/dist/llm/factory.js.map +1 -0
  28. package/dist/llm/index.d.ts +19 -0
  29. package/dist/llm/index.d.ts.map +1 -0
  30. package/dist/llm/index.js +18 -0
  31. package/dist/llm/index.js.map +1 -0
  32. package/dist/llm/node-llama-cpp.d.ts +30 -0
  33. package/dist/llm/node-llama-cpp.d.ts.map +1 -0
  34. package/dist/llm/node-llama-cpp.js +143 -0
  35. package/dist/llm/node-llama-cpp.js.map +1 -0
  36. package/dist/llm/ollama.d.ts +19 -0
  37. package/dist/llm/ollama.d.ts.map +1 -0
  38. package/dist/llm/ollama.js +99 -0
  39. package/dist/llm/ollama.js.map +1 -0
  40. package/dist/mcp/server.d.ts +2 -0
  41. package/dist/mcp/server.d.ts.map +1 -0
  42. package/dist/mcp/server.js +360 -0
  43. package/dist/mcp/server.js.map +1 -0
  44. package/dist/pi-extension/index.d.ts +3 -0
  45. package/dist/pi-extension/index.d.ts.map +1 -0
  46. package/dist/pi-extension/index.js +193 -0
  47. package/dist/pi-extension/index.js.map +1 -0
  48. package/dist/search/fts.d.ts +17 -0
  49. package/dist/search/fts.d.ts.map +1 -0
  50. package/dist/search/fts.js +110 -0
  51. package/dist/search/fts.js.map +1 -0
  52. package/dist/search/fusion.d.ts +33 -0
  53. package/dist/search/fusion.d.ts.map +1 -0
  54. package/dist/search/fusion.js +97 -0
  55. package/dist/search/fusion.js.map +1 -0
  56. package/dist/search/pipeline.d.ts +34 -0
  57. package/dist/search/pipeline.d.ts.map +1 -0
  58. package/dist/search/pipeline.js +216 -0
  59. package/dist/search/pipeline.js.map +1 -0
  60. package/dist/search/vector.d.ts +20 -0
  61. package/dist/search/vector.d.ts.map +1 -0
  62. package/dist/search/vector.js +70 -0
  63. package/dist/search/vector.js.map +1 -0
  64. package/dist/store/collections.d.ts +23 -0
  65. package/dist/store/collections.d.ts.map +1 -0
  66. package/dist/store/collections.js +99 -0
  67. package/dist/store/collections.js.map +1 -0
  68. package/dist/store/database.d.ts +22 -0
  69. package/dist/store/database.d.ts.map +1 -0
  70. package/dist/store/database.js +209 -0
  71. package/dist/store/database.js.map +1 -0
  72. package/dist/store/documents.d.ts +68 -0
  73. package/dist/store/documents.d.ts.map +1 -0
  74. package/dist/store/documents.js +273 -0
  75. package/dist/store/documents.js.map +1 -0
  76. package/dist/types.d.ts +193 -0
  77. package/dist/types.d.ts.map +1 -0
  78. package/dist/types.js +3 -0
  79. package/dist/types.js.map +1 -0
  80. package/package.json +58 -0
@@ -0,0 +1,273 @@
1
+ import { createHash } from 'node:crypto';
2
+ /** Generate 6-char docid from content hash */
3
+ export function docid(content) {
4
+ return createHash('sha256').update(content).digest('hex').slice(0, 6);
5
+ }
6
+ /** Generate full content hash */
7
+ export function contentHash(content) {
8
+ return createHash('sha256').update(content).digest('hex');
9
+ }
10
+ /** Extract title from content (first heading or filename) */
11
+ export function extractTitle(content, fallback) {
12
+ const headingMatch = content.match(/^#\s+(.+)$/m);
13
+ if (headingMatch)
14
+ return headingMatch[1].trim();
15
+ return fallback.replace(/\.md$/i, '').replace(/[-_]/g, ' ');
16
+ }
17
+ /** Parse frontmatter from markdown content */
18
+ export function parseFrontmatter(content) {
19
+ const fmMatch = content.match(/^---\n([\s\S]*?)\n---\n([\s\S]*)$/);
20
+ if (!fmMatch)
21
+ return { frontmatter: null, body: content };
22
+ try {
23
+ const { parse } = require('yaml');
24
+ const fm = parse(fmMatch[1]);
25
+ return { frontmatter: fm, body: fmMatch[2] };
26
+ }
27
+ catch {
28
+ return { frontmatter: null, body: content };
29
+ }
30
+ }
31
+ /** Extract tags from frontmatter and inline #tags */
32
+ export function extractTags(frontmatter, content) {
33
+ const tags = new Set();
34
+ // From frontmatter
35
+ if (frontmatter?.tags) {
36
+ if (Array.isArray(frontmatter.tags)) {
37
+ frontmatter.tags.forEach((t) => tags.add(String(t)));
38
+ }
39
+ else if (typeof frontmatter.tags === 'string') {
40
+ tags.add(frontmatter.tags);
41
+ }
42
+ }
43
+ // Inline #tags (not in code blocks)
44
+ const codeBlock = /```[\s\S]*?```/g;
45
+ const cleaned = content.replace(codeBlock, '');
46
+ const tagPattern = /(?:^|\s)#([a-zA-Z][a-zA-Z0-9_-]*)/g;
47
+ let match;
48
+ while ((match = tagPattern.exec(cleaned)) !== null) {
49
+ tags.add(match[1]);
50
+ }
51
+ return [...tags].sort();
52
+ }
53
+ export class DocumentStore {
54
+ db;
55
+ constructor(db) {
56
+ this.db = db;
57
+ }
58
+ /** Add or update a document */
59
+ upsert(collection, relPath, fullPath, content) {
60
+ const hash = contentHash(content);
61
+ const id = docid(content);
62
+ const title = extractTitle(content, relPath);
63
+ const { frontmatter } = parseFrontmatter(content);
64
+ const tags = extractTags(frontmatter, content);
65
+ const fmJson = frontmatter ? JSON.stringify(frontmatter) : null;
66
+ const tagsJson = JSON.stringify(tags);
67
+ const existing = this.db.db
68
+ .prepare('SELECT checksum FROM documents WHERE docid = ?')
69
+ .get(id);
70
+ if (existing && existing.checksum === hash) {
71
+ return { docid: id, isNew: false, needsEmbed: false };
72
+ }
73
+ if (existing) {
74
+ // Update existing
75
+ this.db.db
76
+ .prepare(`UPDATE documents SET content = ?, checksum = ?, size = ?, title = ?,
77
+ frontmatter = ?, tags = ?, indexed_at = datetime('now') WHERE docid = ?`)
78
+ .run(content, hash, content.length, title, fmJson, tagsJson, id);
79
+ }
80
+ else {
81
+ // Insert new
82
+ this.db.db
83
+ .prepare(`INSERT INTO documents (docid, collection, path, full_path, title, content, checksum, size, frontmatter, tags)
84
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`)
85
+ .run(id, collection, relPath, fullPath, title, content, hash, content.length, fmJson, tagsJson);
86
+ }
87
+ // Upsert tags
88
+ if (existing) {
89
+ this.db.db.prepare('DELETE FROM tags WHERE docid = ? AND source = ?').run(id, 'frontmatter');
90
+ }
91
+ for (const tag of tags) {
92
+ this.db.db
93
+ .prepare('INSERT OR IGNORE INTO tags (docid, tag, source) VALUES (?, ?, ?)')
94
+ .run(id, tag, 'frontmatter');
95
+ }
96
+ // Extract and store links
97
+ this.storeLinks(id, relPath, content);
98
+ return { docid: id, isNew: !existing, needsEmbed: true };
99
+ }
100
+ /** Extract wikilinks and markdown links from content */
101
+ storeLinks(docid, relPath, content) {
102
+ // Clear existing links for this doc
103
+ this.db.db.prepare('DELETE FROM links WHERE source_docid = ?').run(docid);
104
+ const links = [];
105
+ // Wikilinks: [[target]] or [[target|display]]
106
+ const wikilinkPattern = /\[\[([^\]|]+)(?:\|[^\]]+)?\]\]/g;
107
+ let match;
108
+ while ((match = wikilinkPattern.exec(content)) !== null) {
109
+ links.push({ target: match[1].trim(), type: 'wikilink' });
110
+ }
111
+ // Markdown links: [text](target) (only local .md links)
112
+ const mdLinkPattern = /\[[^\]]*\]\(([^)]+\.md[^)]*)\)/g;
113
+ while ((match = mdLinkPattern.exec(content)) !== null) {
114
+ links.push({ target: match[1], type: 'markdown' });
115
+ }
116
+ const stmt = this.db.db.prepare('INSERT INTO links (source_docid, source_path, target_docid, target_path, link_type) VALUES (?, ?, ?, ?, ?)');
117
+ for (const link of links) {
118
+ // Try to resolve target docid
119
+ const targetDoc = this.db.db
120
+ .prepare('SELECT docid FROM documents WHERE path LIKE ? OR path LIKE ?')
121
+ .get(`%${link.target}%`, `%/link.target.md`);
122
+ stmt.run(docid, relPath, targetDoc?.docid ?? null, link.target, link.type);
123
+ }
124
+ }
125
+ /** Remove a document and its related data */
126
+ remove(docid) {
127
+ this.db.db.prepare('DELETE FROM tags WHERE docid = ?').run(docid);
128
+ this.db.db.prepare('DELETE FROM links WHERE source_docid = ?').run(docid);
129
+ this.db.db.prepare('DELETE FROM chunks WHERE docid = ?').run(docid);
130
+ this.db.db.prepare('DELETE FROM documents WHERE docid = ?').run(docid);
131
+ }
132
+ /** Remove all documents in a collection */
133
+ removeCollection(name) {
134
+ const docs = this.db.db
135
+ .prepare('SELECT docid FROM documents WHERE collection = ?')
136
+ .all(name);
137
+ for (const d of docs) {
138
+ this.remove(d.docid);
139
+ }
140
+ this.db.db.prepare('DELETE FROM collections WHERE name = ?').run(name);
141
+ }
142
+ /** Get a document by path or docid */
143
+ get(identifier) {
144
+ const isDocid = identifier.startsWith('#') || /^[a-f0-9]{6}$/i.test(identifier);
145
+ const cleanId = identifier.replace(/^#/, '');
146
+ let doc;
147
+ if (isDocid) {
148
+ doc = this.db.db
149
+ .prepare('SELECT * FROM documents WHERE docid = ?')
150
+ .get(cleanId);
151
+ }
152
+ else {
153
+ doc = this.db.db
154
+ .prepare('SELECT * FROM documents WHERE path LIKE ? OR full_path LIKE ?')
155
+ .get(`%${identifier}%`, `%${identifier}%`);
156
+ }
157
+ if (!doc) {
158
+ // Find similar files
159
+ const similar = this.db.db
160
+ .prepare("SELECT path FROM documents WHERE path LIKE ? LIMIT 5")
161
+ .all(`%${identifier.slice(0, 3)}%`);
162
+ return {
163
+ error: `Document not found: ${identifier}`,
164
+ similarFiles: similar.map((s) => s.path),
165
+ };
166
+ }
167
+ const tags = doc.tags ? JSON.parse(doc.tags) : [];
168
+ const frontmatter = doc.frontmatter ? JSON.parse(doc.frontmatter) : undefined;
169
+ return {
170
+ docid: doc.docid,
171
+ path: doc.path,
172
+ fullPath: doc.full_path,
173
+ collection: doc.collection,
174
+ title: doc.title,
175
+ tags,
176
+ frontmatter,
177
+ body: doc.content,
178
+ totalLines: doc.content.split('\n').length,
179
+ };
180
+ }
181
+ /** Get document body with line range */
182
+ getBody(identifier, options) {
183
+ const doc = this.get(identifier);
184
+ if ('error' in doc)
185
+ return doc;
186
+ const lines = doc.body.split('\n');
187
+ const start = (options?.fromLine ?? 1) - 1;
188
+ const end = options?.maxLines ? start + options.maxLines : lines.length;
189
+ const slice = lines.slice(start, end).join('\n');
190
+ return { content: slice, totalLines: lines.length };
191
+ }
192
+ /** Add context entry */
193
+ addContext(collection, path, context) {
194
+ this.db.db
195
+ .prepare('INSERT OR REPLACE INTO contexts (collection, path, context) VALUES (?, ?, ?)')
196
+ .run(collection, path, context);
197
+ }
198
+ /** List all contexts */
199
+ listContexts() {
200
+ return this.db.db
201
+ .prepare('SELECT collection, path, context FROM contexts ORDER BY path')
202
+ .all();
203
+ }
204
+ /** Remove a context */
205
+ removeContext(collection, path) {
206
+ this.db.db
207
+ .prepare('DELETE FROM contexts WHERE collection = ? AND path = ?')
208
+ .run(collection, path);
209
+ }
210
+ /** Get context chain for a document (hierarchical) */
211
+ getContextChain(collection, relPath) {
212
+ const contexts = [];
213
+ // Match contexts by path prefix, from most specific to least
214
+ const all = this.db.db
215
+ .prepare(`SELECT path, context FROM contexts
216
+ WHERE (collection = ? OR collection IS NULL)
217
+ ORDER BY length(path) DESC`)
218
+ .all(collection);
219
+ for (const ctx of all) {
220
+ if (relPath.startsWith(ctx.path) || ctx.path === '/') {
221
+ contexts.push(ctx.context);
222
+ }
223
+ }
224
+ return contexts;
225
+ }
226
+ /** Add a manual tag */
227
+ addTag(docid, tag) {
228
+ this.db.db
229
+ .prepare('INSERT OR IGNORE INTO tags (docid, tag, source) VALUES (?, ?, ?)')
230
+ .run(docid, tag, 'manual');
231
+ }
232
+ /** Remove a manual tag */
233
+ removeTag(docid, tag) {
234
+ this.db.db
235
+ .prepare('DELETE FROM tags WHERE docid = ? AND tag = ? AND source = ?')
236
+ .run(docid, tag, 'manual');
237
+ }
238
+ /** Get all tags */
239
+ getAllTags() {
240
+ return this.db.db
241
+ .prepare('SELECT tag, COUNT(*) as count FROM tags GROUP BY tag ORDER BY count DESC')
242
+ .all();
243
+ }
244
+ /** Get backlinks to a document */
245
+ getBacklinks(docid) {
246
+ return this.db.db
247
+ .prepare(`SELECT source_docid as sourceDocid, source_path as sourcePath,
248
+ target_docid as targetDocid, target_path as targetPath,
249
+ link_type as linkType
250
+ FROM links WHERE target_docid = ? OR target_path LIKE ?`)
251
+ .all(docid, `%${docid}%`);
252
+ }
253
+ /** Get outgoing links from a document */
254
+ getLinks(docid) {
255
+ return this.db.db
256
+ .prepare(`SELECT source_docid as sourceDocid, source_path as sourcePath,
257
+ target_docid as targetDocid, target_path as targetPath,
258
+ link_type as linkType
259
+ FROM links WHERE source_docid = ?`)
260
+ .all(docid);
261
+ }
262
+ /** Find orphan documents (no incoming or outgoing links) */
263
+ getOrphans() {
264
+ return this.db.db
265
+ .prepare(`SELECT docid, path FROM documents WHERE docid NOT IN (
266
+ SELECT DISTINCT source_docid FROM links
267
+ UNION
268
+ SELECT DISTINCT target_docid FROM links WHERE target_docid IS NOT NULL
269
+ ) ORDER BY path`)
270
+ .all();
271
+ }
272
+ }
273
+ //# sourceMappingURL=documents.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/store/documents.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,193 @@
1
+ /** Document metadata as stored in SQLite */
2
+ export interface DocumentRecord {
3
+ id: number;
4
+ docid: string;
5
+ collection: string;
6
+ path: string;
7
+ fullPath: string;
8
+ title: string;
9
+ content: string;
10
+ checksum: string;
11
+ size: number;
12
+ createdAt: string;
13
+ indexedAt: string;
14
+ frontmatter: string | null;
15
+ tags: string | null;
16
+ }
17
+ /** A chunk of a document, stored in the vectors index */
18
+ export interface ChunkRecord {
19
+ hash: string;
20
+ seq: number;
21
+ pos: number;
22
+ content: string;
23
+ heading: string;
24
+ }
25
+ /** Search result from any backend */
26
+ export interface SearchResult {
27
+ docid: string;
28
+ collection: string;
29
+ path: string;
30
+ fullPath: string;
31
+ title: string;
32
+ score: number;
33
+ snippet: string;
34
+ context: string[];
35
+ tags: string[];
36
+ line: number;
37
+ heading: string;
38
+ modifiedAt: string;
39
+ explain?: ScoreExplain;
40
+ }
41
+ export interface ScoreExplain {
42
+ ftsScores: number[];
43
+ vectorScores: number[];
44
+ rerankScore?: number;
45
+ rrf: {
46
+ rank: number;
47
+ weight: number;
48
+ baseScore: number;
49
+ topRankBonus: number;
50
+ totalScore: number;
51
+ contributions: Array<{
52
+ source: 'fts' | 'vector' | 'hyde';
53
+ queryType: 'original' | 'expanded' | 'hyde';
54
+ query: string;
55
+ rank: number;
56
+ weight: number;
57
+ backendScore: number;
58
+ rrfContribution: number;
59
+ }>;
60
+ };
61
+ decay?: number;
62
+ linkBoost?: number;
63
+ }
64
+ /** Typed sub-query for structured search */
65
+ export interface ExpandedQuery {
66
+ type: 'lex' | 'vec' | 'hyde';
67
+ query: string;
68
+ }
69
+ /** Collection configuration */
70
+ export interface CollectionConfig {
71
+ path: string;
72
+ name: string;
73
+ pattern?: string;
74
+ ignore?: string[];
75
+ includeByDefault?: boolean;
76
+ updateCommand?: string;
77
+ }
78
+ /** Store configuration */
79
+ export interface StoreOptions {
80
+ dbPath: string;
81
+ config?: {
82
+ collections?: Record<string, CollectionConfig>;
83
+ };
84
+ configPath?: string;
85
+ }
86
+ /** Search options */
87
+ export interface SearchOptions {
88
+ query?: string;
89
+ queries?: ExpandedQuery[];
90
+ intent?: string;
91
+ collection?: string | string[];
92
+ limit?: number;
93
+ minScore?: number;
94
+ candidateLimit?: number;
95
+ rerank?: boolean;
96
+ expand?: boolean;
97
+ hyde?: boolean;
98
+ decay?: boolean;
99
+ decayHalfLifeDays?: number;
100
+ boostLinks?: boolean;
101
+ explain?: boolean;
102
+ fullContent?: boolean;
103
+ format?: 'cli' | 'json' | 'md' | 'files';
104
+ }
105
+ /** Ingestion result */
106
+ export interface UpdateResult {
107
+ collections: string[];
108
+ indexed: number;
109
+ updated: number;
110
+ unchanged: number;
111
+ removed: number;
112
+ needsEmbedding: number;
113
+ }
114
+ /** Embedding progress */
115
+ export interface EmbedProgress {
116
+ current: number;
117
+ total: number;
118
+ collection: string;
119
+ }
120
+ /** Embedding result */
121
+ export interface EmbedResult {
122
+ embedded: number;
123
+ skipped: number;
124
+ failed: number;
125
+ }
126
+ /** Store status */
127
+ export interface IndexStatus {
128
+ collections: CollectionInfo[];
129
+ documentCount: number;
130
+ chunkCount: number;
131
+ vectorCount: number;
132
+ linkCount: number;
133
+ tagCount: number;
134
+ dbSize: number;
135
+ lastIndexed: string | null;
136
+ mcpPid?: number;
137
+ }
138
+ export interface CollectionInfo {
139
+ name: string;
140
+ path: string;
141
+ globPattern: string;
142
+ docCount: number;
143
+ activeCount: number;
144
+ lastModified: string;
145
+ includeByDefault: boolean;
146
+ contextCount: number;
147
+ }
148
+ /** Context entry (hierarchical metadata) */
149
+ export interface ContextEntry {
150
+ collection: string;
151
+ path: string;
152
+ context: string;
153
+ }
154
+ /** Link graph entry */
155
+ export interface LinkEntry {
156
+ sourceDocid: string;
157
+ sourcePath: string;
158
+ targetDocid: string | null;
159
+ targetPath: string;
160
+ linkType: 'wikilink' | 'markdown' | 'autolink';
161
+ }
162
+ /** Document retrieval */
163
+ export interface DocumentResult {
164
+ docid: string;
165
+ path: string;
166
+ fullPath: string;
167
+ collection: string;
168
+ title: string;
169
+ tags: string[];
170
+ frontmatter?: Record<string, unknown>;
171
+ body: string;
172
+ totalLines: number;
173
+ }
174
+ export interface DocumentNotFound {
175
+ error: string;
176
+ similarFiles: string[];
177
+ }
178
+ /** LLM backend interface */
179
+ export interface LLMBackend {
180
+ /** Generate embeddings for text (returns normalized vectors) */
181
+ embed(texts: string[]): Promise<number[][]>;
182
+ /** Rerank documents by relevance to query */
183
+ rerank(query: string, documents: string[]): Promise<number[]>;
184
+ /** Generate query expansions */
185
+ expandQuery(query: string, intent?: string): Promise<string[]>;
186
+ /** Generate HyDE document */
187
+ generateHyde(query: string, intent?: string): Promise<string>;
188
+ /** Get embedding dimension */
189
+ embeddingDim(): number;
190
+ /** Close/release resources */
191
+ close(): Promise<void>;
192
+ }
193
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,3 @@
1
+ // ─── Core Types ───────────────────────────────────────────────────────
2
+ export {};
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,yEAAyE"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@naveenadi/mnemonic",
3
+ "version": "0.1.0",
4
+ "description": "On-device hybrid search for markdown knowledge bases. BM25 + vector + LLM reranking with link graphs, time decay, and HyDE. Designed for pi coding agent.",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "types": "dist/index.d.ts",
8
+ "bin": {
9
+ "mne": "bin/mne"
10
+ },
11
+ "files": [
12
+ "bin/",
13
+ "dist/",
14
+ "SKILL.md",
15
+ "pi-extension/"
16
+ ],
17
+ "scripts": {
18
+ "build": "tsc -p tsconfig.build.json",
19
+ "dev": "tsx src/cli/index.ts",
20
+ "test": "vitest run",
21
+ "test:watch": "vitest",
22
+ "prepublishOnly": "npm run build"
23
+ },
24
+ "dependencies": {
25
+ "@modelcontextprotocol/sdk": "^1.29.0",
26
+ "better-sqlite3": "^12.10.0",
27
+ "fast-glob": "^3.3.3",
28
+ "node-llama-cpp": "^3.18.1",
29
+ "picomatch": "^4.0.4",
30
+ "sqlite-vec": "^0.1.9",
31
+ "yaml": "^2.9.0",
32
+ "zod": "^4.2.1"
33
+ },
34
+ "optionalDependencies": {
35
+ "sqlite-vec-darwin-arm64": "^0.1.9"
36
+ },
37
+ "peerDependencies": {
38
+ "typescript": "^5.9.0"
39
+ },
40
+ "engines": {
41
+ "node": ">=22.0.0"
42
+ },
43
+ "keywords": [
44
+ "search",
45
+ "markdown",
46
+ "knowledge-base",
47
+ "vector-search",
48
+ "bm25",
49
+ "rag",
50
+ "mcp",
51
+ "local-ai",
52
+ "semantic-search"
53
+ ],
54
+ "license": "MIT",
55
+ "devDependencies": {
56
+ "@types/node": "^22.19.21"
57
+ }
58
+ }