codebase-context 1.6.2 → 1.8.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 (189) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +417 -282
  3. package/dist/analyzers/angular/index.d.ts.map +1 -1
  4. package/dist/analyzers/angular/index.js +91 -40
  5. package/dist/analyzers/angular/index.js.map +1 -1
  6. package/dist/analyzers/generic/index.d.ts +1 -0
  7. package/dist/analyzers/generic/index.d.ts.map +1 -1
  8. package/dist/analyzers/generic/index.js +94 -14
  9. package/dist/analyzers/generic/index.js.map +1 -1
  10. package/dist/cli-formatters.d.ts +47 -0
  11. package/dist/cli-formatters.d.ts.map +1 -0
  12. package/dist/cli-formatters.js +803 -0
  13. package/dist/cli-formatters.js.map +1 -0
  14. package/dist/cli-memory.d.ts +5 -0
  15. package/dist/cli-memory.d.ts.map +1 -0
  16. package/dist/cli-memory.js +218 -0
  17. package/dist/cli-memory.js.map +1 -0
  18. package/dist/cli.d.ts +3 -1
  19. package/dist/cli.d.ts.map +1 -1
  20. package/dist/cli.js +317 -88
  21. package/dist/cli.js.map +1 -1
  22. package/dist/constants/codebase-context.d.ts +13 -0
  23. package/dist/constants/codebase-context.d.ts.map +1 -1
  24. package/dist/constants/codebase-context.js +13 -0
  25. package/dist/constants/codebase-context.js.map +1 -1
  26. package/dist/core/auto-refresh.d.ts +16 -0
  27. package/dist/core/auto-refresh.d.ts.map +1 -0
  28. package/dist/core/auto-refresh.js +25 -0
  29. package/dist/core/auto-refresh.js.map +1 -0
  30. package/dist/core/file-watcher.d.ts +15 -0
  31. package/dist/core/file-watcher.d.ts.map +1 -0
  32. package/dist/core/file-watcher.js +59 -0
  33. package/dist/core/file-watcher.js.map +1 -0
  34. package/dist/core/index-meta.d.ts +27 -0
  35. package/dist/core/index-meta.d.ts.map +1 -0
  36. package/dist/core/index-meta.js +212 -0
  37. package/dist/core/index-meta.js.map +1 -0
  38. package/dist/core/indexer.d.ts.map +1 -1
  39. package/dist/core/indexer.js +324 -26
  40. package/dist/core/indexer.js.map +1 -1
  41. package/dist/core/reranker.d.ts.map +1 -1
  42. package/dist/core/reranker.js +3 -0
  43. package/dist/core/reranker.js.map +1 -1
  44. package/dist/core/search-quality.js +2 -2
  45. package/dist/core/search-quality.js.map +1 -1
  46. package/dist/core/search.d.ts +1 -0
  47. package/dist/core/search.d.ts.map +1 -1
  48. package/dist/core/search.js +79 -11
  49. package/dist/core/search.js.map +1 -1
  50. package/dist/core/symbol-references.d.ts +20 -0
  51. package/dist/core/symbol-references.d.ts.map +1 -0
  52. package/dist/core/symbol-references.js +186 -0
  53. package/dist/core/symbol-references.js.map +1 -0
  54. package/dist/embeddings/index.d.ts +8 -0
  55. package/dist/embeddings/index.d.ts.map +1 -1
  56. package/dist/embeddings/index.js +17 -2
  57. package/dist/embeddings/index.js.map +1 -1
  58. package/dist/embeddings/openai.d.ts +1 -1
  59. package/dist/embeddings/openai.d.ts.map +1 -1
  60. package/dist/embeddings/openai.js +3 -1
  61. package/dist/embeddings/openai.js.map +1 -1
  62. package/dist/embeddings/transformers.d.ts +6 -0
  63. package/dist/embeddings/transformers.d.ts.map +1 -1
  64. package/dist/embeddings/transformers.js +12 -5
  65. package/dist/embeddings/transformers.js.map +1 -1
  66. package/dist/embeddings/types.d.ts +1 -0
  67. package/dist/embeddings/types.d.ts.map +1 -1
  68. package/dist/embeddings/types.js +7 -1
  69. package/dist/embeddings/types.js.map +1 -1
  70. package/dist/eval/harness.d.ts +5 -0
  71. package/dist/eval/harness.d.ts.map +1 -0
  72. package/dist/eval/harness.js +153 -0
  73. package/dist/eval/harness.js.map +1 -0
  74. package/dist/eval/types.d.ts +59 -0
  75. package/dist/eval/types.d.ts.map +1 -0
  76. package/dist/eval/types.js +2 -0
  77. package/dist/eval/types.js.map +1 -0
  78. package/dist/grammars/manifest.d.ts +26 -0
  79. package/dist/grammars/manifest.d.ts.map +1 -0
  80. package/dist/grammars/manifest.js +64 -0
  81. package/dist/grammars/manifest.js.map +1 -0
  82. package/dist/index.d.ts +16 -2
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +181 -1300
  85. package/dist/index.js.map +1 -1
  86. package/dist/patterns/semantics.d.ts +2 -1
  87. package/dist/patterns/semantics.d.ts.map +1 -1
  88. package/dist/patterns/semantics.js +0 -2
  89. package/dist/patterns/semantics.js.map +1 -1
  90. package/dist/preflight/evidence-lock.d.ts +6 -0
  91. package/dist/preflight/evidence-lock.d.ts.map +1 -1
  92. package/dist/preflight/evidence-lock.js +33 -1
  93. package/dist/preflight/evidence-lock.js.map +1 -1
  94. package/dist/storage/index.d.ts +4 -1
  95. package/dist/storage/index.d.ts.map +1 -1
  96. package/dist/storage/index.js +2 -2
  97. package/dist/storage/index.js.map +1 -1
  98. package/dist/storage/lancedb.d.ts +11 -1
  99. package/dist/storage/lancedb.d.ts.map +1 -1
  100. package/dist/storage/lancedb.js +45 -11
  101. package/dist/storage/lancedb.js.map +1 -1
  102. package/dist/storage/types.d.ts +4 -1
  103. package/dist/storage/types.d.ts.map +1 -1
  104. package/dist/storage/types.js.map +1 -1
  105. package/dist/tools/detect-circular-dependencies.d.ts +5 -0
  106. package/dist/tools/detect-circular-dependencies.d.ts.map +1 -0
  107. package/dist/tools/detect-circular-dependencies.js +117 -0
  108. package/dist/tools/detect-circular-dependencies.js.map +1 -0
  109. package/dist/tools/get-codebase-metadata.d.ts +5 -0
  110. package/dist/tools/get-codebase-metadata.d.ts.map +1 -0
  111. package/dist/tools/get-codebase-metadata.js +53 -0
  112. package/dist/tools/get-codebase-metadata.js.map +1 -0
  113. package/dist/tools/get-indexing-status.d.ts +5 -0
  114. package/dist/tools/get-indexing-status.d.ts.map +1 -0
  115. package/dist/tools/get-indexing-status.js +44 -0
  116. package/dist/tools/get-indexing-status.js.map +1 -0
  117. package/dist/tools/get-memory.d.ts +5 -0
  118. package/dist/tools/get-memory.d.ts.map +1 -0
  119. package/dist/tools/get-memory.js +89 -0
  120. package/dist/tools/get-memory.js.map +1 -0
  121. package/dist/tools/get-style-guide.d.ts +5 -0
  122. package/dist/tools/get-style-guide.d.ts.map +1 -0
  123. package/dist/tools/get-style-guide.js +151 -0
  124. package/dist/tools/get-style-guide.js.map +1 -0
  125. package/dist/tools/get-symbol-references.d.ts +5 -0
  126. package/dist/tools/get-symbol-references.d.ts.map +1 -0
  127. package/dist/tools/get-symbol-references.js +70 -0
  128. package/dist/tools/get-symbol-references.js.map +1 -0
  129. package/dist/tools/get-team-patterns.d.ts +5 -0
  130. package/dist/tools/get-team-patterns.d.ts.map +1 -0
  131. package/dist/tools/get-team-patterns.js +147 -0
  132. package/dist/tools/get-team-patterns.js.map +1 -0
  133. package/dist/tools/index.d.ts +6 -0
  134. package/dist/tools/index.d.ts.map +1 -0
  135. package/dist/tools/index.js +41 -0
  136. package/dist/tools/index.js.map +1 -0
  137. package/dist/tools/refresh-index.d.ts +5 -0
  138. package/dist/tools/refresh-index.d.ts.map +1 -0
  139. package/dist/tools/refresh-index.js +40 -0
  140. package/dist/tools/refresh-index.js.map +1 -0
  141. package/dist/tools/remember.d.ts +5 -0
  142. package/dist/tools/remember.d.ts.map +1 -0
  143. package/dist/tools/remember.js +101 -0
  144. package/dist/tools/remember.js.map +1 -0
  145. package/dist/tools/search-codebase.d.ts +5 -0
  146. package/dist/tools/search-codebase.d.ts.map +1 -0
  147. package/dist/tools/search-codebase.js +745 -0
  148. package/dist/tools/search-codebase.js.map +1 -0
  149. package/dist/tools/types.d.ts +223 -0
  150. package/dist/tools/types.d.ts.map +1 -0
  151. package/dist/tools/types.js +2 -0
  152. package/dist/tools/types.js.map +1 -0
  153. package/dist/types/index.d.ts +79 -11
  154. package/dist/types/index.d.ts.map +1 -1
  155. package/dist/types/index.js +0 -1
  156. package/dist/types/index.js.map +1 -1
  157. package/dist/utils/ast-chunker.d.ts +71 -0
  158. package/dist/utils/ast-chunker.d.ts.map +1 -0
  159. package/dist/utils/ast-chunker.js +453 -0
  160. package/dist/utils/ast-chunker.js.map +1 -0
  161. package/dist/utils/chunking.d.ts.map +1 -1
  162. package/dist/utils/chunking.js +10 -3
  163. package/dist/utils/chunking.js.map +1 -1
  164. package/dist/utils/language-detection.d.ts.map +1 -1
  165. package/dist/utils/language-detection.js +26 -1
  166. package/dist/utils/language-detection.js.map +1 -1
  167. package/dist/utils/tree-sitter.d.ts +28 -0
  168. package/dist/utils/tree-sitter.d.ts.map +1 -0
  169. package/dist/utils/tree-sitter.js +422 -0
  170. package/dist/utils/tree-sitter.js.map +1 -0
  171. package/dist/utils/usage-tracker.d.ts +30 -40
  172. package/dist/utils/usage-tracker.d.ts.map +1 -1
  173. package/dist/utils/usage-tracker.js +66 -8
  174. package/dist/utils/usage-tracker.js.map +1 -1
  175. package/docs/capabilities.md +183 -92
  176. package/docs/cli.md +196 -0
  177. package/grammars/.gitkeep +0 -0
  178. package/grammars/tree-sitter-c.wasm +0 -0
  179. package/grammars/tree-sitter-c_sharp.wasm +0 -0
  180. package/grammars/tree-sitter-cpp.wasm +0 -0
  181. package/grammars/tree-sitter-go.wasm +0 -0
  182. package/grammars/tree-sitter-java.wasm +0 -0
  183. package/grammars/tree-sitter-javascript.wasm +0 -0
  184. package/grammars/tree-sitter-kotlin.wasm +0 -0
  185. package/grammars/tree-sitter-python.wasm +0 -0
  186. package/grammars/tree-sitter-rust.wasm +0 -0
  187. package/grammars/tree-sitter-tsx.wasm +0 -0
  188. package/grammars/tree-sitter-typescript.wasm +0 -0
  189. package/package.json +153 -157
