codevault 1.0.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 (156) hide show
  1. package/.env.example +37 -0
  2. package/LICENSE +21 -0
  3. package/README.md +174 -0
  4. package/dist/chunking/file-grouper.d.ts +39 -0
  5. package/dist/chunking/file-grouper.d.ts.map +1 -0
  6. package/dist/chunking/file-grouper.js +181 -0
  7. package/dist/chunking/file-grouper.js.map +1 -0
  8. package/dist/chunking/semantic-chunker.d.ts +37 -0
  9. package/dist/chunking/semantic-chunker.d.ts.map +1 -0
  10. package/dist/chunking/semantic-chunker.js +172 -0
  11. package/dist/chunking/semantic-chunker.js.map +1 -0
  12. package/dist/chunking/token-counter.d.ts +28 -0
  13. package/dist/chunking/token-counter.d.ts.map +1 -0
  14. package/dist/chunking/token-counter.js +207 -0
  15. package/dist/chunking/token-counter.js.map +1 -0
  16. package/dist/cli/commands/context.d.ts +3 -0
  17. package/dist/cli/commands/context.d.ts.map +1 -0
  18. package/dist/cli/commands/context.js +98 -0
  19. package/dist/cli/commands/context.js.map +1 -0
  20. package/dist/cli.d.ts +3 -0
  21. package/dist/cli.d.ts.map +1 -0
  22. package/dist/cli.js +222 -0
  23. package/dist/cli.js.map +1 -0
  24. package/dist/codemap/io.d.ts +5 -0
  25. package/dist/codemap/io.d.ts.map +1 -0
  26. package/dist/codemap/io.js +30 -0
  27. package/dist/codemap/io.js.map +1 -0
  28. package/dist/context/packs.d.ts +33 -0
  29. package/dist/context/packs.d.ts.map +1 -0
  30. package/dist/context/packs.js +180 -0
  31. package/dist/context/packs.js.map +1 -0
  32. package/dist/core/indexer.d.ts +3 -0
  33. package/dist/core/indexer.d.ts.map +1 -0
  34. package/dist/core/indexer.js +610 -0
  35. package/dist/core/indexer.js.map +1 -0
  36. package/dist/core/metadata.d.ts +19 -0
  37. package/dist/core/metadata.d.ts.map +1 -0
  38. package/dist/core/metadata.js +161 -0
  39. package/dist/core/metadata.js.map +1 -0
  40. package/dist/core/search.d.ts +6 -0
  41. package/dist/core/search.d.ts.map +1 -0
  42. package/dist/core/search.js +482 -0
  43. package/dist/core/search.js.map +1 -0
  44. package/dist/core/symbol-extractor.d.ts +3 -0
  45. package/dist/core/symbol-extractor.d.ts.map +1 -0
  46. package/dist/core/symbol-extractor.js +78 -0
  47. package/dist/core/symbol-extractor.js.map +1 -0
  48. package/dist/core/types.d.ts +96 -0
  49. package/dist/core/types.d.ts.map +1 -0
  50. package/dist/core/types.js +2 -0
  51. package/dist/core/types.js.map +1 -0
  52. package/dist/database/db.d.ts +63 -0
  53. package/dist/database/db.d.ts.map +1 -0
  54. package/dist/database/db.js +205 -0
  55. package/dist/database/db.js.map +1 -0
  56. package/dist/indexer/merkle.d.ts +13 -0
  57. package/dist/indexer/merkle.d.ts.map +1 -0
  58. package/dist/indexer/merkle.js +86 -0
  59. package/dist/indexer/merkle.js.map +1 -0
  60. package/dist/indexer/update.d.ts +19 -0
  61. package/dist/indexer/update.d.ts.map +1 -0
  62. package/dist/indexer/update.js +40 -0
  63. package/dist/indexer/update.js.map +1 -0
  64. package/dist/indexer/watch.d.ts +21 -0
  65. package/dist/indexer/watch.d.ts.map +1 -0
  66. package/dist/indexer/watch.js +204 -0
  67. package/dist/indexer/watch.js.map +1 -0
  68. package/dist/languages/rules.d.ts +11 -0
  69. package/dist/languages/rules.d.ts.map +1 -0
  70. package/dist/languages/rules.js +371 -0
  71. package/dist/languages/rules.js.map +1 -0
  72. package/dist/languages/tree-sitter-loader.d.ts +27 -0
  73. package/dist/languages/tree-sitter-loader.d.ts.map +1 -0
  74. package/dist/languages/tree-sitter-loader.js +75 -0
  75. package/dist/languages/tree-sitter-loader.js.map +1 -0
  76. package/dist/mcp/tools/use-context-pack.d.ts +57 -0
  77. package/dist/mcp/tools/use-context-pack.d.ts.map +1 -0
  78. package/dist/mcp/tools/use-context-pack.js +91 -0
  79. package/dist/mcp/tools/use-context-pack.js.map +1 -0
  80. package/dist/mcp-server.d.ts +3 -0
  81. package/dist/mcp-server.d.ts.map +1 -0
  82. package/dist/mcp-server.js +363 -0
  83. package/dist/mcp-server.js.map +1 -0
  84. package/dist/providers/base.d.ts +34 -0
  85. package/dist/providers/base.d.ts.map +1 -0
  86. package/dist/providers/base.js +160 -0
  87. package/dist/providers/base.js.map +1 -0
  88. package/dist/providers/index.d.ts +6 -0
  89. package/dist/providers/index.d.ts.map +1 -0
  90. package/dist/providers/index.js +22 -0
  91. package/dist/providers/index.js.map +1 -0
  92. package/dist/providers/ollama.d.ts +13 -0
  93. package/dist/providers/ollama.d.ts.map +1 -0
  94. package/dist/providers/ollama.js +50 -0
  95. package/dist/providers/ollama.js.map +1 -0
  96. package/dist/providers/openai.d.ts +13 -0
  97. package/dist/providers/openai.d.ts.map +1 -0
  98. package/dist/providers/openai.js +59 -0
  99. package/dist/providers/openai.js.map +1 -0
  100. package/dist/providers/token-counter.d.ts +2 -0
  101. package/dist/providers/token-counter.d.ts.map +1 -0
  102. package/dist/providers/token-counter.js +18 -0
  103. package/dist/providers/token-counter.js.map +1 -0
  104. package/dist/ranking/api-reranker.d.ts +18 -0
  105. package/dist/ranking/api-reranker.d.ts.map +1 -0
  106. package/dist/ranking/api-reranker.js +148 -0
  107. package/dist/ranking/api-reranker.js.map +1 -0
  108. package/dist/ranking/symbol-boost.d.ts +15 -0
  109. package/dist/ranking/symbol-boost.d.ts.map +1 -0
  110. package/dist/ranking/symbol-boost.js +154 -0
  111. package/dist/ranking/symbol-boost.js.map +1 -0
  112. package/dist/search/bm25.d.ts +17 -0
  113. package/dist/search/bm25.d.ts.map +1 -0
  114. package/dist/search/bm25.js +56 -0
  115. package/dist/search/bm25.js.map +1 -0
  116. package/dist/search/hybrid.d.ts +21 -0
  117. package/dist/search/hybrid.d.ts.map +1 -0
  118. package/dist/search/hybrid.js +50 -0
  119. package/dist/search/hybrid.js.map +1 -0
  120. package/dist/search/scope.d.ts +5 -0
  121. package/dist/search/scope.d.ts.map +1 -0
  122. package/dist/search/scope.js +107 -0
  123. package/dist/search/scope.js.map +1 -0
  124. package/dist/storage/encrypted-chunks.d.ts +40 -0
  125. package/dist/storage/encrypted-chunks.d.ts.map +1 -0
  126. package/dist/storage/encrypted-chunks.js +236 -0
  127. package/dist/storage/encrypted-chunks.js.map +1 -0
  128. package/dist/symbols/extract.d.ts +15 -0
  129. package/dist/symbols/extract.d.ts.map +1 -0
  130. package/dist/symbols/extract.js +187 -0
  131. package/dist/symbols/extract.js.map +1 -0
  132. package/dist/symbols/graph.d.ts +3 -0
  133. package/dist/symbols/graph.d.ts.map +1 -0
  134. package/dist/symbols/graph.js +89 -0
  135. package/dist/symbols/graph.js.map +1 -0
  136. package/dist/types/ast.d.ts +3 -0
  137. package/dist/types/ast.d.ts.map +1 -0
  138. package/dist/types/ast.js +2 -0
  139. package/dist/types/ast.js.map +1 -0
  140. package/dist/types/codemap.d.ts +58 -0
  141. package/dist/types/codemap.d.ts.map +1 -0
  142. package/dist/types/codemap.js +224 -0
  143. package/dist/types/codemap.js.map +1 -0
  144. package/dist/types/context-pack.d.ts +47 -0
  145. package/dist/types/context-pack.d.ts.map +1 -0
  146. package/dist/types/context-pack.js +44 -0
  147. package/dist/types/context-pack.js.map +1 -0
  148. package/dist/types/search.d.ts +15 -0
  149. package/dist/types/search.d.ts.map +1 -0
  150. package/dist/types/search.js +11 -0
  151. package/dist/types/search.js.map +1 -0
  152. package/dist/utils/rate-limiter.d.ts +31 -0
  153. package/dist/utils/rate-limiter.d.ts.map +1 -0
  154. package/dist/utils/rate-limiter.js +168 -0
  155. package/dist/utils/rate-limiter.js.map +1 -0
  156. package/package.json +92 -0
