@lon-ask/dockit 0.1.1 → 0.1.4

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 (140) hide show
  1. package/LICENSE +21 -674
  2. package/README.md +618 -328
  3. package/SKILL.md +61 -110
  4. package/apps/client/dist/assets/{index-CqOXxsEZ.js → index-DzadxeQH.js} +2 -2
  5. package/apps/client/dist/index.html +1 -1
  6. package/apps/client/index.html +12 -0
  7. package/apps/client/package.json +26 -0
  8. package/apps/client/src/App.tsx +18 -0
  9. package/apps/client/src/api/client.ts +54 -0
  10. package/apps/client/src/components/BuildPanel.tsx +77 -0
  11. package/apps/client/src/components/DocViewer.tsx +76 -0
  12. package/apps/client/src/components/EntryDetail.tsx +322 -0
  13. package/apps/client/src/components/EntryForm.tsx +117 -0
  14. package/apps/client/src/components/EntryList.tsx +165 -0
  15. package/apps/client/src/components/GlobalSearchBar.tsx +166 -0
  16. package/apps/client/src/components/Layout.tsx +57 -0
  17. package/apps/client/src/components/SearchBar.tsx +103 -0
  18. package/apps/client/src/components/SourceForm.tsx +497 -0
  19. package/apps/client/src/hooks/useTheme.ts +19 -0
  20. package/apps/client/src/index.css +77 -0
  21. package/apps/client/src/main.tsx +13 -0
  22. package/apps/client/src/types.ts +105 -0
  23. package/apps/client/vite.config.ts +13 -0
  24. package/apps/server/dist/core/domain/entry.js +20 -0
  25. package/apps/server/dist/core/domain/entry.js.map +1 -0
  26. package/apps/server/dist/core/domain/errors.js +33 -0
  27. package/apps/server/dist/core/domain/errors.js.map +1 -0
  28. package/apps/server/dist/core/domain/knowledge-graph.js +2 -0
  29. package/apps/server/dist/core/domain/knowledge-graph.js.map +1 -0
  30. package/apps/server/dist/core/domain/types.js +2 -0
  31. package/apps/server/dist/core/domain/types.js.map +1 -0
  32. package/apps/server/dist/core/ports/IBuildRepository.js +2 -0
  33. package/apps/server/dist/core/ports/IBuildRepository.js.map +1 -0
  34. package/apps/server/dist/core/ports/IDocumentNormalizer.js +2 -0
  35. package/apps/server/dist/core/ports/IDocumentNormalizer.js.map +1 -0
  36. package/apps/server/dist/core/ports/IDocumentStore.js +2 -0
  37. package/apps/server/dist/core/ports/IDocumentStore.js.map +1 -0
  38. package/apps/server/dist/core/ports/IEntryReadModel.js +2 -0
  39. package/apps/server/dist/core/ports/IEntryReadModel.js.map +1 -0
  40. package/apps/server/dist/core/ports/IEntryRepository.js +2 -0
  41. package/apps/server/dist/core/ports/IEntryRepository.js.map +1 -0
  42. package/apps/server/dist/core/ports/IKnowledgeGraph.js +2 -0
  43. package/apps/server/dist/core/ports/IKnowledgeGraph.js.map +1 -0
  44. package/apps/server/dist/core/ports/IPathResolver.js +2 -0
  45. package/apps/server/dist/core/ports/IPathResolver.js.map +1 -0
  46. package/apps/server/dist/core/ports/ISearchEngine.js +2 -0
  47. package/apps/server/dist/core/ports/ISearchEngine.js.map +1 -0
  48. package/apps/server/dist/core/ports/ISourceProcessor.js +2 -0
  49. package/apps/server/dist/core/ports/ISourceProcessor.js.map +1 -0
  50. package/apps/server/dist/core/ports/ISourceRepository.js +2 -0
  51. package/apps/server/dist/core/ports/ISourceRepository.js.map +1 -0
  52. package/apps/server/dist/core/usecases/BuildUseCase.js +76 -0
  53. package/apps/server/dist/core/usecases/BuildUseCase.js.map +1 -0
  54. package/apps/server/dist/core/usecases/ConfigUseCase.js +62 -0
  55. package/apps/server/dist/core/usecases/ConfigUseCase.js.map +1 -0
  56. package/apps/server/dist/core/usecases/SearchUseCase.js +17 -0
  57. package/apps/server/dist/core/usecases/SearchUseCase.js.map +1 -0
  58. package/apps/server/dist/index.js +86 -0
  59. package/apps/server/dist/index.js.map +1 -0
  60. package/apps/server/dist/infrastructure/filesystem/FileSystemDocumentStore.js +25 -0
  61. package/apps/server/dist/infrastructure/filesystem/FileSystemDocumentStore.js.map +1 -0
  62. package/apps/server/dist/infrastructure/graph/GraphSearchDecorator.js +42 -0
  63. package/apps/server/dist/infrastructure/graph/GraphSearchDecorator.js.map +1 -0
  64. package/apps/server/dist/infrastructure/graph/GraphifyKnowledgeGraph.js +145 -0
  65. package/apps/server/dist/infrastructure/graph/GraphifyKnowledgeGraph.js.map +1 -0
  66. package/apps/server/dist/infrastructure/graph/index.js +3 -0
  67. package/apps/server/dist/infrastructure/graph/index.js.map +1 -0
  68. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteBuildRepository.js +21 -0
  69. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteBuildRepository.js.map +1 -0
  70. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteEntryReadModel.js +11 -0
  71. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteEntryReadModel.js.map +1 -0
  72. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteEntryRepository.js +59 -0
  73. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteEntryRepository.js.map +1 -0
  74. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteSourceRepository.js +47 -0
  75. package/apps/server/dist/infrastructure/persistence/sqlite/SqliteSourceRepository.js.map +1 -0
  76. package/apps/server/dist/infrastructure/persistence/sqlite/connection.js +50 -0
  77. package/apps/server/dist/infrastructure/persistence/sqlite/connection.js.map +1 -0
  78. package/apps/server/dist/infrastructure/search/SearchEngineFactory.js +32 -0
  79. package/apps/server/dist/infrastructure/search/SearchEngineFactory.js.map +1 -0
  80. package/apps/server/dist/infrastructure/search/json/JsonSearchEngine.js +147 -0
  81. package/apps/server/dist/infrastructure/search/json/JsonSearchEngine.js.map +1 -0
  82. package/apps/server/dist/infrastructure/search/vector/EmbeddingService.js +23 -0
  83. package/apps/server/dist/infrastructure/search/vector/EmbeddingService.js.map +1 -0
  84. package/apps/server/dist/infrastructure/search/vector/VectorSearchEngine.js +378 -0
  85. package/apps/server/dist/infrastructure/search/vector/VectorSearchEngine.js.map +1 -0
  86. package/apps/server/dist/infrastructure/source-processors/AntoraSourceProcessor.js +11 -0
  87. package/apps/server/dist/infrastructure/source-processors/AntoraSourceProcessor.js.map +1 -0
  88. package/apps/server/dist/infrastructure/source-processors/AsciidocSourceProcessor.js +9 -0
  89. package/apps/server/dist/infrastructure/source-processors/AsciidocSourceProcessor.js.map +1 -0
  90. package/apps/server/dist/infrastructure/source-processors/DocumentNormalizer.js +11 -0
  91. package/apps/server/dist/infrastructure/source-processors/DocumentNormalizer.js.map +1 -0
  92. package/apps/server/dist/infrastructure/source-processors/GithubMarkdownSourceProcessor.js +9 -0
  93. package/apps/server/dist/infrastructure/source-processors/GithubMarkdownSourceProcessor.js.map +1 -0
  94. package/apps/server/dist/infrastructure/source-processors/MavenSourceProcessor.js +9 -0
  95. package/apps/server/dist/infrastructure/source-processors/MavenSourceProcessor.js.map +1 -0
  96. package/apps/server/dist/infrastructure/source-processors/PathResolver.js +5 -0
  97. package/apps/server/dist/infrastructure/source-processors/PathResolver.js.map +1 -0
  98. package/apps/server/dist/infrastructure/source-processors/SourceCodeSourceProcessor.js +269 -0
  99. package/apps/server/dist/infrastructure/source-processors/SourceCodeSourceProcessor.js.map +1 -0
  100. package/apps/server/dist/infrastructure/source-processors/ZipSourceProcessor.js +9 -0
  101. package/apps/server/dist/infrastructure/source-processors/ZipSourceProcessor.js.map +1 -0
  102. package/apps/server/dist/mcp-http.js +93 -0
  103. package/apps/server/dist/mcp-http.js.map +1 -0
  104. package/apps/server/dist/mcp.js +339 -0
  105. package/apps/server/dist/mcp.js.map +1 -0
  106. package/apps/server/dist/routes/build.js +89 -0
  107. package/apps/server/dist/routes/build.js.map +1 -0
  108. package/apps/server/dist/routes/entries.js +52 -0
  109. package/apps/server/dist/routes/entries.js.map +1 -0
  110. package/apps/server/dist/routes/graph.js +58 -0
  111. package/apps/server/dist/routes/graph.js.map +1 -0
  112. package/apps/server/dist/routes/search.js +24 -0
  113. package/apps/server/dist/routes/search.js.map +1 -0
  114. package/apps/server/dist/routes/sources.js +100 -0
  115. package/apps/server/dist/routes/sources.js.map +1 -0
  116. package/apps/server/dist/routes/viewer.js +22 -0
  117. package/apps/server/dist/routes/viewer.js.map +1 -0
  118. package/apps/server/dist/services/antora.js +222 -0
  119. package/apps/server/dist/services/antora.js.map +1 -0
  120. package/apps/server/dist/services/asciidoc.js +206 -0
  121. package/apps/server/dist/services/asciidoc.js.map +1 -0
  122. package/apps/server/dist/services/configLoader.js +150 -0
  123. package/apps/server/dist/services/configLoader.js.map +1 -0
  124. package/apps/server/dist/services/githubMarkdown.js +221 -0
  125. package/apps/server/dist/services/githubMarkdown.js.map +1 -0
  126. package/apps/server/dist/services/maven.js +148 -0
  127. package/apps/server/dist/services/maven.js.map +1 -0
  128. package/apps/server/dist/services/normalizer.js +42 -0
  129. package/apps/server/dist/services/normalizer.js.map +1 -0
  130. package/apps/server/dist/services/paths.js +5 -0
  131. package/apps/server/dist/services/paths.js.map +1 -0
  132. package/apps/server/dist/services/textExtractor.js +46 -0
  133. package/apps/server/dist/services/textExtractor.js.map +1 -0
  134. package/apps/server/dist/services/zip.js +63 -0
  135. package/apps/server/dist/services/zip.js.map +1 -0
  136. package/apps/server/package.json +38 -0
  137. package/apps/server/src/infrastructure/source-processors/SourceCodeSourceProcessor.ts +9 -2
  138. package/bin/commands/dev.ts +2 -2
  139. package/bin/commands/serve.ts +2 -2
  140. package/package.json +22 -4