@@ -0,0 +1,186 @@
1
+ import { promises as fs } from 'fs';
2
+ import path from 'path';
3
+ import { CODEBASE_CONTEXT_DIRNAME, KEYWORD_INDEX_FILENAME } from '../constants/codebase-context.js';
4
+ import { IndexCorruptedError } from '../errors/index.js';
5
+ import { detectLanguage } from '../utils/language-detection.js';
6
+ import { findIdentifierOccurrences } from '../utils/tree-sitter.js';
7
+ function escapeRegex(value) {
8
+ return value.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
9
+ }
10
+ function getUsageFile(rootPath, chunk) {
11
+ if (typeof chunk.relativePath === 'string' && chunk.relativePath.trim()) {
12
+ return chunk.relativePath.replace(/\\/g, '/');
13
+ }
14
+ if (typeof chunk.filePath === 'string' && chunk.filePath.trim()) {
15
+ const relativePath = path.relative(rootPath, chunk.filePath);
16
+ if (!relativePath || relativePath.startsWith('..')) {
17
+ return path.basename(chunk.filePath);
18
+ }
19
+ return relativePath.replace(/\\/g, '/');
20
+ }
21
+ return 'unknown';
22
+ }
23
+ function buildPreview(content, lineOffset) {
24
+ const lines = content.split('\n');
25
+ const start = Math.max(0, lineOffset - 1);
26
+ const end = Math.min(lines.length, lineOffset + 2);
27
+ const previewLines = lines.slice(start, end);
28
+ return previewLines.join('\n').trim();
29
+ }
30
+ function buildPreviewFromFileLines(lines, line) {
31
+ const start = Math.max(0, line - 2);
32
+ const end = Math.min(lines.length, line + 1);
33
+ return lines.slice(start, end).join('\n').trim();
34
+ }
35
+ function resolveAbsoluteChunkPath(rootPath, chunk) {
36
+ const resolvedRoot = path.resolve(rootPath);
37
+ const isWithinRoot = (candidate) => {
38
+ const resolvedCandidate = path.resolve(candidate);
39
+ const relative = path.relative(resolvedRoot, resolvedCandidate);
40
+ return Boolean(relative) && !relative.startsWith('..') && !path.isAbsolute(relative);
41
+ };
42
+ if (typeof chunk.filePath === 'string' && chunk.filePath.trim()) {
43
+ const raw = chunk.filePath.trim();
44
+ if (path.isAbsolute(raw)) {
45
+ return isWithinRoot(raw) ? raw : null;
46
+ }
47
+ const resolved = path.resolve(resolvedRoot, raw);
48
+ return isWithinRoot(resolved) ? resolved : null;
49
+ }
50
+ if (typeof chunk.relativePath === 'string' && chunk.relativePath.trim()) {
51
+ const resolved = path.resolve(resolvedRoot, chunk.relativePath.trim());
52
+ return isWithinRoot(resolved) ? resolved : null;
53
+ }
54
+ return null;
55
+ }
56
+ async function fileExists(targetPath) {
57
+ try {
58
+ const stat = await fs.stat(targetPath);
59
+ return stat.isFile();
60
+ }
61
+ catch {
62
+ return false;
63
+ }
64
+ }
65
+ export async function findSymbolReferences(rootPath, symbol, limit = 10) {
66
+ const normalizedSymbol = symbol.trim();
67
+ const normalizedLimit = Number.isFinite(limit) && limit > 0 ? Math.floor(limit) : 10;
68
+ if (!normalizedSymbol) {
69
+ return {
70
+ status: 'error',
71
+ message: 'Symbol is required'
72
+ };
73
+ }
74
+ const indexPath = path.join(rootPath, CODEBASE_CONTEXT_DIRNAME, KEYWORD_INDEX_FILENAME);
75
+ let chunksRaw;
76
+ try {
77
+ const content = await fs.readFile(indexPath, 'utf-8');
78
+ chunksRaw = JSON.parse(content);
79
+ }
80
+ catch (error) {
81
+ throw new IndexCorruptedError(`Keyword index missing or unreadable (rebuild required): ${error instanceof Error ? error.message : String(error)}`);
82
+ }
83
+ if (Array.isArray(chunksRaw)) {
84
+ throw new IndexCorruptedError('Legacy keyword index format detected (missing header). Rebuild required.');
85
+ }
86
+ const chunks = chunksRaw !== null &&
87
+ typeof chunksRaw === 'object' &&
88
+ 'chunks' in chunksRaw &&
89
+ Array.isArray(chunksRaw.chunks)
90
+ ? chunksRaw.chunks
91
+ : null;
92
+ if (!chunks) {
93
+ throw new IndexCorruptedError('Keyword index corrupted: expected { header, chunks }');
94
+ }
95
+ const usages = [];
96
+ let usageCount = 0;
97
+ const escapedSymbol = escapeRegex(normalizedSymbol);
98
+ const prefilter = new RegExp(`\\b${escapedSymbol}\\b`);
99
+ const matcher = new RegExp(`\\b${escapedSymbol}\\b`, 'g');
100
+ // Prefilter candidate files from the keyword index. We do not trust chunk contents for
101
+ // exact reference counting when Tree-sitter is available; chunks only guide which files to scan.
102
+ const chunksByFile = new Map();
103
+ for (const chunkRaw of chunks) {
104
+ const chunk = chunkRaw;
105
+ if (typeof chunk.content !== 'string')
106
+ continue;
107
+ if (!prefilter.test(chunk.content))
108
+ continue;
109
+ const relPath = getUsageFile(rootPath, chunk);
110
+ const absPath = resolveAbsoluteChunkPath(rootPath, chunk);
111
+ const entry = chunksByFile.get(relPath);
112
+ if (entry) {
113
+ entry.chunks.push(chunk);
114
+ // Prefer a real absolute path when available
115
+ if (!entry.absPath && absPath) {
116
+ entry.absPath = absPath;
117
+ }
118
+ }
119
+ else {
120
+ chunksByFile.set(relPath, { relPath, absPath, chunks: [chunk] });
121
+ }
122
+ }
123
+ for (const entry of chunksByFile.values()) {
124
+ const relPath = entry.relPath;
125
+ const absPath = entry.absPath;
126
+ // Preferred: Tree-sitter identifier walk on the real file content.
127
+ if (absPath && (await fileExists(absPath))) {
128
+ try {
129
+ const raw = await fs.readFile(absPath, 'utf-8');
130
+ const content = raw.replace(/\r\n/g, '\n');
131
+ const language = detectLanguage(absPath);
132
+ const occurrences = await findIdentifierOccurrences(content, language, normalizedSymbol);
133
+ if (occurrences) {
134
+ usageCount += occurrences.length;
135
+ if (usages.length < normalizedLimit && occurrences.length > 0) {
136
+ const lines = content.split('\n');
137
+ for (const occ of occurrences) {
138
+ if (usages.length >= normalizedLimit)
139
+ break;
140
+ usages.push({
141
+ file: relPath,
142
+ line: occ.line,
143
+ preview: buildPreviewFromFileLines(lines, occ.line)
144
+ });
145
+ }
146
+ }
147
+ continue;
148
+ }
149
+ }
150
+ catch {
151
+ // Fall through to chunk-regex fallback (missing grammar, parse failure, etc.)
152
+ }
153
+ }
154
+ // Fallback: regex scan inside the matched chunks (legacy behavior).
155
+ for (const chunk of entry.chunks) {
156
+ if (typeof chunk.content !== 'string')
157
+ continue;
158
+ const chunkContent = chunk.content;
159
+ const startLine = typeof chunk.startLine === 'number' ? chunk.startLine : 1;
160
+ matcher.lastIndex = 0;
161
+ let match;
162
+ while ((match = matcher.exec(chunkContent)) !== null) {
163
+ usageCount += 1;
164
+ if (usages.length >= normalizedLimit) {
165
+ continue;
166
+ }
167
+ const prefix = chunkContent.slice(0, match.index);
168
+ const lineOffset = prefix.split('\n').length - 1;
169
+ usages.push({
170
+ file: relPath,
171
+ line: startLine + lineOffset,
172
+ preview: buildPreview(chunkContent, lineOffset)
173
+ });
174
+ }
175
+ }
176
+ }
177
+ return {
178
+ status: 'success',
179
+ symbol: normalizedSymbol,
180
+ usageCount,
181
+ usages,
182
+ confidence: 'syntactic',
183
+ isComplete: usageCount < normalizedLimit
184
+ };
185
+ }
186
+ //# sourceMappingURL=symbol-references.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-references.js","sourceRoot":"","sources":["../../src/core/symbol-references.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,13 @@
1
1
  export * from './types.js';