@@ -0,0 +1,96 @@
1
+ import type { EmbeddingProvider } from '../providers/base.js';
2
+ export interface IndexProjectOptions {
3
+ repoPath?: string;
4
+ provider?: string;
5
+ onProgress?: ((event: ProgressEvent) => void) | null;
6
+ changedFiles?: string[] | null;
7
+ deletedFiles?: string[];
8
+ embeddingProviderOverride?: EmbeddingProvider | null;
9
+ encryptMode?: string;
10
+ }
11
+ export interface IndexProjectResult {
12
+ success: boolean;
13
+ processedChunks: number;
14
+ totalChunks: number;
15
+ provider: string;
16
+ errors: IndexError[];
17
+ chunkingStats?: ChunkingStats;
18
+ tokenStats?: any;
19
+ }
20
+ export interface ProgressEvent {
21
+ type: string;
22
+ file?: string;
23
+ symbol?: string;
24
+ chunkId?: string;
25
+ }
26
+ export interface IndexError {
27
+ type: string;
28
+ file?: string;
29
+ chunkId?: string;
30
+ error: string;
31
+ }
32
+ export interface ChunkingStats {
33
+ totalNodes: number;
34
+ skippedSmall: number;
35
+ subdivided: number;
36
+ statementFallback: number;
37
+ normalChunks: number;
38
+ mergedSmall: number;
39
+ fileGrouped?: number;
40
+ functionsGrouped?: number;
41
+ }
42
+ export interface SearchResult {
43
+ type: string;
44
+ lang: string;
45
+ path: string;
46
+ sha: string;
47
+ data: string | null;
48
+ meta: {
49
+ id?: string;
50
+ symbol: string;
51
+ score: number;
52
+ searchType?: string;
53
+ intent?: string;
54
+ description?: string;
55
+ vectorScore?: number;
56
+ hybridScore?: number;
57
+ bm25Score?: number;
58
+ bm25Rank?: number;
59
+ vectorRank?: number;
60
+ rerankerScore?: number;
61
+ rerankerRank?: number;
62
+ symbolBoost?: number;
63
+ symbolBoostSources?: string[];
64
+ scoreRaw?: number;
65
+ };
66
+ }
67
+ export interface SearchCodeResult {
68
+ success: boolean;
69
+ query?: string;
70
+ searchType?: string;
71
+ intentionResults?: number;
72
+ vectorResults?: number;
73
+ provider: string;
74
+ scope?: any;
75
+ reranker?: string;
76
+ hybrid?: {
77
+ enabled: boolean;
78
+ bm25Enabled: boolean;
79
+ fused?: boolean;
80
+ bm25Candidates?: number;
81
+ };
82
+ symbolBoost?: {
83
+ enabled: boolean;
84
+ boosted: boolean;
85
+ };
86
+ results: SearchResult[];
87
+ error?: string;
88
+ message?: string;
89
+ suggestion?: string;
90
+ }
91
+ export interface GetChunkResult {
92
+ success: boolean;
93
+ code?: string;
94
+ error?: string;
95
+ }
96
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,63 @@
1
+ export interface DatabaseChunk {
2
+ id: string;
3
+ file_path: string;
4
+ symbol: string;
5
+ sha: string;
6
+ lang: string;
7
+ chunk_type: string;
8
+ embedding: Buffer;
9
+ embedding_provider: string;
10
+ embedding_dimensions: number;
11
+ codevault_tags?: string;
12
+ codevault_intent?: string;
13
+ codevault_description?: string;
14
+ doc_comments?: string;
15
+ variables_used?: string;
16
+ context_info?: string;
17
+ created_at?: string;
18
+ updated_at?: string;
19
+ }
20
+ export declare class Database {
21
+ private db;
22
+ private run;
23
+ private get;
24
+ private all;
25
+ constructor(dbPath: string);
26
+ initialize(dimensions: number): Promise<void>;
27
+ insertChunk(params: {
28
+ id: string;
29
+ file_path: string;
30
+ symbol: string;
31
+ sha: string;
32
+ lang: string;
33
+ chunk_type: string;
34
+ embedding: number[];
35
+ embedding_provider: string;
36
+ embedding_dimensions: number;
37
+ codevault_tags: string[];
38
+ codevault_intent: string | null;
39
+ codevault_description: string | null;
40
+ doc_comments: string | null;
41
+ variables_used: any[];
42
+ context_info: any;
43
+ }): Promise<void>;
44
+ deleteChunks(chunkIds: string[]): Promise<void>;
45
+ getChunks(providerName: string, dimensions: number): Promise<DatabaseChunk[]>;
46
+ getExistingDimensions(): Promise<Array<{
47
+ embedding_provider: string;
48
+ embedding_dimensions: number;
49
+ }>>;
50
+ recordIntention(normalizedQuery: string, originalQuery: string, targetSha: string, confidence: number): Promise<void>;
51
+ searchByIntention(normalizedQuery: string): Promise<any>;
52
+ recordQueryPattern(pattern: string): Promise<void>;
53
+ getOverviewChunks(limit: number): Promise<Array<{
54
+ id: string;
55
+ file_path: string;
56
+ symbol: string;
57
+ sha: string;
58
+ lang: string;
59
+ }>>;
60
+ close(): void;
61
+ }
62
+ export declare function initDatabase(dimensions: number, basePath?: string): Promise<void>;
63
+ //# sourceMappingURL=db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.d.ts","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,205 @@
1
+ import sqlite3 from 'sqlite3';
2
+ import { promisify } from 'util';
3
+ import fs from 'fs';
4
+ import path from 'path';
5
+ export class Database {
6
+ db;
7
+ run;
8
+ get;
9
+ all;
10
+ constructor(dbPath) {
11
+ this.db = new sqlite3.Database(dbPath);
12
+ this.run = promisify(this.db.run.bind(this.db));
13
+ this.get = promisify(this.db.get.bind(this.db));
14
+ this.all = promisify(this.db.all.bind(this.db));
15
+ }
16
+ async initialize(dimensions) {
17
+ await this.run(`
18
+ CREATE TABLE IF NOT EXISTS code_chunks (
19
+ id TEXT PRIMARY KEY,
20
+ file_path TEXT NOT NULL,
21
+ symbol TEXT NOT NULL,
22
+ sha TEXT NOT NULL,
23
+ lang TEXT NOT NULL,
24
+ chunk_type TEXT DEFAULT 'function',
25
+ embedding BLOB,
26
+ embedding_provider TEXT,
27
+ embedding_dimensions INTEGER,
28
+ codevault_tags TEXT,
29
+ codevault_intent TEXT,
30
+ codevault_description TEXT,
31
+ doc_comments TEXT,
32
+ variables_used TEXT,
33
+ context_info TEXT,
34
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
35
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
36
+ )
37
+ `);
38
+ await this.run(`
39
+ CREATE TABLE IF NOT EXISTS intention_cache (
40
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
41
+ query_normalized TEXT NOT NULL,
42
+ original_query TEXT NOT NULL,
43
+ target_sha TEXT NOT NULL,
44
+ confidence REAL DEFAULT 1.0,
45
+ usage_count INTEGER DEFAULT 1,
46
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
47
+ last_used DATETIME DEFAULT CURRENT_TIMESTAMP
48
+ )
49
+ `);
50
+ await this.run(`
51
+ CREATE TABLE IF NOT EXISTS query_patterns (
52
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
53
+ pattern TEXT NOT NULL UNIQUE,
54
+ frequency INTEGER DEFAULT 1,
55
+ typical_results TEXT,
56
+ created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
57
+ updated_at DATETIME DEFAULT CURRENT_TIMESTAMP
58
+ )
59
+ `);
60
+ const indexes = [
61
+ 'CREATE INDEX IF NOT EXISTS idx_file_path ON code_chunks(file_path)',
62
+ 'CREATE INDEX IF NOT EXISTS idx_symbol ON code_chunks(symbol)',
63
+ 'CREATE INDEX IF NOT EXISTS idx_lang ON code_chunks(lang)',
64
+ 'CREATE INDEX IF NOT EXISTS idx_provider ON code_chunks(embedding_provider)',
65
+ 'CREATE INDEX IF NOT EXISTS idx_chunk_type ON code_chunks(chunk_type)',
66
+ 'CREATE INDEX IF NOT EXISTS idx_codevault_tags ON code_chunks(codevault_tags)',
67
+ 'CREATE INDEX IF NOT EXISTS idx_codevault_intent ON code_chunks(codevault_intent)',
68
+ 'CREATE INDEX IF NOT EXISTS idx_lang_provider ON code_chunks(lang, embedding_provider, embedding_dimensions)',
69
+ 'CREATE INDEX IF NOT EXISTS idx_query_normalized ON intention_cache(query_normalized)',
70
+ 'CREATE INDEX IF NOT EXISTS idx_target_sha ON intention_cache(target_sha)',
71
+ 'CREATE INDEX IF NOT EXISTS idx_usage_count ON intention_cache(usage_count DESC)',
72
+ 'CREATE INDEX IF NOT EXISTS idx_pattern_frequency ON query_patterns(frequency DESC)'
73
+ ];
74
+ for (const sql of indexes) {
75
+ await this.run(sql);
76
+ }
77
+ }
78
+ async insertChunk(params) {
79
+ await this.run(`
80
+ INSERT OR REPLACE INTO code_chunks
81
+ (id, file_path, symbol, sha, lang, chunk_type, embedding, embedding_provider, embedding_dimensions,
82
+ codevault_tags, codevault_intent, codevault_description, doc_comments, variables_used, context_info, updated_at)
83
+ VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURRENT_TIMESTAMP)
84
+ `, [
85
+ params.id,
86
+ params.file_path,
87
+ params.symbol,
88
+ params.sha,
89
+ params.lang,
90
+ params.chunk_type,
91
+ Buffer.from(JSON.stringify(params.embedding)),
92
+ params.embedding_provider,
93
+ params.embedding_dimensions,
94
+ JSON.stringify(params.codevault_tags),
95
+ params.codevault_intent,
96
+ params.codevault_description,
97
+ params.doc_comments,
98
+ JSON.stringify(params.variables_used),
99
+ JSON.stringify(params.context_info)
100
+ ]);
101
+ }
102
+ async deleteChunks(chunkIds) {
103
+ if (!Array.isArray(chunkIds) || chunkIds.length === 0) {
104
+ return;
105
+ }
106
+ const placeholders = chunkIds.map(() => '?').join(', ');
107
+ await this.run(`DELETE FROM code_chunks WHERE id IN (${placeholders})`, chunkIds);
108
+ }
109
+ async getChunks(providerName, dimensions) {
110
+ return await this.all(`
111
+ SELECT id, file_path, symbol, sha, lang, chunk_type, embedding,
112
+ codevault_tags, codevault_intent, codevault_description,
113
+ embedding_provider, embedding_dimensions
114
+ FROM code_chunks
115
+ WHERE embedding_provider = ? AND embedding_dimensions = ?
116
+ ORDER BY created_at DESC
117
+ `, [providerName, dimensions]);
118
+ }
119
+ async getExistingDimensions() {
120
+ return await this.all(`
121
+ SELECT DISTINCT embedding_provider, embedding_dimensions
122
+ FROM code_chunks
123
+ LIMIT 10
124
+ `);
125
+ }
126
+ async recordIntention(normalizedQuery, originalQuery, targetSha, confidence) {
127
+ const existing = await this.get(`
128
+ SELECT id, usage_count FROM intention_cache
129
+ WHERE query_normalized = ? AND target_sha = ?
130
+ `, [normalizedQuery, targetSha]);
131
+ if (existing) {
132
+ await this.run(`
133
+ UPDATE intention_cache
134
+ SET usage_count = usage_count + 1,
135
+ confidence = ?,
136
+ last_used = CURRENT_TIMESTAMP
137
+ WHERE id = ?
138
+ `, [confidence, existing.id]);
139
+ }
140
+ else {
141
+ await this.run(`
142
+ INSERT INTO intention_cache
143
+ (query_normalized, original_query, target_sha, confidence)
144
+ VALUES (?, ?, ?, ?)
145
+ `, [normalizedQuery, originalQuery, targetSha, confidence]);
146
+ }
147
+ }
148
+ async searchByIntention(normalizedQuery) {
149
+ return await this.get(`
150
+ SELECT
151
+ i.target_sha,
152
+ i.confidence,
153
+ i.usage_count,
154
+ i.original_query,
155
+ c.file_path,
156
+ c.symbol,
157
+ c.lang,
158
+ c.chunk_type
159
+ FROM intention_cache i
160
+ LEFT JOIN code_chunks c ON i.target_sha = c.sha
161
+ WHERE i.query_normalized = ?
162
+ ORDER BY i.confidence DESC, i.usage_count DESC
163
+ LIMIT 1
164
+ `, [normalizedQuery]);
165
+ }
166
+ async recordQueryPattern(pattern) {
167
+ const existing = await this.get(`
168
+ SELECT id, frequency FROM query_patterns WHERE pattern = ?
169
+ `, [pattern]);
170
+ if (existing) {
171
+ await this.run(`
172
+ UPDATE query_patterns
173
+ SET frequency = frequency + 1, updated_at = CURRENT_TIMESTAMP
174
+ WHERE id = ?
175
+ `, [existing.id]);
176
+ }
177
+ else {
178
+ await this.run(`
179
+ INSERT INTO query_patterns (pattern) VALUES (?)
180
+ `, [pattern]);
181
+ }
182
+ }
183
+ async getOverviewChunks(limit) {
184
+ return await this.all(`
185
+ SELECT id, file_path, symbol, sha, lang
186
+ FROM code_chunks
187
+ ORDER BY file_path, symbol
188
+ LIMIT ?
189
+ `, [limit]);
190
+ }
191
+ close() {
192
+ this.db.close();
193
+ }
194
+ }
195
+ export async function initDatabase(dimensions, basePath = '.') {
196
+ const dbPath = path.join(path.resolve(basePath), '.codevault', 'codevault.db');
197
+ const dbDir = path.dirname(dbPath);
198
+ if (!fs.existsSync(dbDir)) {
199
+ fs.mkdirSync(dbDir, { recursive: true });
200
+ }
201
+ const db = new Database(dbPath);
202
+ await db.initialize(dimensions);
203
+ db.close();
204
+ }
205
+ //# sourceMappingURL=db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"db.js","sourceRoot":"","sources":["../../src/database/db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ export declare function computeFastHash(input: string | Buffer): Promise<string>;
2
+ export interface MerkleEntry {
3
+ shaFile: string;
4
+ chunkShas: string[];
5
+ }
6
+ export type MerkleTree = Record<string, MerkleEntry>;
7
+ export declare function loadMerkle(basePath?: string): MerkleTree;
8
+ export declare function saveMerkle(basePath?: string, merkle?: MerkleTree): void;
9
+ export declare function toPosixPath(relativePath: string | null): string | null;
10
+ export declare function normalizeToProjectPath(basePath?: string, filePath?: string): string | null;
11
+ export declare function removeMerkleEntry(merkle: MerkleTree, relativePath: string): boolean;
12
+ export declare function cloneMerkle(merkle: MerkleTree): MerkleTree;
13
+ //# sourceMappingURL=merkle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkle.d.ts","sourceRoot":"","sources":["../../src/indexer/merkle.ts"],"names":[],"mappings":"AAuBA,wBAAsB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa7E;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAErD,wBAAgB,UAAU,CAAC,QAAQ,SAAM,GAAG,UAAU,CAcrD;AAED,wBAAgB,UAAU,CAAC,QAAQ,SAAM,EAAE,MAAM,GAAE,UAAe,GAAG,IAAI,CAOxE;AAED,wBAAgB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAKtE;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,SAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcvF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAWnF;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,UAAU,CAE1D"}
@@ -0,0 +1,86 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import xxhashFactory from 'xxhash-wasm';
4
+ const MERKLE_DIR = '.codevault';
5
+ const MERKLE_FILENAME = 'merkle.json';
6
+ let hasherPromise = null;
7
+ async function getHasher() {
8
+ if (!hasherPromise) {
9
+ hasherPromise = xxhashFactory().then(factory => factory.h64);
10
+ }
11
+ return hasherPromise;
12
+ }
13
+ function ensureObject(value) {
14
+ if (!value || typeof value !== 'object') {
15
+ return {};
16
+ }
17
+ return value;
18
+ }
19
+ export async function computeFastHash(input) {
20
+ const hasher = await getHasher();
21
+ let normalized;
22
+ if (typeof input === 'string') {
23
+ normalized = input;
24
+ }
25
+ else if (Buffer.isBuffer(input)) {
26
+ normalized = input.toString('utf8');
27
+ }
28
+ else {
29
+ normalized = String(input ?? '');
30
+ }
31
+ const result = hasher(normalized);
32
+ return typeof result === 'bigint' ? result.toString() : String(result);
33
+ }
34
+ export function loadMerkle(basePath = '.') {
35
+ const absolute = path.resolve(basePath);
36
+ const merklePath = path.join(absolute, MERKLE_DIR, MERKLE_FILENAME);
37
+ if (!fs.existsSync(merklePath)) {
38
+ return {};
39
+ }
40
+ try {
41
+ const data = fs.readFileSync(merklePath, 'utf8');
42
+ return ensureObject(JSON.parse(data));
43
+ }
44
+ catch (error) {
45
+ return {};
46
+ }
47
+ }
48
+ export function saveMerkle(basePath = '.', merkle = {}) {
49
+ const absolute = path.resolve(basePath);
50
+ const dirPath = path.join(absolute, MERKLE_DIR);
51
+ const merklePath = path.join(dirPath, MERKLE_FILENAME);
52
+ fs.mkdirSync(dirPath, { recursive: true });
53
+ fs.writeFileSync(merklePath, JSON.stringify(merkle, null, 2));
54
+ }
55
+ export function toPosixPath(relativePath) {
56
+ if (typeof relativePath !== 'string') {
57
+ return null;
58
+ }
59
+ return relativePath.split(path.sep).join('/');
60
+ }
61
+ export function normalizeToProjectPath(basePath = '.', filePath) {
62
+ if (typeof filePath !== 'string' || filePath.length === 0) {
63
+ return null;
64
+ }
65
+ const absoluteBase = path.resolve(basePath);
66
+ const absoluteFile = path.isAbsolute(filePath) ? filePath : path.join(absoluteBase, filePath);
67
+ const relative = path.relative(absoluteBase, absoluteFile);
68
+ if (!relative || relative.startsWith('..')) {
69
+ return null;
70
+ }
71
+ return toPosixPath(relative);
72
+ }
73
+ export function removeMerkleEntry(merkle, relativePath) {
74
+ if (!merkle || typeof merkle !== 'object') {
75
+ return false;
76
+ }
77
+ if (Object.prototype.hasOwnProperty.call(merkle, relativePath)) {
78
+ delete merkle[relativePath];
79
+ return true;
80
+ }
81
+ return false;
82
+ }
83
+ export function cloneMerkle(merkle) {
84
+ return JSON.parse(JSON.stringify(ensureObject(merkle)));
85
+ }
86
+ //# sourceMappingURL=merkle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merkle.js","sourceRoot":"","sources":["../../src/indexer/merkle.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ import type { EmbeddingProvider } from '../providers/base.js';
2
+ export interface UpdateIndexOptions {
3
+ repoPath?: string;
4
+ provider?: string;
5
+ changedFiles?: string[];
6
+ deletedFiles?: string[];
7
+ onProgress?: ((event: any) => void) | null;
8
+ embeddingProvider?: EmbeddingProvider | null;
9
+ encrypt?: string;
10
+ }
11
+ export interface UpdateIndexResult {
12
+ success: boolean;
13
+ processedChunks: number;
14
+ totalChunks: number;
15
+ provider: string;
16
+ errors: any[];
17
+ }
18
+ export declare function updateIndex({ repoPath, provider, changedFiles, deletedFiles, onProgress, embeddingProvider, encrypt }?: UpdateIndexOptions): Promise<UpdateIndexResult>;
19
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/indexer/update.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAmB9D,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3C,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAC;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,GAAG,EAAE,CAAC;CACf;AAED,wBAAsB,WAAW,CAAC,EAChC,QAAc,EACd,QAAiB,EACjB,YAAiB,EACjB,YAAiB,EACjB,UAAiB,EACjB,iBAAwB,EACxB,OAAmB,EACpB,GAAE,kBAAuB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAwBtD"}
@@ -0,0 +1,40 @@
1
+ import path from 'path';
2
+ import { normalizeToProjectPath } from './merkle.js';
3
+ import { indexProject } from '../core/indexer.js';
4
+ function normalizeList(basePath, values = []) {
5
+ const normalized = new Set();
6
+ if (!Array.isArray(values)) {
7
+ return [];
8
+ }
9
+ for (const value of values) {
10
+ const relative = normalizeToProjectPath(basePath, value);
11
+ if (relative) {
12
+ normalized.add(relative);
13
+ }
14
+ }
15
+ return Array.from(normalized);
16
+ }
17
+ export async function updateIndex({ repoPath = '.', provider = 'auto', changedFiles = [], deletedFiles = [], onProgress = null, embeddingProvider = null, encrypt = undefined } = {}) {
18
+ const root = path.resolve(repoPath);
19
+ const normalizedChanged = normalizeList(root, changedFiles);
20
+ const normalizedDeleted = normalizeList(root, deletedFiles);
21
+ if (normalizedChanged.length === 0 && normalizedDeleted.length === 0) {
22
+ return {
23
+ success: true,
24
+ processedChunks: 0,
25
+ totalChunks: 0,
26
+ provider,
27
+ errors: []
28
+ };
29
+ }
30
+ return indexProject({
31
+ repoPath: root,
32
+ provider,
33
+ onProgress,
34
+ changedFiles: normalizedChanged,
35
+ deletedFiles: normalizedDeleted,
36
+ embeddingProviderOverride: embeddingProvider,
37
+ encryptMode: encrypt
38
+ });
39
+ }
40
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/indexer/update.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGlD,SAAS,aAAa,CAAC,QAAgB,EAAE,SAAmB,EAAE;IAC5D,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IAErC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,sBAAsB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACzD,IAAI,QAAQ,EAAE,CAAC;YACb,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAChC,CAAC;AAoBD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,EAChC,QAAQ,GAAG,GAAG,EACd,QAAQ,GAAG,MAAM,EACjB,YAAY,GAAG,EAAE,EACjB,YAAY,GAAG,EAAE,EACjB,UAAU,GAAG,IAAI,EACjB,iBAAiB,GAAG,IAAI,EACxB,OAAO,GAAG,SAAS,KACG,EAAE;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpC,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAE5D,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO;YACL,OAAO,EAAE,IAAI;YACb,eAAe,EAAE,CAAC;YAClB,WAAW,EAAE,CAAC;YACd,QAAQ;YACR,MAAM,EAAE,EAAE;SACX,CAAC;IACJ,CAAC;IAED,OAAO,YAAY,CAAC;QAClB,QAAQ,EAAE,IAAI;QACd,QAAQ;QACR,UAAU;QACV,YAAY,EAAE,iBAAiB;QAC/B,YAAY,EAAE,iBAAiB;QAC/B,yBAAyB,EAAE,iBAAiB;QAC5C,WAAW,EAAE,OAAO;KACrB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,21 @@
1
+ import chokidar from 'chokidar';
2
+ interface WatchOptions {
3
+ repoPath?: string;
4
+ provider?: string;
5
+ debounceMs?: number;
6
+ onBatch?: ((event: {
7
+ changed: string[];
8
+ deleted: string[];
9
+ }) => void) | null;
10
+ logger?: Console;
11
+ encrypt?: string;
12
+ }
13
+ interface WatchController {
14
+ watcher: ReturnType<typeof chokidar.watch>;
15
+ ready: Promise<void>;
16
+ close: () => Promise<void>;
17
+ flush: () => Promise<void>;
18
+ }
19
+ export declare function startWatch({ repoPath, provider, debounceMs, onBatch, logger, encrypt }?: WatchOptions): WatchController;
20
+ export {};
21
+ //# sourceMappingURL=watch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/indexer/watch.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAmBhC,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAAC,OAAO,EAAE,MAAM,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC;IAC7E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC3C,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACrB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC3B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAc,EACd,QAAiB,EACjB,UAAgC,EAChC,OAAc,EACd,MAAgB,EAChB,OAAmB,EACpB,GAAE,YAAiB,GAAG,eAAe,CAoNrC"}