@@ -0,0 +1,378 @@
1
+ import path from 'node:path';
2
+ import fs from 'node:fs';
3
+ import { parse } from 'node-html-parser';
4
+ import { DATA_ROOT } from '../../../services/paths.js';
5
+ import { EmbeddingService } from './EmbeddingService.js';
6
+ const LANCE_DB_DIR = path.join(DATA_ROOT, '.lancedb');
7
+ const VECTOR_DIM = 384;
8
+ const MAX_EMBED_CHARS = 2000;
9
+ const MAX_SNIPPET_CHARS = 500;
10
+ const MIN_CHUNK_CHARS = 50;
11
+ const RRF_K = 25;
12
+ const FTS_WEAK_WEIGHT = 0.7;
13
+ const FTS_STRONG_WEIGHT = 2.0;
14
+ const FTS_MIN_SCORE_RATIO = 0.3;
15
+ const FTS_CONFIDENCE_RATIO = 1.3;
16
+ const PARALLEL_QUERY_LIMIT = 40;
17
+ export class VectorSearchEngine {
18
+ capability = 'vector';
19
+ embeddingService;
20
+ dbPromise = null;
21
+ entryReadModel;
22
+ constructor(entryReadModel, embeddingService) {
23
+ this.entryReadModel = entryReadModel;
24
+ this.embeddingService = embeddingService ?? new EmbeddingService();
25
+ }
26
+ async getDb() {
27
+ if (!this.dbPromise) {
28
+ const lancedb = await import('@lancedb/lancedb');
29
+ this.dbPromise = lancedb.connect(LANCE_DB_DIR);
30
+ }
31
+ return this.dbPromise;
32
+ }
33
+ async buildIndex(entryId, htmlFiles, log) {
34
+ log(`Building vector search index for ${htmlFiles.length} files`);
35
+ const db = await this.getDb();
36
+ const tableName = this.sanitizeTableName(entryId);
37
+ try {
38
+ const names = await db.tableNames();
39
+ if (names.includes(tableName)) {
40
+ await db.dropTable(tableName);
41
+ log(`Dropped existing table ${tableName}`);
42
+ }
43
+ }
44
+ catch {
45
+ // Table may not exist
46
+ }
47
+ const allChunks = [];
48
+ for (const file of htmlFiles) {
49
+ try {
50
+ const html = fs.readFileSync(file.fullPath, 'utf-8');
51
+ const root = parse(html);
52
+ const primaryTitle = root.querySelector('title')?.text.trim()
53
+ || root.querySelector('h1')?.text.trim()
54
+ || path.basename(file.relativePath, '.html');
55
+ const chunks = chunkDocument(root, primaryTitle);
56
+ if (chunks.length === 0) {
57
+ // No sections found, treat whole document as one chunk
58
+ const bodyEl = root.querySelector('body');
59
+ const bodyText = bodyEl ? bodyEl.text.replace(/\s+/g, ' ').trim() : '';
60
+ const embedText = `${primaryTitle}. ${primaryTitle}. ${bodyText.replace(/\s+/g, ' ').trim()}`.substring(0, MAX_EMBED_CHARS);
61
+ const snippet = bodyText.substring(0, MAX_SNIPPET_CHARS);
62
+ allChunks.push({
63
+ path: file.relativePath,
64
+ primaryTitle,
65
+ sectionTitle: primaryTitle,
66
+ content: snippet,
67
+ searchText: `${primaryTitle}. ${primaryTitle}. ${bodyText.replace(/\s+/g, ' ').trim()}`,
68
+ embedText,
69
+ headings: primaryTitle,
70
+ entryId,
71
+ vector: new Float32Array(VECTOR_DIM),
72
+ });
73
+ }
74
+ else {
75
+ for (const chunk of chunks) {
76
+ const embedText = `${primaryTitle}. ${primaryTitle}. ${chunk.sectionTitle}. ${chunk.text.replace(/\s+/g, ' ').trim()}`
77
+ .substring(0, MAX_EMBED_CHARS);
78
+ const searchText = `${primaryTitle}. ${primaryTitle}. ${chunk.sectionTitle}. ${chunk.text.replace(/\s+/g, ' ').trim()}`;
79
+ const snippet = chunk.text.replace(/\s+/g, ' ').trim().substring(0, MAX_SNIPPET_CHARS);
80
+ allChunks.push({
81
+ path: file.relativePath,
82
+ primaryTitle,
83
+ sectionTitle: chunk.sectionTitle,
84
+ content: snippet,
85
+ searchText,
86
+ embedText,
87
+ headings: [...chunk.headingPath, chunk.sectionTitle].join(' | '),
88
+ entryId,
89
+ vector: new Float32Array(VECTOR_DIM),
90
+ });
91
+ }
92
+ }
93
+ }
94
+ catch (err) {
95
+ log(` Warning: could not parse ${file.relativePath}: ${err.message}`);
96
+ }
97
+ }
98
+ if (allChunks.length === 0) {
99
+ log('No documents to index');
100
+ return;
101
+ }
102
+ log(`Created ${allChunks.length} chunks across ${htmlFiles.length} files`);
103
+ // Batch embed all chunks
104
+ const batchSize = 32;
105
+ const totalChunks = allChunks.length;
106
+ for (let i = 0; i < totalChunks; i += batchSize) {
107
+ const batch = allChunks.slice(i, i + batchSize);
108
+ const texts = batch.map((d) => d.embedText);
109
+ const embeddings = await this.embeddingService.embed(texts);
110
+ for (let j = 0; j < batch.length; j++) {
111
+ batch[j].vector = new Float32Array(embeddings[j]);
112
+ }
113
+ if (i % 128 === 0 || i + batchSize >= totalChunks) {
114
+ log(`Embedded ${Math.min(i + batchSize, totalChunks)}/${totalChunks} chunks`);
115
+ }
116
+ }
117
+ // Create LanceDB table
118
+ // LanceDB types require Record<string, unknown> for createTable; Float32Array vectors don't satisfy this
119
+ const table = await db.createTable(tableName, allChunks, {
120
+ mode: 'overwrite',
121
+ });
122
+ log(`Created table ${tableName} with ${allChunks.length} rows`);
123
+ // Create vector index with cosine distance
124
+ try {
125
+ const lancedb = await import('@lancedb/lancedb');
126
+ await table.createIndex('vector', {
127
+ config: lancedb.Index.ivfPq({ distanceType: 'cosine' }),
128
+ });
129
+ log(`Created vector index (cosine) on ${tableName}`);
130
+ }
131
+ catch (err) {
132
+ log(` Warning: could not create vector index: ${err.message}`);
133
+ }
134
+ // Create FTS index on searchText column (includes title for better keyword matching)
135
+ try {
136
+ const lancedb = await import('@lancedb/lancedb');
137
+ await table.createIndex('searchText', {
138
+ config: lancedb.Index.fts(),
139
+ });
140
+ log(`Created FTS index on ${tableName}`);
141
+ }
142
+ catch (err) {
143
+ log(` Warning: could not create FTS index: ${err.message}`);
144
+ }
145
+ }
146
+ async search(entryId, query, limit = 20) {
147
+ const db = await this.getDb();
148
+ const tableName = this.sanitizeTableName(entryId);
149
+ let table;
150
+ try {
151
+ table = await db.openTable(tableName);
152
+ }
153
+ catch {
154
+ return [];
155
+ }
156
+ const results = await this.hybridSearch(table, query, limit);
157
+ return results;
158
+ }
159
+ async globalSearch(query, limit = 30) {
160
+ const db = await this.getDb();
161
+ const readyEntries = await this.entryReadModel.listReadyEntries();
162
+ if (readyEntries.length === 0)
163
+ return [];
164
+ // Search all entries in parallel
165
+ const fetchLimit = Math.min(5, Math.ceil(limit / readyEntries.length));
166
+ const perEntry = Math.max(5, fetchLimit);
167
+ const entryResults = await Promise.all(readyEntries.map(async (entry) => {
168
+ try {
169
+ const table = await db.openTable(this.sanitizeTableName(entry.id));
170
+ const results = await this.hybridSearch(table, query, perEntry);
171
+ return results.map((r) => ({
172
+ ...r,
173
+ entryId: entry.id,
174
+ entryName: entry.name,
175
+ entryVersion: entry.version,
176
+ }));
177
+ }
178
+ catch {
179
+ return [];
180
+ }
181
+ }));
182
+ // Flatten and re-sort by RRF methodology
183
+ // All results already have internal ordering, just merge and limit
184
+ const allResults = entryResults.flat();
185
+ return this.deduplicateByPath(allResults).slice(0, limit);
186
+ }
187
+ async hybridSearch(table, query, limit) {
188
+ const queryEmbedding = await this.embeddingService.embed([query]);
189
+ const queryVector = new Float32Array(queryEmbedding[0]);
190
+ // Run vector and FTS queries in parallel
191
+ const [vecResults, ftsResults] = await Promise.allSettled([
192
+ table
193
+ .query()
194
+ .nearestTo(queryVector)
195
+ .distanceType('cosine')
196
+ .limit(PARALLEL_QUERY_LIMIT)
197
+ .toArray(),
198
+ table
199
+ .query()
200
+ .fullTextSearch(query, { columns: ['searchText'] })
201
+ .limit(PARALLEL_QUERY_LIMIT)
202
+ .toArray(),
203
+ ]);
204
+ const vec = vecResults.status === 'fulfilled' ? vecResults.value : [];
205
+ const fts = ftsResults.status === 'fulfilled' ? ftsResults.value : [];
206
+ if (vec.length === 0 && fts.length === 0)
207
+ return [];
208
+ // If only one query succeeded, use its results directly
209
+ if (vec.length === 0) {
210
+ return this.deduplicateByPath(fts.map((r) => ({
211
+ path: r.path,
212
+ title: r.primaryTitle || r.sectionTitle,
213
+ headings: r.headings ? r.headings.split(' | ') : [],
214
+ snippet: r.content,
215
+ }))).slice(0, limit);
216
+ }
217
+ if (fts.length === 0) {
218
+ return this.deduplicateByPath(vec.map((r) => ({
219
+ path: r.path,
220
+ title: r.primaryTitle || r.sectionTitle,
221
+ headings: r.headings ? r.headings.split(' | ') : [],
222
+ snippet: r.content,
223
+ }))).slice(0, limit);
224
+ }
225
+ // Hybrid fusion: Reciprocal Rank Fusion
226
+ const fused = this.hybridFuse(vec, fts, limit);
227
+ return fused;
228
+ }
229
+ hybridFuse(vecResults, ftsResults, limit) {
230
+ // Deduplicate: keep only best chunk per path BEFORE RRF fusion.
231
+ const dedupVec = this.dedupBest(vecResults, (r) => r._distance ?? Infinity, 'asc');
232
+ let dedupFts = this.dedupBest(ftsResults, (r) => r._score ?? 0, 'desc');
233
+ // Filter FTS results by minimum relevance threshold
234
+ if (dedupFts.length > 0) {
235
+ const maxScore = dedupFts[0]._score ?? 0;
236
+ const minScore = maxScore * FTS_MIN_SCORE_RATIO;
237
+ dedupFts = dedupFts.filter((r) => (r._score ?? 0) >= minScore);
238
+ }
239
+ // Dynamic FTS weight: if FTS is confident (clear score gap between #1 and others),
240
+ // weight FTS higher. If scores are similar, FTS is uncertain, rely more on vector.
241
+ let ftsWeight = FTS_WEAK_WEIGHT;
242
+ if (dedupFts.length >= 2) {
243
+ const maxScore = dedupFts[0]._score ?? 0;
244
+ const secondScore = dedupFts[1]._score ?? 0;
245
+ if (secondScore > 0 && maxScore / secondScore > FTS_CONFIDENCE_RATIO) {
246
+ ftsWeight = FTS_STRONG_WEIGHT;
247
+ }
248
+ }
249
+ else if (dedupFts.length === 1) {
250
+ ftsWeight = FTS_STRONG_WEIGHT; // Single result = high confidence
251
+ }
252
+ const scores = new Map();
253
+ // Apply RRF from vector results
254
+ dedupVec.forEach((r, i) => {
255
+ const path = r.path;
256
+ const rrfScore = 1 / (RRF_K + i + 1);
257
+ this.addScore(scores, path, r.primaryTitle || r.sectionTitle, r.headings, r.content, rrfScore);
258
+ });
259
+ // Apply RRF from FTS results (dynamically weighted, with title match boosting)
260
+ dedupFts.forEach((r, i) => {
261
+ const path = r.path;
262
+ let rrfScore = ftsWeight / (RRF_K + i + 1);
263
+ // Title match boost: if query terms appear in title, extra 50%
264
+ const queryTerms = (r._query || '').toLowerCase().split(/\s+/).filter((t) => t.length > 2);
265
+ const sectionTitle = (r.sectionTitle || '').toLowerCase();
266
+ const primaryTitle = (r.primaryTitle || '').toLowerCase();
267
+ const titleMatch = queryTerms.some((t) => sectionTitle.includes(t) || primaryTitle.includes(t));
268
+ if (titleMatch) {
269
+ rrfScore *= 1.5;
270
+ }
271
+ this.addScore(scores, path, r.primaryTitle || r.sectionTitle, r.headings, r.content, rrfScore);
272
+ });
273
+ // Sort by fused RRF score descending
274
+ return [...scores.values()]
275
+ .sort((a, b) => b.score - a.score)
276
+ .slice(0, limit)
277
+ .map(({ score, ...rest }) => rest);
278
+ }
279
+ addScore(map, path, title, headings, snippet, score) {
280
+ const current = map.get(path);
281
+ if (!current) {
282
+ map.set(path, {
283
+ path,
284
+ title,
285
+ headings: headings ? headings.split(' | ') : [],
286
+ snippet,
287
+ score,
288
+ });
289
+ }
290
+ else {
291
+ current.score += score;
292
+ // Use FTS-chosen content (more likely to have keyword match in snippet)
293
+ if (score > 0 && snippet) {
294
+ current.snippet = snippet;
295
+ current.title = title;
296
+ }
297
+ }
298
+ }
299
+ dedupBest(results, scoreFn, order) {
300
+ const best = new Map();
301
+ for (const r of results) {
302
+ const s = scoreFn(r);
303
+ const existing = best.get(r.path);
304
+ if (!existing ||
305
+ (order === 'asc' && s < existing.score) ||
306
+ (order === 'desc' && s > existing.score)) {
307
+ best.set(r.path, { item: r, score: s });
308
+ }
309
+ }
310
+ return [...best.values()].map((v) => v.item);
311
+ }
312
+ deduplicateByPath(results) {
313
+ const seen = new Set();
314
+ return results.filter((r) => {
315
+ if (seen.has(r.path))
316
+ return false;
317
+ seen.add(r.path);
318
+ return true;
319
+ });
320
+ }
321
+ sanitizeTableName(entryId) {
322
+ return entryId.replace(/[^a-zA-Z0-9_]/g, '_');
323
+ }
324
+ }
325
+ function chunkDocument(root, pageTitle) {
326
+ const chunks = [];
327
+ const body = root.querySelector('body');
328
+ if (!body)
329
+ return chunks;
330
+ const headingStack = [];
331
+ let currentSectionHeading = pageTitle;
332
+ let currentText = '';
333
+ const headingSelector = 'h1, h2, h3, h4';
334
+ // Collect all heading and text elements in document order
335
+ const elements = body.querySelectorAll(`${headingSelector}, p, div, section, article, ul, ol, dl, pre, blockquote, table, figure`);
336
+ for (const el of elements) {
337
+ const tagName = el.tagName?.toLowerCase();
338
+ const headingMatch = tagName?.match(/^h([1-4])$/);
339
+ if (headingMatch) {
340
+ // Save previous chunk if it has enough content
341
+ if (currentText.trim().length >= MIN_CHUNK_CHARS) {
342
+ chunks.push({
343
+ primaryTitle: pageTitle,
344
+ sectionTitle: currentSectionHeading,
345
+ text: currentText.replace(/\s+/g, ' ').trim().substring(0, MAX_EMBED_CHARS),
346
+ headingPath: [...headingStack],
347
+ });
348
+ }
349
+ // Start new section
350
+ const level = parseInt(headingMatch[1]);
351
+ const headingText = el.text.trim();
352
+ currentSectionHeading = headingText || currentSectionHeading;
353
+ // Adjust heading stack
354
+ while (headingStack.length >= level)
355
+ headingStack.pop();
356
+ headingStack.push(headingText || pageTitle);
357
+ currentText = '';
358
+ }
359
+ else {
360
+ // Accumulate text
361
+ const text = el.text?.trim();
362
+ if (text) {
363
+ currentText += ' ' + text;
364
+ }
365
+ }
366
+ }
367
+ // Save the last chunk
368
+ if (currentText.trim().length >= MIN_CHUNK_CHARS) {
369
+ chunks.push({
370
+ primaryTitle: pageTitle,
371
+ sectionTitle: currentSectionHeading,
372
+ text: currentText.replace(/\s+/g, ' ').trim().substring(0, MAX_EMBED_CHARS),
373
+ headingPath: [...headingStack],
374
+ });
375
+ }
376
+ return chunks;
377
+ }
378
+ //# sourceMappingURL=VectorSearchEngine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VectorSearchEngine.js","sourceRoot":"","sources":["../../../../src/infrastructure/search/vector/VectorSearchEngine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import path from 'node:path';
2
+ import { buildAntoraSource } from '../../services/antora.js';
3
+ export class AntoraSourceProcessor {
4
+ sourceType = 'antora';
5
+ async process(source, _sourceDir, entryDir, entryId, log) {
6
+ const config = source.config;
7
+ const workDir = path.join(entryDir, 'antora', source.id);
8
+ return buildAntoraSource(config, entryId, workDir, log);
9
+ }
10
+ }
11
+ //# sourceMappingURL=AntoraSourceProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AntoraSourceProcessor.js","sourceRoot":"","sources":["../../../src/infrastructure/source-processors/AntoraSourceProcessor.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAG7B,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,OAAO,qBAAqB;IACvB,UAAU,GAAG,QAAiB,CAAC;IAExC,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,UAAkB,EAAE,QAAgB,EAAE,OAAe,EAAE,GAA0B;QAC7G,MAAM,MAAM,GAAG,MAAM,CAAC,MAA4B,CAAC;QACnD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QACzD,OAAO,iBAAiB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { buildAsciidocSource } from '../../services/asciidoc.js';
2
+ export class AsciidocSourceProcessor {
3
+ sourceType = 'asciidoc';
4
+ async process(source, sourceDir, _entryDir, _entryId, log) {
5
+ await buildAsciidocSource(source.config, sourceDir, log);
6
+ return sourceDir;
7
+ }
8
+ }
9
+ //# sourceMappingURL=AsciidocSourceProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AsciidocSourceProcessor.js","sourceRoot":"","sources":["../../../src/infrastructure/source-processors/AsciidocSourceProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,OAAO,uBAAuB;IACzB,UAAU,GAAG,UAAmB,CAAC;IAE1C,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,SAAiB,EAAE,SAAiB,EAAE,QAAgB,EAAE,GAA0B;QAC9G,MAAM,mBAAmB,CAAC,MAAM,CAAC,MAA8B,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACjF,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,11 @@
1
+ import { normalizeDocs } from '../../services/normalizer.js';
2
+ export class DocumentNormalizer {
3
+ normalize(sources, outputDir, log) {
4
+ return normalizeDocs(sources, outputDir, log);
5
+ }
6
+ filterSources(sources, allSourceRecords) {
7
+ const sourceCodeLabels = new Set(allSourceRecords.filter((s) => s.type === 'source-code').map((s) => s.label));
8
+ return sources.filter((s) => !sourceCodeLabels.has(s.label));
9
+ }
10
+ }
11
+ //# sourceMappingURL=DocumentNormalizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DocumentNormalizer.js","sourceRoot":"","sources":["../../../src/infrastructure/source-processors/DocumentNormalizer.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAE7D,MAAM,OAAO,kBAAkB;IAC7B,SAAS,CAAC,OAA8C,EAAE,SAAiB,EAAE,GAA0B;QACrG,OAAO,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,aAAa,CAAC,OAA8C,EAAE,gBAA0B;QACtF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAC9B,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAC7E,CAAC;QACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC/D,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { buildGithubMarkdownSource } from '../../services/githubMarkdown.js';
2
+ export class GithubMarkdownSourceProcessor {
3
+ sourceType = 'github-markdown';
4
+ async process(source, sourceDir, _entryDir, _entryId, log) {
5
+ await buildGithubMarkdownSource(source.config, sourceDir, log);
6
+ return sourceDir;
7
+ }
8
+ }
9
+ //# sourceMappingURL=GithubMarkdownSourceProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GithubMarkdownSourceProcessor.js","sourceRoot":"","sources":["../../../src/infrastructure/source-processors/GithubMarkdownSourceProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAE7E,MAAM,OAAO,6BAA6B;IAC/B,UAAU,GAAG,iBAA0B,CAAC;IAEjD,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,SAAiB,EAAE,SAAiB,EAAE,QAAgB,EAAE,GAA0B;QAC9G,MAAM,yBAAyB,CAAC,MAAM,CAAC,MAAoC,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QAC7F,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { downloadAndExtractMavenJar } from '../../services/maven.js';
2
+ export class MavenSourceProcessor {
3
+ sourceType = 'maven';
4
+ async process(source, sourceDir, _entryDir, _entryId, log) {
5
+ await downloadAndExtractMavenJar(source.config, sourceDir, log);
6
+ return sourceDir;
7
+ }
8
+ }
9
+ //# sourceMappingURL=MavenSourceProcessor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MavenSourceProcessor.js","sourceRoot":"","sources":["../../../src/infrastructure/source-processors/MavenSourceProcessor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,0BAA0B,EAAE,MAAM,yBAAyB,CAAC;AAErE,MAAM,OAAO,oBAAoB;IACtB,UAAU,GAAG,OAAgB,CAAC;IAEvC,KAAK,CAAC,OAAO,CAAC,MAAc,EAAE,SAAiB,EAAE,SAAiB,EAAE,QAAgB,EAAE,GAA0B;QAC9G,MAAM,0BAA0B,CAAC,MAAM,CAAC,MAA2B,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;QACrF,OAAO,SAAS,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ import { DATA_ROOT } from '../../services/paths.js';
2
+ export class PathResolver {
3
+ dataRoot = DATA_ROOT;
4
+ }
5
+ //# sourceMappingURL=PathResolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PathResolver.js","sourceRoot":"","sources":["../../../src/infrastructure/source-processors/PathResolver.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAEpD,MAAM,OAAO,YAAY;IACd,QAAQ,GAAG,SAAS,CAAC;CAC/B"}