2
2
  export * from './transformers.js';
3
3
  import { EmbeddingProvider, EmbeddingConfig } from './types.js';
4
+ /**
5
+ * Returns expected embedding dimensions for a given config without initializing any provider.
6
+ * Used for LanceDB dimension validation before committing to an incremental update.
7
+ *
8
+ * Looks up dimensions from MODEL_CONFIGS (the authoritative source shared with the provider
9
+ * implementation) so new models are automatically handled without updating this function.
10
+ */
11
+ export declare function getConfiguredDimensions(config?: Partial<EmbeddingConfig>): number;
4
12
  export declare function getEmbeddingProvider(config?: Partial<EmbeddingConfig>): Promise<EmbeddingProvider>;
5
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAA4B,MAAM,YAAY,CAAC;AAM1F,wBAAsB,oBAAoB,CACxC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAmC5B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAElC,OAAO,EACL,iBAAiB,EACjB,eAAe,EAIhB,MAAM,YAAY,CAAC;AAGpB;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GAAG,MAAM,CAOrF;AAKD,wBAAsB,oBAAoB,CACxC,MAAM,GAAE,OAAO,CAAC,eAAe,CAAM,GACpC,OAAO,CAAC,iBAAiB,CAAC,CAmC5B"}
@@ -1,7 +1,22 @@
1
1
  export * from './types.js';
