doc-freshness-checker 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 (246) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +305 -0
  3. package/dist/cache/cacheManager.d.ts +42 -0
  4. package/dist/cache/cacheManager.js +138 -0
  5. package/dist/cache/cacheManager.js.map +1 -0
  6. package/dist/cache/cacheManager.test.d.ts +1 -0
  7. package/dist/cache/cacheManager.test.js +142 -0
  8. package/dist/cache/cacheManager.test.js.map +1 -0
  9. package/dist/cli.d.ts +32 -0
  10. package/dist/cli.js +137 -0
  11. package/dist/cli.js.map +1 -0
  12. package/dist/cli.test.d.ts +1 -0
  13. package/dist/cli.test.js +184 -0
  14. package/dist/cli.test.js.map +1 -0
  15. package/dist/config/defaults.d.ts +5 -0
  16. package/dist/config/defaults.js +135 -0
  17. package/dist/config/defaults.js.map +1 -0
  18. package/dist/config/defineConfig.d.ts +28 -0
  19. package/dist/config/defineConfig.js +30 -0
  20. package/dist/config/defineConfig.js.map +1 -0
  21. package/dist/config/defineConfig.test.d.ts +1 -0
  22. package/dist/config/defineConfig.test.js +10 -0
  23. package/dist/config/defineConfig.test.js.map +1 -0
  24. package/dist/config/loader.d.ts +7 -0
  25. package/dist/config/loader.js +250 -0
  26. package/dist/config/loader.js.map +1 -0
  27. package/dist/config/loader.test.d.ts +1 -0
  28. package/dist/config/loader.test.js +276 -0
  29. package/dist/config/loader.test.js.map +1 -0
  30. package/dist/git/changeTracker.d.ts +44 -0
  31. package/dist/git/changeTracker.js +149 -0
  32. package/dist/git/changeTracker.js.map +1 -0
  33. package/dist/git/changeTracker.test.d.ts +1 -0
  34. package/dist/git/changeTracker.test.js +184 -0
  35. package/dist/git/changeTracker.test.js.map +1 -0
  36. package/dist/graph/codeDocGraph.d.ts +43 -0
  37. package/dist/graph/codeDocGraph.js +103 -0
  38. package/dist/graph/codeDocGraph.js.map +1 -0
  39. package/dist/graph/codeDocGraph.test.d.ts +1 -0
  40. package/dist/graph/codeDocGraph.test.js +78 -0
  41. package/dist/graph/codeDocGraph.test.js.map +1 -0
  42. package/dist/graph/graphBuilder.d.ts +17 -0
  43. package/dist/graph/graphBuilder.js +76 -0
  44. package/dist/graph/graphBuilder.js.map +1 -0
  45. package/dist/graph/graphBuilder.test.d.ts +1 -0
  46. package/dist/graph/graphBuilder.test.js +87 -0
  47. package/dist/graph/graphBuilder.test.js.map +1 -0
  48. package/dist/index.d.ts +37 -0
  49. package/dist/index.js +37 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/parsers/documentParser.d.ts +22 -0
  52. package/dist/parsers/documentParser.js +76 -0
  53. package/dist/parsers/documentParser.js.map +1 -0
  54. package/dist/parsers/documentParser.test.d.ts +1 -0
  55. package/dist/parsers/documentParser.test.js +116 -0
  56. package/dist/parsers/documentParser.test.js.map +1 -0
  57. package/dist/parsers/extractors/baseExtractor.d.ts +19 -0
  58. package/dist/parsers/extractors/baseExtractor.js +33 -0
  59. package/dist/parsers/extractors/baseExtractor.js.map +1 -0
  60. package/dist/parsers/extractors/baseExtractor.test.d.ts +1 -0
  61. package/dist/parsers/extractors/baseExtractor.test.js +43 -0
  62. package/dist/parsers/extractors/baseExtractor.test.js.map +1 -0
  63. package/dist/parsers/extractors/codePatternExtractor.d.ts +13 -0
  64. package/dist/parsers/extractors/codePatternExtractor.js +108 -0
  65. package/dist/parsers/extractors/codePatternExtractor.js.map +1 -0
  66. package/dist/parsers/extractors/codePatternExtractor.test.d.ts +1 -0
  67. package/dist/parsers/extractors/codePatternExtractor.test.js +49 -0
  68. package/dist/parsers/extractors/codePatternExtractor.test.js.map +1 -0
  69. package/dist/parsers/extractors/dependencyExtractor.d.ts +12 -0
  70. package/dist/parsers/extractors/dependencyExtractor.js +92 -0
  71. package/dist/parsers/extractors/dependencyExtractor.js.map +1 -0
  72. package/dist/parsers/extractors/dependencyExtractor.test.d.ts +1 -0
  73. package/dist/parsers/extractors/dependencyExtractor.test.js +48 -0
  74. package/dist/parsers/extractors/dependencyExtractor.test.js.map +1 -0
  75. package/dist/parsers/extractors/directoryStructureExtractor.d.ts +34 -0
  76. package/dist/parsers/extractors/directoryStructureExtractor.js +168 -0
  77. package/dist/parsers/extractors/directoryStructureExtractor.js.map +1 -0
  78. package/dist/parsers/extractors/directoryStructureExtractor.test.d.ts +1 -0
  79. package/dist/parsers/extractors/directoryStructureExtractor.test.js +121 -0
  80. package/dist/parsers/extractors/directoryStructureExtractor.test.js.map +1 -0
  81. package/dist/parsers/extractors/externalUrlExtractor.d.ts +14 -0
  82. package/dist/parsers/extractors/externalUrlExtractor.js +53 -0
  83. package/dist/parsers/extractors/externalUrlExtractor.js.map +1 -0
  84. package/dist/parsers/extractors/externalUrlExtractor.test.d.ts +1 -0
  85. package/dist/parsers/extractors/externalUrlExtractor.test.js +85 -0
  86. package/dist/parsers/extractors/externalUrlExtractor.test.js.map +1 -0
  87. package/dist/parsers/extractors/filePathExtractor.d.ts +18 -0
  88. package/dist/parsers/extractors/filePathExtractor.js +72 -0
  89. package/dist/parsers/extractors/filePathExtractor.js.map +1 -0
  90. package/dist/parsers/extractors/filePathExtractor.test.d.ts +1 -0
  91. package/dist/parsers/extractors/filePathExtractor.test.js +73 -0
  92. package/dist/parsers/extractors/filePathExtractor.test.js.map +1 -0
  93. package/dist/parsers/extractors/versionExtractor.d.ts +11 -0
  94. package/dist/parsers/extractors/versionExtractor.js +74 -0
  95. package/dist/parsers/extractors/versionExtractor.js.map +1 -0
  96. package/dist/parsers/extractors/versionExtractor.test.d.ts +1 -0
  97. package/dist/parsers/extractors/versionExtractor.test.js +55 -0
  98. package/dist/parsers/extractors/versionExtractor.test.js.map +1 -0
  99. package/dist/plugins/plugin.d.ts +32 -0
  100. package/dist/plugins/plugin.js +40 -0
  101. package/dist/plugins/plugin.js.map +1 -0
  102. package/dist/plugins/plugin.test.d.ts +1 -0
  103. package/dist/plugins/plugin.test.js +23 -0
  104. package/dist/plugins/plugin.test.js.map +1 -0
  105. package/dist/reporters/consoleReporter.d.ts +15 -0
  106. package/dist/reporters/consoleReporter.js +73 -0
  107. package/dist/reporters/consoleReporter.js.map +1 -0
  108. package/dist/reporters/consoleReporter.test.d.ts +1 -0
  109. package/dist/reporters/consoleReporter.test.js +155 -0
  110. package/dist/reporters/consoleReporter.test.js.map +1 -0
  111. package/dist/reporters/enhancedReporter.d.ts +12 -0
  112. package/dist/reporters/enhancedReporter.js +81 -0
  113. package/dist/reporters/enhancedReporter.js.map +1 -0
  114. package/dist/reporters/enhancedReporter.test.d.ts +1 -0
  115. package/dist/reporters/enhancedReporter.test.js +152 -0
  116. package/dist/reporters/enhancedReporter.test.js.map +1 -0
  117. package/dist/reporters/jsonReporter.d.ts +11 -0
  118. package/dist/reporters/jsonReporter.js +20 -0
  119. package/dist/reporters/jsonReporter.js.map +1 -0
  120. package/dist/reporters/jsonReporter.test.d.ts +1 -0
  121. package/dist/reporters/jsonReporter.test.js +31 -0
  122. package/dist/reporters/jsonReporter.test.js.map +1 -0
  123. package/dist/reporters/markdownReporter.d.ts +11 -0
  124. package/dist/reporters/markdownReporter.js +55 -0
  125. package/dist/reporters/markdownReporter.js.map +1 -0
  126. package/dist/reporters/markdownReporter.test.d.ts +1 -0
  127. package/dist/reporters/markdownReporter.test.js +136 -0
  128. package/dist/reporters/markdownReporter.test.js.map +1 -0
  129. package/dist/runner.d.ts +9 -0
  130. package/dist/runner.js +265 -0
  131. package/dist/runner.js.map +1 -0
  132. package/dist/runner.test.d.ts +1 -0
  133. package/dist/runner.test.js +353 -0
  134. package/dist/runner.test.js.map +1 -0
  135. package/dist/scoring/freshnessScorer.d.ts +40 -0
  136. package/dist/scoring/freshnessScorer.js +170 -0
  137. package/dist/scoring/freshnessScorer.js.map +1 -0
  138. package/dist/scoring/freshnessScorer.test.d.ts +1 -0
  139. package/dist/scoring/freshnessScorer.test.js +397 -0
  140. package/dist/scoring/freshnessScorer.test.js.map +1 -0
  141. package/dist/semantic/vectorSearch.d.ts +84 -0
  142. package/dist/semantic/vectorSearch.js +484 -0
  143. package/dist/semantic/vectorSearch.js.map +1 -0
  144. package/dist/semantic/vectorSearch.test.d.ts +1 -0
  145. package/dist/semantic/vectorSearch.test.js +660 -0
  146. package/dist/semantic/vectorSearch.test.js.map +1 -0
  147. package/dist/setupTests.d.ts +4 -0
  148. package/dist/setupTests.js +11 -0
  149. package/dist/setupTests.js.map +1 -0
  150. package/dist/test-utils/console.d.ts +2 -0
  151. package/dist/test-utils/console.js +3 -0
  152. package/dist/test-utils/console.js.map +1 -0
  153. package/dist/test-utils/factories.d.ts +3 -0
  154. package/dist/test-utils/factories.js +25 -0
  155. package/dist/test-utils/factories.js.map +1 -0
  156. package/dist/test-utils/tempFiles.d.ts +1 -0
  157. package/dist/test-utils/tempFiles.js +12 -0
  158. package/dist/test-utils/tempFiles.js.map +1 -0
  159. package/dist/types.d.ts +304 -0
  160. package/dist/types.js +5 -0
  161. package/dist/types.js.map +1 -0
  162. package/dist/utils/boundedMap.d.ts +8 -0
  163. package/dist/utils/boundedMap.js +22 -0
  164. package/dist/utils/boundedMap.js.map +1 -0
  165. package/dist/utils/boundedMap.test.d.ts +1 -0
  166. package/dist/utils/boundedMap.test.js +57 -0
  167. package/dist/utils/boundedMap.test.js.map +1 -0
  168. package/dist/utils/illustrativePatterns.d.ts +28 -0
  169. package/dist/utils/illustrativePatterns.js +80 -0
  170. package/dist/utils/illustrativePatterns.js.map +1 -0
  171. package/dist/utils/illustrativePatterns.test.d.ts +1 -0
  172. package/dist/utils/illustrativePatterns.test.js +48 -0
  173. package/dist/utils/illustrativePatterns.test.js.map +1 -0
  174. package/dist/utils/incremental.d.ts +36 -0
  175. package/dist/utils/incremental.js +87 -0
  176. package/dist/utils/incremental.js.map +1 -0
  177. package/dist/utils/incremental.test.d.ts +1 -0
  178. package/dist/utils/incremental.test.js +84 -0
  179. package/dist/utils/incremental.test.js.map +1 -0
  180. package/dist/utils/parallel.d.ts +14 -0
  181. package/dist/utils/parallel.js +43 -0
  182. package/dist/utils/parallel.js.map +1 -0
  183. package/dist/utils/parallel.test.d.ts +1 -0
  184. package/dist/utils/parallel.test.js +48 -0
  185. package/dist/utils/parallel.test.js.map +1 -0
  186. package/dist/utils/pathSecurity.d.ts +12 -0
  187. package/dist/utils/pathSecurity.js +22 -0
  188. package/dist/utils/pathSecurity.js.map +1 -0
  189. package/dist/utils/pathSecurity.test.d.ts +1 -0
  190. package/dist/utils/pathSecurity.test.js +34 -0
  191. package/dist/utils/pathSecurity.test.js.map +1 -0
  192. package/dist/utils/similarity.d.ts +12 -0
  193. package/dist/utils/similarity.js +64 -0
  194. package/dist/utils/similarity.js.map +1 -0
  195. package/dist/utils/similarity.test.d.ts +1 -0
  196. package/dist/utils/similarity.test.js +49 -0
  197. package/dist/utils/similarity.test.js.map +1 -0
  198. package/dist/utils/validation.d.ts +13 -0
  199. package/dist/utils/validation.js +24 -0
  200. package/dist/utils/validation.js.map +1 -0
  201. package/dist/utils/validation.test.d.ts +1 -0
  202. package/dist/utils/validation.test.js +28 -0
  203. package/dist/utils/validation.test.js.map +1 -0
  204. package/dist/validators/codePatternValidator.d.ts +28 -0
  205. package/dist/validators/codePatternValidator.js +200 -0
  206. package/dist/validators/codePatternValidator.js.map +1 -0
  207. package/dist/validators/codePatternValidator.test.d.ts +1 -0
  208. package/dist/validators/codePatternValidator.test.js +86 -0
  209. package/dist/validators/codePatternValidator.test.js.map +1 -0
  210. package/dist/validators/dependencyValidator.d.ts +12 -0
  211. package/dist/validators/dependencyValidator.js +102 -0
  212. package/dist/validators/dependencyValidator.js.map +1 -0
  213. package/dist/validators/dependencyValidator.test.d.ts +1 -0
  214. package/dist/validators/dependencyValidator.test.js +179 -0
  215. package/dist/validators/dependencyValidator.test.js.map +1 -0
  216. package/dist/validators/directoryValidator.d.ts +30 -0
  217. package/dist/validators/directoryValidator.js +192 -0
  218. package/dist/validators/directoryValidator.js.map +1 -0
  219. package/dist/validators/directoryValidator.test.d.ts +1 -0
  220. package/dist/validators/directoryValidator.test.js +193 -0
  221. package/dist/validators/directoryValidator.test.js.map +1 -0
  222. package/dist/validators/fileValidator.d.ts +16 -0
  223. package/dist/validators/fileValidator.js +114 -0
  224. package/dist/validators/fileValidator.js.map +1 -0
  225. package/dist/validators/fileValidator.test.d.ts +1 -0
  226. package/dist/validators/fileValidator.test.js +108 -0
  227. package/dist/validators/fileValidator.test.js.map +1 -0
  228. package/dist/validators/urlValidator.d.ts +25 -0
  229. package/dist/validators/urlValidator.js +320 -0
  230. package/dist/validators/urlValidator.js.map +1 -0
  231. package/dist/validators/urlValidator.test.d.ts +1 -0
  232. package/dist/validators/urlValidator.test.js +252 -0
  233. package/dist/validators/urlValidator.test.js.map +1 -0
  234. package/dist/validators/validationEngine.d.ts +23 -0
  235. package/dist/validators/validationEngine.js +117 -0
  236. package/dist/validators/validationEngine.js.map +1 -0
  237. package/dist/validators/validationEngine.test.d.ts +1 -0
  238. package/dist/validators/validationEngine.test.js +82 -0
  239. package/dist/validators/validationEngine.test.js.map +1 -0
  240. package/dist/validators/versionValidator.d.ts +18 -0
  241. package/dist/validators/versionValidator.js +211 -0
  242. package/dist/validators/versionValidator.js.map +1 -0
  243. package/dist/validators/versionValidator.test.d.ts +1 -0
  244. package/dist/validators/versionValidator.test.js +308 -0
  245. package/dist/validators/versionValidator.test.js.map +1 -0
  246. package/package.json +98 -0