2
2
  export * from './transformers.js';
3
- import { DEFAULT_EMBEDDING_CONFIG } from './types.js';
4
- import { TransformersEmbeddingProvider } from './transformers.js';
3
+ import { DEFAULT_EMBEDDING_CONFIG, DEFAULT_MODEL, parseEmbeddingProviderName } from './types.js';
4
+ import { TransformersEmbeddingProvider, MODEL_CONFIGS } from './transformers.js';
5
+ /**
6
+ * Returns expected embedding dimensions for a given config without initializing any provider.
7
+ * Used for LanceDB dimension validation before committing to an incremental update.
8
+ *
9
+ * Looks up dimensions from MODEL_CONFIGS (the authoritative source shared with the provider
10
+ * implementation) so new models are automatically handled without updating this function.
11
+ */
12
+ export function getConfiguredDimensions(config = {}) {
13
+ const provider = config.provider ?? parseEmbeddingProviderName(process.env.EMBEDDING_PROVIDER) ?? 'transformers';
14
+ const model = config.model ?? process.env.EMBEDDING_MODEL ?? DEFAULT_MODEL;
15
+ if (provider === 'openai')
16
+ return model.includes('large') ? 3072 : 1536; // text-embedding-3-large: 3072, all others: 1536
17
+ // Look up from the same MODEL_CONFIGS the provider uses — avoids stale hardcoded guesses
18
+ return MODEL_CONFIGS[model]?.dimensions ?? 384;
19
+ }
5
20
  let cachedProvider = null;
6
21
  let cachedProviderType = null;
7
22
  export async function getEmbeddingProvider(config = {}) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAAsC,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAC1F,OAAO,EAAE,6BAA6B,EAAE,MAAM,mBAAmB,CAAC;AAElE,IAAI,cAAc,GAA6B,IAAI,CAAC;AACpD,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAmC,EAAE;IAErC,MAAM,YAAY,GAAG,EAAE,GAAG,wBAAwB,EAAE,GAAG,MAAM,EAAE,CAAC;IAChE,MAAM,WAAW,GAAG,GAAG,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;IAErE,IAAI,cAAc,IAAI,kBAAkB,KAAK,WAAW,EAAE,CAAC;QACzD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAC1C,YAAY,CAAC,KAAK,IAAI,wBAAwB,EAC9C,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,WAAW,CACzB,CAAC;QACF,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,cAAc,GAAG,QAAQ,CAAC;QAC1B,kBAAkB,GAAG,WAAW,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,6BAA6B,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC5B,cAAc,GAAG,QAAQ,CAAC;IAC1B,kBAAkB,GAAG,WAAW,CAAC;IAEjC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,mBAAmB,CAAC;AAElC,OAAO,EAGL,wBAAwB,EACxB,aAAa,EACb,0BAA0B,EAC3B,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,6BAA6B,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEjF;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAmC,EAAE;IAC3E,MAAM,QAAQ,GACZ,MAAM,CAAC,QAAQ,IAAI,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,cAAc,CAAC;IAClG,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,aAAa,CAAC;IAC3E,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,iDAAiD;IAC1H,yFAAyF;IACzF,OAAO,aAAa,CAAC,KAAK,CAAC,EAAE,UAAU,IAAI,GAAG,CAAC;AACjD,CAAC;AAED,IAAI,cAAc,GAA6B,IAAI,CAAC;AACpD,IAAI,kBAAkB,GAAkB,IAAI,CAAC;AAE7C,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,SAAmC,EAAE;IAErC,MAAM,YAAY,GAAG,EAAE,GAAG,wBAAwB,EAAE,GAAG,MAAM,EAAE,CAAC;IAChE,MAAM,WAAW,GAAG,GAAG,YAAY,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,EAAE,CAAC;IAErE,IAAI,cAAc,IAAI,kBAAkB,KAAK,WAAW,EAAE,CAAC;QACzD,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,EAAE,uBAAuB,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAChE,MAAM,QAAQ,GAAG,IAAI,uBAAuB,CAC1C,YAAY,CAAC,KAAK,IAAI,wBAAwB,EAC9C,YAAY,CAAC,MAAM,EACnB,YAAY,CAAC,WAAW,CACzB,CAAC;QACF,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;QAC5B,cAAc,GAAG,QAAQ,CAAC;QAC1B,kBAAkB,GAAG,WAAW,CAAC;QACjC,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,kEAAkE,CAAC,CAAC;IACtF,CAAC;IAED,IAAI,YAAY,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,6BAA6B,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,QAAQ,CAAC,UAAU,EAAE,CAAC;IAC5B,cAAc,GAAG,QAAQ,CAAC;IAC1B,kBAAkB,GAAG,WAAW,CAAC;IAEjC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -9,7 +9,7 @@ export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
9
9
  private apiKey?;
10
10
  private apiEndpoint;
11
11
  readonly name = "openai";
12
- readonly dimensions = 1536;
12
+ get dimensions(): number;
13
13
  constructor(modelName?: string, apiKey?: string | undefined, apiEndpoint?: string);
14
14
  initialize(): Promise<void>;