@@ -0,0 +1,484 @@
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import crypto from 'crypto';
4
+ import { homedir } from 'os';
5
+ import { EmbeddingModel, FlagEmbedding } from 'fastembed';
6
+ import { pruneOldestEntries, setWithMaxEntries } from '../utils/boundedMap.js';
7
+ /**
8
+ * Vector-based semantic search for documentation validation
9
+ * Uses local embeddings via fastembed
10
+ *
11
+ * This feature is disabled by default and requires explicit configuration.
12
+ */
13
+ // FastEmbed configuration
14
+ const EMBEDDING_DIMENSIONS = 384; // bge-small-en-v1.5 dimensions
15
+ const MAX_RETRIES = 3;
16
+ const MAX_EMBEDDING_CACHE_ENTRIES = 20000;
17
+ export class VectorSearch {
18
+ config;
19
+ model;
20
+ modelInitPromise;
21
+ vectorIndex;
22
+ indexMetadata;
23
+ embeddingCache;
24
+ cacheLoaded;
25
+ dimensions;
26
+ cacheDir;
27
+ embeddingCacheFile;
28
+ modelCacheDir;
29
+ constructor(config) {
30
+ this.config = config;
31
+ this.model = null;
32
+ this.modelInitPromise = null;
33
+ this.vectorIndex = [];
34
+ this.indexMetadata = [];
35
+ this.embeddingCache = new Map();
36
+ this.cacheLoaded = false;
37
+ this.dimensions = EMBEDDING_DIMENSIONS;
38
+ // Cache settings
39
+ this.cacheDir = config.cache?.dir || '.doc-freshness-cache';
40
+ this.embeddingCacheFile = path.join(this.cacheDir, 'embedding-cache.json');
41
+ this.modelCacheDir = path.join(homedir(), '.doc-freshness', 'fastembed-cache');
42
+ }
43
+ /**
44
+ * Initialize the FastEmbed model (lazy loading)
45
+ */
46
+ async initialize() {
47
+ if (this.model)
48
+ return true;
49
+ // Wait for existing initialization if in progress
50
+ if (this.modelInitPromise) {
51
+ return this.modelInitPromise;
52
+ }
53
+ this.modelInitPromise = this.initializeModel();
54
+ return this.modelInitPromise;
55
+ }
56
+ async initializeModel() {
57
+ try {
58
+ // Ensure cache directory exists
59
+ await fs.promises.mkdir(this.modelCacheDir, { recursive: true });
60
+ // Check if this is a first-time download (model not cached yet)
61
+ const modelCacheExists = await this.checkModelCacheExists();
62
+ if (!modelCacheExists) {
63
+ console.log(' Downloading embedding model (first run only)...');
64
+ }
65
+ else if (this.config.verbose) {
66
+ console.log(` Loading embedding model from cache...`);
67
+ }
68
+ let retries = 0;
69
+ while (retries < MAX_RETRIES) {
70
+ try {
71
+ this.model = await FlagEmbedding.init({
72
+ model: EmbeddingModel.BGESmallENV15,
73
+ cacheDir: this.modelCacheDir,
74
+ });
75
+ if (this.config.verbose) {
76
+ console.log(' Embedding model loaded.');
77
+ }
78
+ this.modelInitPromise = null;
79
+ return true;
80
+ }
81
+ catch (initError) {
82
+ retries++;
83
+ if (this.config.verbose) {
84
+ console.warn(` Model initialization attempt ${retries}/${MAX_RETRIES} failed: ${initError.message}`);
85
+ }
86
+ if (retries >= MAX_RETRIES) {
87
+ throw initError;
88
+ }
89
+ // Wait before retrying (exponential backoff)
90
+ await new Promise((resolve) => setTimeout(resolve, retries * 2000));
91
+ }
92
+ }
93
+ return false;
94
+ }
95
+ catch (error) {
96
+ this.modelInitPromise = null;
97
+ console.warn('Vector search initialization failed:', error.message);
98
+ this.model = null;
99
+ return false;
100
+ }
101
+ }
102
+ /**
103
+ * Check if vector search is available
104
+ */
105
+ isAvailable() {
106
+ return this.model !== null;
107
+ }
108
+ /**
109
+ * Check if model cache directory has the model files
110
+ */
111
+ async checkModelCacheExists() {
112
+ try {
113
+ const entries = await fs.promises.readdir(this.modelCacheDir, { withFileTypes: true });
114
+ // Check if there are any subdirectories (fastembed stores models in subdirs like 'fast-bge-small-en-v1.5')
115
+ return entries.some((entry) => entry.isDirectory() && entry.name.includes('bge'));
116
+ }
117
+ catch {
118
+ return false;
119
+ }
120
+ }
121
+ /**
122
+ * Load embedding cache from disk
123
+ */
124
+ async loadCache() {
125
+ if (this.cacheLoaded)
126
+ return;
127
+ try {
128
+ const data = await fs.promises.readFile(this.embeddingCacheFile, 'utf-8');
129
+ const parsed = JSON.parse(data);
130
+ // Restore cache as Map
131
+ this.embeddingCache = new Map(Object.entries(parsed.embeddings || {}));
132
+ pruneOldestEntries(this.embeddingCache, MAX_EMBEDDING_CACHE_ENTRIES);
133
+ // Restore index if available
134
+ if (parsed.vectorIndex && parsed.indexMetadata) {
135
+ this.vectorIndex = parsed.vectorIndex;
136
+ this.indexMetadata = parsed.indexMetadata;
137
+ }
138
+ if (this.config.verbose) {
139
+ console.log(`Loaded ${this.embeddingCache.size} cached embeddings.`);
140
+ }
141
+ }
142
+ catch {
143
+ // No cache file or invalid - start fresh
144
+ this.embeddingCache = new Map();
145
+ }
146
+ this.cacheLoaded = true;
147
+ }
148
+ /**
149
+ * Save embedding cache to disk
150
+ */
151
+ async saveCache() {
152
+ try {
153
+ await fs.promises.mkdir(this.cacheDir, { recursive: true });
154
+ const data = {
155
+ model: 'BGESmallENV15',
156
+ dimensions: this.dimensions,
157
+ timestamp: new Date().toISOString(),
158
+ embeddings: Object.fromEntries(this.embeddingCache),
159
+ vectorIndex: this.vectorIndex,
160
+ indexMetadata: this.indexMetadata,
161
+ };
162
+ await fs.promises.writeFile(this.embeddingCacheFile, JSON.stringify(data), 'utf-8');
163
+ if (this.config.verbose) {
164
+ console.log(`Saved ${this.embeddingCache.size} embeddings to cache.`);
165
+ }
166
+ }
167
+ catch (error) {
168
+ if (this.config.verbose) {
169
+ console.warn('Failed to save embedding cache:', error.message);
170
+ }
171
+ }
172
+ }
173
+ /**
174
+ * Generate a cache key for content
175
+ */
176
+ getCacheKey(content, type) {
177
+ const hash = crypto.createHash('md5').update(content).digest('hex');
178
+ return `${type}:${hash}`;
179
+ }
180
+ /**
181
+ * Generate embedding for text (with caching)
182
+ */
183
+ async embed(text, cacheKey = null) {
184
+ if (!this.model) {
185
+ throw new Error('Vector search not initialized');
186
+ }
187
+ // Check cache first
188
+ if (cacheKey && this.embeddingCache.has(cacheKey)) {
189
+ return this.embeddingCache.get(cacheKey);
190
+ }
191
+ const cleanText = text.trim();
192
+ if (!cleanText) {
193
+ throw new Error('Input text is empty');
194
+ }
195
+ // Use passageEmbed for documents/content
196
+ const embeddingGenerator = this.model.passageEmbed([cleanText]);
197
+ let embedding = null;
198
+ for await (const batch of embeddingGenerator) {
199
+ if (batch && batch.length > 0 && batch[0]) {
200
+ embedding = Array.from(batch[0]);
201
+ break;
202
+ }
203
+ }
204
+ if (!embedding || embedding.length !== this.dimensions) {
205
+ throw new Error(`Invalid embedding: got ${embedding?.length} dimensions, expected ${this.dimensions}`);
206
+ }
207
+ // Store in cache
208
+ if (cacheKey) {
209
+ setWithMaxEntries(this.embeddingCache, cacheKey, embedding, MAX_EMBEDDING_CACHE_ENTRIES);
210
+ }
211
+ return embedding;
212
+ }
213
+ /**
214
+ * Generate embedding for a query (optimized for search)
215
+ */
216
+ async embedQuery(text) {
217
+ if (!this.model) {
218
+ throw new Error('Vector search not initialized');
219
+ }
220
+ const cleanText = text.trim();
221
+ if (!cleanText) {
222
+ throw new Error('Input text is empty');
223
+ }
224
+ // Use queryEmbed for search queries
225
+ const embeddingArray = await this.model.queryEmbed(cleanText);
226
+ if (!embeddingArray || embeddingArray.length !== this.dimensions) {
227
+ throw new Error(`Invalid query embedding: got ${embeddingArray?.length} dimensions, expected ${this.dimensions}`);
228
+ }
229
+ return Array.from(embeddingArray);
230
+ }
231
+ /**
232
+ * Index all documentation sections (with incremental support)
233
+ */
234
+ async indexDocumentation(documents) {
235
+ const initialized = await this.initialize();
236
+ if (!initialized)
237
+ return;
238
+ await this.loadCache();
239
+ // Clear previous index to avoid duplicates across runs
240
+ this.vectorIndex = [];
241
+ this.indexMetadata = [];
242
+ let newEmbeddings = 0;
243
+ let cachedEmbeddings = 0;
244
+ for (const doc of documents) {
245
+ const sections = this.splitIntoSections(doc.content);
246
+ for (const section of sections) {
247
+ if (section.text.length < 50)
248
+ continue;
249
+ const cacheKey = this.getCacheKey(section.text, 'doc');
250
+ const wasCached = this.embeddingCache.has(cacheKey);
251
+ const embedding = await this.embed(section.text, cacheKey);
252
+ if (wasCached) {
253
+ cachedEmbeddings++;
254
+ }
255
+ else {
256
+ newEmbeddings++;
257
+ }
258
+ this.vectorIndex.push(embedding);
259
+ this.indexMetadata.push({
260
+ type: 'doc',
261
+ path: doc.path,
262
+ section: section.heading,
263
+ text: section.text.substring(0, 200),
264
+ });
265
+ }
266
+ }
267
+ if (this.config.verbose) {
268
+ console.log(`Indexed documentation: ${newEmbeddings} new, ${cachedEmbeddings} cached.`);
269
+ }
270
+ }
271
+ /**
272
+ * Index code comments and docstrings (with incremental support)
273
+ */
274
+ async indexCodeComments(codeFiles) {
275
+ const initialized = await this.initialize();
276
+ if (!initialized)
277
+ return;
278
+ await this.loadCache();
279
+ let newEmbeddings = 0;
280
+ let cachedEmbeddings = 0;
281
+ for (const file of codeFiles) {
282
+ const comments = this.extractComments(file.content, file.language);
283
+ for (const comment of comments) {
284
+ if (comment.text.length < 20)
285
+ continue;
286
+ const cacheKey = this.getCacheKey(comment.text, 'code');
287
+ const wasCached = this.embeddingCache.has(cacheKey);
288
+ const embedding = await this.embed(comment.text, cacheKey);
289
+ if (wasCached) {
290
+ cachedEmbeddings++;
291
+ }
292
+ else {
293
+ newEmbeddings++;
294
+ }
295
+ this.vectorIndex.push(embedding);
296
+ this.indexMetadata.push({
297
+ type: 'code',
298
+ path: file.path,
299
+ symbol: comment.symbol,
300
+ text: comment.text.substring(0, 200),
301
+ });
302
+ }
303
+ }
304
+ if (this.config.verbose) {
305
+ console.log(`Indexed code comments: ${newEmbeddings} new, ${cachedEmbeddings} cached.`);
306
+ }
307
+ }
308
+ /**
309
+ * Find semantic mismatches between docs and code
310
+ */
311
+ async findMismatches(threshold = null) {
312
+ threshold = threshold ?? this.config.vectorSearch?.similarityThreshold ?? 0.3;
313
+ const mismatches = [];
314
+ const docs = this.indexMetadata
315
+ .map((meta, index) => ({ meta, embedding: this.vectorIndex[index] }))
316
+ .filter((entry) => entry.meta.type === 'doc');
317
+ const codeEntries = this.indexMetadata
318
+ .map((meta, index) => ({ meta, embedding: this.vectorIndex[index] }))
319
+ .filter((entry) => entry.meta.type === 'code');
320
+ // For each doc section, find best matching code comment
321
+ for (const { meta, embedding: docEmbedding } of docs) {
322
+ let bestMatch = null;
323
+ let bestScore = 0;
324
+ // Find most similar code comment
325
+ for (const { meta: codeMeta, embedding } of codeEntries) {
326
+ const similarity = this.cosineSimilarity(docEmbedding, embedding);
327
+ if (similarity > bestScore) {
328
+ bestScore = similarity;
329
+ bestMatch = codeMeta;
330
+ }
331
+ }
332
+ // Report if no good match found for technical content
333
+ if (bestScore < threshold &&
334
+ (meta.text.includes('function') ||
335
+ meta.text.includes('class') ||
336
+ meta.text.includes('method') ||
337
+ meta.text.includes('API') ||
338
+ meta.text.includes('returns'))) {
339
+ mismatches.push({
340
+ docPath: meta.path,
341
+ docSection: meta.section || '',
342
+ docText: meta.text,
343
+ bestMatchScore: bestScore,
344
+ bestMatch: bestMatch,
345
+ suggestion: 'Documentation may describe functionality not found in code',
346
+ });
347
+ }
348
+ }
349
+ // Save cache after processing
350
+ await this.saveCache();
351
+ return mismatches;
352
+ }
353
+ /**
354
+ * Calculate cosine similarity between two vectors
355
+ */
356
+ cosineSimilarity(a, b) {
357
+ let dotProduct = 0;
358
+ let normA = 0;
359
+ let normB = 0;
360
+ for (let i = 0; i < a.length; i++) {
361
+ dotProduct += a[i] * b[i];
362
+ normA += a[i] * a[i];
363
+ normB += b[i] * b[i];
364
+ }
365
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
366
+ if (denominator === 0)
367
+ return 0;
368
+ return dotProduct / denominator;
369
+ }
370
+ /**
371
+ * Split markdown into sections
372
+ */
373
+ splitIntoSections(content) {
374
+ const sections = [];
375
+ const headingPattern = /^(#{1,6})\s+(.+)$/gm;
376
+ let lastIndex = 0;
377
+ let lastHeading = 'Introduction';
378
+ let match;
379
+ while ((match = headingPattern.exec(content)) !== null) {
380
+ if (match.index > lastIndex) {
381
+ sections.push({
382
+ heading: lastHeading,
383
+ text: content.substring(lastIndex, match.index).trim(),
384
+ });
385
+ }
386
+ lastHeading = match[2];
387
+ lastIndex = match.index + match[0].length;
388
+ }
389
+ // Add final section
390
+ if (lastIndex < content.length) {
391
+ sections.push({
392
+ heading: lastHeading,
393
+ text: content.substring(lastIndex).trim(),
394
+ });
395
+ }
396
+ return sections;
397
+ }
398
+ /**
399
+ * Extract comments from code
400
+ */
401
+ extractComments(content, language) {
402
+ const comments = [];
403
+ // Language-specific comment patterns
404
+ const patterns = {
405
+ javascript: [
406
+ /\/\*\*[\s\S]*?\*\//g, // JSDoc
407
+ /\/\/.*$/gm, // Single line
408
+ ],
409
+ typescript: [
410
+ /\/\*\*[\s\S]*?\*\//g, // JSDoc
411
+ /\/\/.*$/gm, // Single line
412
+ ],
413
+ python: [
414
+ /"""[\s\S]*?"""/g, // Docstrings
415
+ /#.*$/gm, // Single line
416
+ ],
417
+ go: [
418
+ /\/\/.*$/gm, // Single line
419
+ /\/\*[\s\S]*?\*\//g, // Block
420
+ ],
421
+ rust: [
422
+ /\/\/\/.*$/gm, // Doc comments
423
+ /\/\/.*$/gm, // Single line
424
+ ],
425
+ java: [
426
+ /\/\*\*[\s\S]*?\*\//g, // Javadoc
427
+ /\/\/.*$/gm, // Single line
428
+ ],
429
+ };
430
+ const langPatterns = patterns[language] || patterns.javascript;
431
+ for (const pattern of langPatterns) {
432
+ let match;
433
+ const re = new RegExp(pattern.source, pattern.flags);
434
+ while ((match = re.exec(content)) !== null) {
435
+ const text = match[0]
436
+ .replace(/^\/\*\*|\*\/$/g, '')
437
+ .replace(/^\/\/\/?/gm, '')
438
+ .replace(/^#/gm, '')
439
+ .replace(/^\s*\*\s?/gm, '')
440
+ .trim();
441
+ if (text.length > 0) {
442
+ comments.push({
443
+ text,
444
+ symbol: this.findNearestSymbol(content, match.index),
445
+ });
446
+ }
447
+ }
448
+ }
449
+ return comments;
450
+ }
451
+ /**
452
+ * Find the function/class name nearest to a comment
453
+ */
454
+ findNearestSymbol(content, commentIndex) {
455
+ const after = content.substring(commentIndex);
456
+ const symbolMatch = after.match(/(?:function|class|const|let|var|def|async|fn|func|type|interface|struct)\s+(\w+)/);
457
+ return symbolMatch ? symbolMatch[1] : 'unknown';
458
+ }
459
+ /**
460
+ * Clear the embedding cache
461
+ */
462
+ async clearCache() {
463
+ this.embeddingCache.clear();
464
+ this.vectorIndex = [];
465
+ this.indexMetadata = [];
466
+ try {
467
+ await fs.promises.unlink(this.embeddingCacheFile);
468
+ }
469
+ catch {
470
+ // File doesn't exist - ok
471
+ }
472
+ }
473
+ /**
474
+ * Get cache statistics
475
+ */
476
+ getCacheStats() {
477
+ return {
478
+ cachedEmbeddings: this.embeddingCache.size,
479
+ indexedDocSections: this.indexMetadata.filter((m) => m.type === 'doc').length,
480
+ indexedCodeComments: this.indexMetadata.filter((m) => m.type === 'code').length,
481
+ };
482
+ }
483
+ }
484
+ //# sourceMappingURL=vectorSearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vectorSearch.js","sourceRoot":"","sources":["../../src/semantic/vectorSearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};