15
15
  isReady(): boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/embeddings/openai.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAE/C;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAK7D,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,WAAW;IANrB,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,UAAU,QAAQ;gBAGhB,SAAS,GAAE,MAAiC,EAC7C,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,WAAW,GAAE,MAAoC;IAGrD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,IAAI,OAAO;IAIZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CA+BvD"}
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../src/embeddings/openai.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAM/C;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAO7D,QAAQ,CAAC,SAAS,EAAE,MAAM;IAC1B,OAAO,CAAC,MAAM,CAAC;IACf,OAAO,CAAC,WAAW;IARrB,QAAQ,CAAC,IAAI,YAAY;IACzB,IAAI,UAAU,IAAI,MAAM,CAEvB;gBAGU,SAAS,GAAE,MAAiC,EAC7C,MAAM,CAAC,EAAE,MAAM,YAAA,EACf,WAAW,GAAE,MAAoC;IAGrD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAQjC,OAAO,IAAI,OAAO;IAIZ,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAKtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;CA+BvD"}
@@ -8,7 +8,9 @@ export class OpenAIEmbeddingProvider {
8
8
  apiKey;
9
9
  apiEndpoint;
10
10
  name = 'openai';
11
- dimensions = 1536; // Default for text-embedding-3-small
11
+ get dimensions() {
12
+ return this.modelName.includes('large') ? 3072 : 1536;
13
+ }
12
14
  constructor(modelName = 'text-embedding-3-small', apiKey, apiEndpoint = 'https://api.openai.com/v1') {
13
15
  this.modelName = modelName;
14
16
  this.apiKey = apiKey;
@@ -1 +1 @@
1
- {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/embeddings/openai.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAKvB;IACD;IACA;IAND,IAAI,GAAG,QAAQ,CAAC;IAChB,UAAU,GAAG,IAAI,CAAC,CAAC,qCAAqC;IAEjE,YACW,YAAoB,wBAAwB,EAC7C,MAAe,EACf,cAAsB,2BAA2B;QAFhD,cAAS,GAAT,SAAS,CAAmC;QAC7C,WAAM,GAAN,MAAM,CAAS;QACf,gBAAW,GAAX,WAAW,CAAsC;IACxD,CAAC;IAEJ,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,aAAa,EAAE;gBAC7D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,SAAS;oBACrB,KAAK,EAAE,KAAK;oBACZ,eAAe,EAAE,OAAO;iBACzB,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAQ,CAAC;YAE5C,wCAAwC;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../src/embeddings/openai.ts"],"names":[],"mappings":"AAMA;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAOvB;IACD;IACA;IARD,IAAI,GAAG,QAAQ,CAAC;IACzB,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACxD,CAAC;IAED,YACW,YAAoB,wBAAwB,EAC7C,MAAe,EACf,cAAsB,2BAA2B;QAFhD,cAAS,GAAT,SAAS,CAAmC;QAC7C,WAAM,GAAN,MAAM,CAAS;QACf,gBAAW,GAAX,WAAW,CAAsC;IACxD,CAAC;IAEJ,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CACb,yGAAyG,CAC1G,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,KAAe;QAC9B,IAAI,CAAC,KAAK,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,WAAW,aAAa,EAAE;gBAC7D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE;oBACP,cAAc,EAAE,kBAAkB;oBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;iBACvC;gBACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,KAAK,EAAE,IAAI,CAAC,SAAS;oBACrB,KAAK,EAAE,KAAK;oBACZ,eAAe,EAAE,OAAO;iBACzB,CAAC;aACH,CAAC,CAAC;YAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,oBAAoB,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;YAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;YAEhE,wCAAwC;YACxC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,KAAK,CAAC,CAAC;YACjD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF"}
@@ -1,4 +1,9 @@
1
1
  import { EmbeddingProvider } from './types.js';
2
+ interface ModelConfig {
3
+ dimensions: number;
4
+ maxContext: number;
5
+ }
6
+ export declare const MODEL_CONFIGS: Record<string, ModelConfig>;
2
7
  export declare class TransformersEmbeddingProvider implements EmbeddingProvider {
3
8
  readonly name = "transformers";
4
9
  readonly modelName: string;
@@ -14,4 +19,5 @@ export declare class TransformersEmbeddingProvider implements EmbeddingProvider
14
19
  isReady(): boolean;
15
20
  }
16
21
  export declare function createEmbeddingProvider(modelName?: string): Promise<EmbeddingProvider>;
22
+ export {};
17
23
  //# sourceMappingURL=transformers.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../src/embeddings/transformers.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,YAAY,CAAC;AAwB9D,qBAAa,6BAA8B,YAAW,iBAAiB;IACrE,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAA8B;gBAErC,SAAS,GAAE,MAAsB;IAKvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAQnB,WAAW;IAmBnB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAyBtD,OAAO,IAAI,OAAO;CAGnB;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,GAAE,MAAsB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAI5B"}
1
+ {"version":3,"file":"transformers.d.ts","sourceRoot":"","sources":["../../src/embeddings/transformers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAiB,MAAM,YAAY,CAAC;AAG9D,UAAU,WAAW;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAKrD,CAAC;AAYF,qBAAa,6BAA8B,YAAW,iBAAiB;IACrE,QAAQ,CAAC,IAAI,kBAAkB;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,OAAO,CAAC,QAAQ,CAA8C;IAC9D,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,WAAW,CAA8B;gBAErC,SAAS,GAAE,MAAsB;IAKvC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAQnB,WAAW;IA8BnB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAoBtC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IA2BtD,OAAO,IAAI,OAAO;CAGnB;AAED,wBAAsB,uBAAuB,CAC3C,SAAS,GAAE,MAAsB,GAChC,OAAO,CAAC,iBAAiB,CAAC,CAI5B"}
@@ -1,6 +1,5 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
1
  import { DEFAULT_MODEL } from './types.js';
3
- const MODEL_CONFIGS = {
2
+ export const MODEL_CONFIGS = {
4
3
  'Xenova/bge-small-en-v1.5': { dimensions: 384, maxContext: 512 },
5
4
  'Xenova/all-MiniLM-L6-v2': { dimensions: 384, maxContext: 512 },
6
5
  'Xenova/bge-base-en-v1.5': { dimensions: 768, maxContext: 512 },
@@ -36,14 +35,18 @@ export class TransformersEmbeddingProvider {
36
35
  }
37
36
  async _initialize() {
38
37
  try {
39
- console.error(`Loading embedding model: ${this.modelName}`);
40
- console.error('(First run will download the model - this may take a moment)');
38
+ if (process.env.CODEBASE_CONTEXT_DEBUG) {
39
+ console.error(`Loading embedding model: ${this.modelName}`);
40
+ console.error('(First run will download the model - this may take a moment)');
41
+ }
41
42
  const { pipeline } = await import('@huggingface/transformers');
42
43
  this.pipeline = await pipeline('feature-extraction', this.modelName, {
43
44
  dtype: 'q8'
44
45
  });
45
46
  this.ready = true;
46
- console.error(`Model loaded successfully: ${this.modelName}`);
47
+ if (process.env.CODEBASE_CONTEXT_DEBUG) {
48
+ console.error(`Model loaded successfully: ${this.modelName}`);
49
+ }
47
50
  }
48
51
  catch (error) {
49
52
  console.error('Failed to initialize embedding model:', error);
@@ -54,6 +57,8 @@ export class TransformersEmbeddingProvider {
54
57
  if (!this.ready) {
55
58
  await this.initialize();
56
59
  }
60
+ if (!this.pipeline)
61
+ throw new Error('Pipeline not initialized');
57
62
  try {
58
63
  const output = await this.pipeline(text, {
59
64
  pooling: 'mean',
@@ -70,6 +75,8 @@ export class TransformersEmbeddingProvider {
70
75
  if (!this.ready) {
71
76
  await this.initialize();
72
77
  }
78
+ if (!this.pipeline)
79
+ throw new Error('Pipeline not initialized');
73
80
  const embeddings = [];
74
81
  const batchSize = computeSafeBatchSize(this.modelName);
75
82
  for (let i = 0; i < texts.length; i += batchSize) {
@@ -1 +1 @@
1
- {"version":3,"file":"transformers.js","sourceRoot":"","sources":["../../src/embeddings/transformers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transformers.js","sourceRoot":"","sources":["../../src/embeddings/transformers.ts"],"names":[],"mappings":"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"}
@@ -15,6 +15,7 @@ export interface EmbeddingConfig {
15
15
  apiKey?: string;
16
16
  apiEndpoint?: string;
17
17
  }
18
+ export declare function parseEmbeddingProviderName(value: unknown): EmbeddingConfig['provider'] | undefined;
18
19
  export declare const DEFAULT_MODEL: string;
19
20
  export declare const DEFAULT_EMBEDDING_CONFIG: EmbeddingConfig;
20
21
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,IAAI,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAKD,eAAO,MAAM,aAAa,QAA4D,CAAC;AAEvF,eAAO,MAAM,wBAAwB,EAAE,eAMtC,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvC,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACjD,OAAO,IAAI,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC1D,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,OAAO,GACb,eAAe,CAAC,UAAU,CAAC,GAAG,SAAS,CAKzC;AAKD,eAAO,MAAM,aAAa,QAA4D,CAAC;AAEvF,eAAO,MAAM,wBAAwB,EAAE,eAMtC,CAAC"}
@@ -1,9 +1,15 @@
1
+ export function parseEmbeddingProviderName(value) {
2
+ if (value === 'transformers' || value === 'ollama' || value === 'openai' || value === 'custom') {
3
+ return value;
4
+ }
5
+ return undefined;
6
+ }
1
7
  // Default: bge-small (fast, ~2min indexing, consumer-hardware safe)
2
8
  // Opt-in: set EMBEDDING_MODEL=onnx-community/granite-embedding-small-english-r2-ONNX for
3
9
  // better conceptual search at the cost of 5-10x slower indexing and higher RAM usage
4
10
  export const DEFAULT_MODEL = process.env.EMBEDDING_MODEL || 'Xenova/bge-small-en-v1.5';
5
11
  export const DEFAULT_EMBEDDING_CONFIG = {
6
- provider: process.env.EMBEDDING_PROVIDER || 'transformers',
12
+ provider: parseEmbeddingProviderName(process.env.EMBEDDING_PROVIDER) ?? 'transformers',
7
13
  model: DEFAULT_MODEL,
8
14
  batchSize: 32,
9
15
  maxRetries: 3,
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAqBA,oEAAoE;AACpE,yFAAyF;AACzF,qFAAqF;AACrF,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,0BAA0B,CAAC;AAEvF,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,QAAQ,EAAG,OAAO,CAAC,GAAG,CAAC,kBAA0B,IAAI,cAAc;IACnE,KAAK,EAAE,aAAa;IACpB,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;CACnC,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/embeddings/types.ts"],"names":[],"mappings":"AAoBA,MAAM,UAAU,0BAA0B,CACxC,KAAc;IAEd,IAAI,KAAK,KAAK,cAAc,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC/F,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,oEAAoE;AACpE,yFAAyF;AACzF,qFAAqF;AACrF,MAAM,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,0BAA0B,CAAC;AAEvF,MAAM,CAAC,MAAM,wBAAwB,GAAoB;IACvD,QAAQ,EAAE,0BAA0B,CAAC,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,cAAc;IACtF,KAAK,EAAE,aAAa;IACpB,SAAS,EAAE,EAAE;IACb,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,cAAc;CACnC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { EvalGate, EvalResult, EvalSummary, EvaluateFixtureParams, FormatEvalReportParams } from './types.js';
2
+ export declare function evaluateFixture({ fixture, searcher, limit, searchOptions }: EvaluateFixtureParams): Promise<EvalSummary>;
3
+ export declare function summarizeEvaluation(results: EvalResult[], gate?: EvalGate): EvalSummary;
4
+ export declare function formatEvalReport({ codebaseLabel, fixturePath, summary, redactPaths }: FormatEvalReportParams): string;
5
+ //# sourceMappingURL=harness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.d.ts","sourceRoot":"","sources":["../../src/eval/harness.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,QAAQ,EAER,UAAU,EACV,WAAW,EACX,qBAAqB,EACrB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AA4GpB,wBAAsB,eAAe,CAAC,EACpC,OAAO,EACP,QAAQ,EACR,KAAS,EACT,aAAa,EACd,EAAE,qBAAqB,GAAG,OAAO,CAAC,WAAW,CAAC,CAS9C;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,IAAI,GAAE,QAAc,GAAG,WAAW,CAsB5F;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,aAAa,EACb,WAAW,EACX,OAAO,EACP,WAAkB,EACnB,EAAE,sBAAsB,GAAG,MAAM,CAuDjC"}
@@ -0,0 +1,153 @@
1
+ import crypto from 'crypto';
2
+ function normalizePath(filePath) {
3
+ return filePath.toLowerCase().replace(/\\/g, '/');
4
+ }
5
+ function isTestFile(filePath) {
6
+ const normalized = normalizePath(filePath);
7
+ return (normalized.includes('.spec.') ||
8
+ normalized.includes('.test.') ||
9
+ normalized.includes('/e2e/') ||
10
+ normalized.includes('/__tests__/'));
11
+ }
12
+ function matchesPattern(filePath, patterns) {
13
+ const normalized = normalizePath(filePath);
14
+ return patterns.some((pattern) => normalized.includes(pattern.toLowerCase()));
15
+ }
16
+ function dedupeByFile(results) {
17
+ const seen = new Set();
18
+ const deduped = [];
19
+ for (const result of results) {
20
+ const key = normalizePath(result.filePath);
21
+ if (seen.has(key)) {
22
+ continue;
23
+ }
24
+ seen.add(key);
25
+ deduped.push(result);
26
+ }
27
+ return deduped;
28
+ }
29
+ function getExpectedPatterns(query) {
30
+ return query.expectedPatterns ?? query.expectedTopFiles ?? [];
31
+ }
32
+ function getExpectedNotPatterns(query) {
33
+ return query.expectedNotPatterns ?? query.expectedNotTopFiles ?? [];
34
+ }
35
+ function evaluateQuery(query, results) {
36
+ const uniqueResults = dedupeByFile(results);
37
+ const topFile = uniqueResults.length > 0 ? uniqueResults[0].filePath : null;
38
+ const top3Files = uniqueResults.slice(0, 3).map((result) => result.filePath);
39
+ const expectedPatterns = getExpectedPatterns(query);
40
+ const expectedNotPatterns = getExpectedNotPatterns(query);
41
+ const top1Correct = topFile !== null &&
42
+ matchesPattern(topFile, expectedPatterns) &&
43
+ !matchesPattern(topFile, expectedNotPatterns);
44
+ const top3Recall = top3Files.some((filePath) => matchesPattern(filePath, expectedPatterns) && !matchesPattern(filePath, expectedNotPatterns));
45
+ const specCount = top3Files.filter((filePath) => isTestFile(filePath)).length;
46
+ const specContaminated = specCount >= 2;
47
+ return {
48
+ queryId: query.id,
49
+ query: query.query,
50
+ category: query.category,
51
+ expectedPatterns,
52
+ expectedNotPatterns,
53
+ topFile,
54
+ top3Files,
55
+ top1Correct,
56
+ top3Recall,
57
+ specContaminated,
58
+ score: uniqueResults.length > 0 ? uniqueResults[0].score : 0
59
+ };
60
+ }
61
+ function resolveGateThreshold(total, gate) {
62
+ if (gate <= 1) {
63
+ return Math.ceil(total * gate);
64
+ }
65
+ return Math.ceil(gate);
66
+ }
67
+ function hashPath(filePath) {
68
+ return crypto.createHash('sha1').update(normalizePath(filePath)).digest('hex').slice(0, 8);
69
+ }
70
+ function formatPath(filePath, redactPaths) {
71
+ if (!filePath) {
72
+ return 'none';
73
+ }
74
+ const normalized = filePath.replace(/\\/g, '/');
75
+ if (!redactPaths) {
76
+ return normalized;
77
+ }
78
+ const base = normalized.split('/').pop() || normalized;
79
+ return `path#${hashPath(normalized)}/${base}`;
80
+ }
81
+ export async function evaluateFixture({ fixture, searcher, limit = 5, searchOptions }) {
82
+ const results = [];
83
+ for (const query of fixture.queries) {
84
+ const searchResults = await searcher.search(query.query, limit, undefined, searchOptions);
85
+ results.push(evaluateQuery(query, searchResults));
86
+ }
87
+ return summarizeEvaluation(results);
88
+ }
89
+ export function summarizeEvaluation(results, gate = 0.7) {
90
+ const total = results.length;
91
+ const top1Correct = results.filter((result) => result.top1Correct).length;
92
+ const top3RecallCount = results.filter((result) => result.top3Recall).length;
93
+ const specContaminatedCount = results.filter((result) => result.specContaminated).length;
94
+ const avgTopScore = total > 0 ? results.reduce((sum, result) => sum + result.score, 0) / total : 0;
95
+ const gateThreshold = resolveGateThreshold(total, gate);
96
+ return {
97
+ total,
98
+ top1Correct,
99
+ top1Accuracy: total > 0 ? top1Correct / total : 0,
100
+ top3RecallCount,
101
+ top3Recall: total > 0 ? top3RecallCount / total : 0,
102
+ specContaminatedCount,
103
+ specContaminationRate: total > 0 ? specContaminatedCount / total : 0,
104
+ avgTopScore,
105
+ gateThreshold,
106
+ passesGate: total > 0 && top1Correct >= gateThreshold,
107
+ results
108
+ };
109
+ }
110
+ export function formatEvalReport({ codebaseLabel, fixturePath, summary, redactPaths = true }) {
111
+ const lines = [];
112
+ const wins = summary.results.filter((result) => result.top1Correct);
113
+ const failures = summary.results.filter((result) => !result.top1Correct);
114
+ lines.push(`\n=== Eval Report: ${codebaseLabel} ===`);
115
+ lines.push(`Fixture: ${fixturePath}`);
116
+ lines.push(`Top-1 Accuracy: ${summary.top1Correct}/${summary.total} (${(summary.top1Accuracy * 100).toFixed(0)}%)`);
117
+ lines.push(`Top-3 Recall: ${summary.top3RecallCount}/${summary.total} (${(summary.top3Recall * 100).toFixed(0)}%)`);
118
+ lines.push(`Spec Contamination: ${summary.specContaminatedCount}/${summary.total} (${(summary.specContaminationRate * 100).toFixed(0)}%)`);
119
+ lines.push(`Gate (${summary.gateThreshold}/${summary.total}): ${summary.passesGate ? 'PASS' : 'FAIL'}`);
120
+ lines.push(`Wins: ${wins.length} | Failures: ${failures.length}`);
121
+ lines.push('\nWins:');
122
+ if (wins.length === 0) {
123
+ lines.push(' (none)');
124
+ }
125
+ else {
126
+ for (const result of wins) {
127
+ lines.push(` PASS #${result.queryId} [${result.category}] "${result.query}" -> ${formatPath(result.topFile, redactPaths)} (${result.score.toFixed(3)})`);
128
+ }
129
+ }
130
+ lines.push('\nFailures:');
131
+ if (failures.length === 0) {
132
+ lines.push(' (none)');
133
+ }
134
+ else {
135
+ for (const result of failures) {
136
+ lines.push(` FAIL #${result.queryId} [${result.category}] "${result.query}" -> ${formatPath(result.topFile, redactPaths)} (${result.score.toFixed(3)})`);
137
+ lines.push(` expected: ${result.expectedPatterns.join(' | ') || '(none)'}`);
138
+ lines.push(` expected-not: ${result.expectedNotPatterns.join(' | ') || '(none)'}`);
139
+ lines.push(' top-3 actual:');
140
+ if (result.top3Files.length === 0) {
141
+ lines.push(' 1. none');
142
+ }
143
+ else {
144
+ for (let index = 0; index < result.top3Files.length; index++) {
145
+ lines.push(` ${index + 1}. ${formatPath(result.top3Files[index], redactPaths)}`);
146
+ }
147
+ }
148
+ }
149
+ }
150
+ lines.push('\n================================');
151
+ return lines.join('\n');
152
+ }
153
+ //# sourceMappingURL=harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"harness.js","sourceRoot":"","sources":["../../src/eval/harness.ts"],"names":[],"mappings":"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"}