skannr 0.1.1

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 (142) hide show
  1. package/.eslintrc.js +22 -0
  2. package/README.md +109 -0
  3. package/dist/agent-cli.d.ts +7 -0
  4. package/dist/agent-cli.d.ts.map +1 -0
  5. package/dist/agent-cli.js +364 -0
  6. package/dist/agent-cli.js.map +1 -0
  7. package/dist/agent.d.ts +115 -0
  8. package/dist/agent.d.ts.map +1 -0
  9. package/dist/agent.js +340 -0
  10. package/dist/agent.js.map +1 -0
  11. package/dist/benchmark.d.ts +53 -0
  12. package/dist/benchmark.d.ts.map +1 -0
  13. package/dist/benchmark.js +307 -0
  14. package/dist/benchmark.js.map +1 -0
  15. package/dist/cache.d.ts +97 -0
  16. package/dist/cache.d.ts.map +1 -0
  17. package/dist/cache.js +284 -0
  18. package/dist/cache.js.map +1 -0
  19. package/dist/cli.d.ts +6 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +238 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config.d.ts +8 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +52 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/index.d.ts +18 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +176 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/languages/GenericAdapter.d.ts +10 -0
  32. package/dist/languages/GenericAdapter.d.ts.map +1 -0
  33. package/dist/languages/GenericAdapter.js +41 -0
  34. package/dist/languages/GenericAdapter.js.map +1 -0
  35. package/dist/languages/LanguageAdapter.d.ts +14 -0
  36. package/dist/languages/LanguageAdapter.d.ts.map +1 -0
  37. package/dist/languages/LanguageAdapter.js +3 -0
  38. package/dist/languages/LanguageAdapter.js.map +1 -0
  39. package/dist/languages/PythonAdapter.d.ts +10 -0
  40. package/dist/languages/PythonAdapter.d.ts.map +1 -0
  41. package/dist/languages/PythonAdapter.js +98 -0
  42. package/dist/languages/PythonAdapter.js.map +1 -0
  43. package/dist/languages/TypeScriptAdapter.d.ts +17 -0
  44. package/dist/languages/TypeScriptAdapter.d.ts.map +1 -0
  45. package/dist/languages/TypeScriptAdapter.js +321 -0
  46. package/dist/languages/TypeScriptAdapter.js.map +1 -0
  47. package/dist/languages/registry.d.ts +4 -0
  48. package/dist/languages/registry.d.ts.map +1 -0
  49. package/dist/languages/registry.js +86 -0
  50. package/dist/languages/registry.js.map +1 -0
  51. package/dist/mapper.d.ts +49 -0
  52. package/dist/mapper.d.ts.map +1 -0
  53. package/dist/mapper.js +386 -0
  54. package/dist/mapper.js.map +1 -0
  55. package/dist/ranker-enhanced.d.ts +37 -0
  56. package/dist/ranker-enhanced.d.ts.map +1 -0
  57. package/dist/ranker-enhanced.js +395 -0
  58. package/dist/ranker-enhanced.js.map +1 -0
  59. package/dist/ranker.d.ts +14 -0
  60. package/dist/ranker.d.ts.map +1 -0
  61. package/dist/ranker.js +105 -0
  62. package/dist/ranker.js.map +1 -0
  63. package/dist/rocket-chat-scope.d.ts +7 -0
  64. package/dist/rocket-chat-scope.d.ts.map +1 -0
  65. package/dist/rocket-chat-scope.js +95 -0
  66. package/dist/rocket-chat-scope.js.map +1 -0
  67. package/dist/scanner.d.ts +16 -0
  68. package/dist/scanner.d.ts.map +1 -0
  69. package/dist/scanner.js +228 -0
  70. package/dist/scanner.js.map +1 -0
  71. package/dist/skeletonizer.d.ts +5 -0
  72. package/dist/skeletonizer.d.ts.map +1 -0
  73. package/dist/skeletonizer.js +52 -0
  74. package/dist/skeletonizer.js.map +1 -0
  75. package/dist/tokenizer.d.ts +9 -0
  76. package/dist/tokenizer.d.ts.map +1 -0
  77. package/dist/tokenizer.js +21 -0
  78. package/dist/tokenizer.js.map +1 -0
  79. package/dist/types.d.ts +68 -0
  80. package/dist/types.d.ts.map +1 -0
  81. package/dist/types.js +6 -0
  82. package/dist/types.js.map +1 -0
  83. package/gemini-extension/GEMINI.md +26 -0
  84. package/gemini-extension/gemini-extension.json +12 -0
  85. package/gemini-extension/package.json +14 -0
  86. package/gemini-extension/src/server.ts +63 -0
  87. package/gemini-extension/tsconfig.json +14 -0
  88. package/jest.config.js +5 -0
  89. package/package.json +46 -0
  90. package/src/agent-cli.ts +383 -0
  91. package/src/agent.ts +344 -0
  92. package/src/benchmark.ts +389 -0
  93. package/src/cache.ts +317 -0
  94. package/src/cli.ts +223 -0
  95. package/src/config.ts +22 -0
  96. package/src/index.ts +215 -0
  97. package/src/languages/GenericAdapter.ts +44 -0
  98. package/src/languages/LanguageAdapter.ts +14 -0
  99. package/src/languages/PythonAdapter.ts +74 -0
  100. package/src/languages/TypeScriptAdapter.ts +338 -0
  101. package/src/languages/registry.ts +49 -0
  102. package/src/mapper.ts +448 -0
  103. package/src/ranker-enhanced.ts +460 -0
  104. package/src/ranker.ts +92 -0
  105. package/src/scanner.ts +201 -0
  106. package/src/skeletonizer.ts +16 -0
  107. package/src/tokenizer.ts +20 -0
  108. package/src/types.ts +71 -0
  109. package/tests/agent.tools.test.ts +81 -0
  110. package/tests/benchmark.test.ts +31 -0
  111. package/tests/fixtures/sample.py +17 -0
  112. package/tests/fixtures/sample.ts +13 -0
  113. package/tests/fixtures/src/api/routes.ts +1 -0
  114. package/tests/fixtures/src/auth/permission.ts +3 -0
  115. package/tests/ranker-enhanced.test.ts +68 -0
  116. package/tests/ranker.test.ts +75 -0
  117. package/tests/scanner.scope.test.ts +41 -0
  118. package/tests/setup-fixtures.js +29 -0
  119. package/tests/skeletonizer.test.ts +142 -0
  120. package/tsconfig.json +21 -0
  121. package/uca-landing/index.html +17 -0
  122. package/uca-landing/package.json +23 -0
  123. package/uca-landing/postcss.config.js +6 -0
  124. package/uca-landing/src/App.jsx +43 -0
  125. package/uca-landing/src/components/AgentMode.jsx +45 -0
  126. package/uca-landing/src/components/CliReference.jsx +49 -0
  127. package/uca-landing/src/components/Features.jsx +63 -0
  128. package/uca-landing/src/components/Footer.jsx +35 -0
  129. package/uca-landing/src/components/Hero.jsx +124 -0
  130. package/uca-landing/src/components/HowItWorks.jsx +60 -0
  131. package/uca-landing/src/components/Install.jsx +90 -0
  132. package/uca-landing/src/components/LanguageSupport.jsx +63 -0
  133. package/uca-landing/src/components/Navbar.jsx +86 -0
  134. package/uca-landing/src/components/Problem.jsx +51 -0
  135. package/uca-landing/src/components/Reveal.jsx +40 -0
  136. package/uca-landing/src/components/WorksWith.jsx +59 -0
  137. package/uca-landing/src/hooks/useScrollNav.js +13 -0
  138. package/uca-landing/src/hooks/useTypewriter.js +41 -0
  139. package/uca-landing/src/index.css +13 -0
  140. package/uca-landing/src/main.jsx +10 -0
  141. package/uca-landing/tailwind.config.js +68 -0
  142. package/uca-landing/vite.config.js +6 -0
@@ -0,0 +1,395 @@
1
+ "use strict";
2
+ /**
3
+ * Enhanced file ranking with dependency analysis and semantic scoring
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.calculateEnhancedScore = calculateEnhancedScore;
40
+ exports.extractFileMetadata = extractFileMetadata;
41
+ exports.analyzeDependencyGraph = analyzeDependencyGraph;
42
+ exports.rankFilesEnhanced = rankFilesEnhanced;
43
+ const path = __importStar(require("path"));
44
+ const scanner_1 = require("./scanner");
45
+ const registry_1 = require("./languages/registry");
46
+ function splitIdentifierTokens(input) {
47
+ return input
48
+ .replace(/([a-z])([A-Z])/g, '$1 $2')
49
+ .split(/[^a-zA-Z0-9]+/)
50
+ .map(token => token.toLowerCase())
51
+ .filter(token => token.length > 2);
52
+ }
53
+ function expandQueryTerms(question) {
54
+ const baseTerms = splitIdentifierTokens(question);
55
+ const expansions = {
56
+ auth: ['authentication', 'authorize', 'permission', 'access'],
57
+ authentication: ['auth', 'login', 'permission', 'session'],
58
+ permission: ['authorization', 'role', 'policy', 'access'],
59
+ message: ['messages', 'chat', 'room', 'send'],
60
+ upload: ['file', 'media', 'attachment', 'storage'],
61
+ endpoint: ['route', 'api', 'controller', 'handler'],
62
+ encryption: ['crypto', 'key', 'cipher', 'secure'],
63
+ };
64
+ const out = new Set(baseTerms);
65
+ for (const term of baseTerms) {
66
+ const aliases = expansions[term];
67
+ if (!aliases)
68
+ continue;
69
+ for (const alias of aliases) {
70
+ out.add(alias);
71
+ }
72
+ }
73
+ return Array.from(out);
74
+ }
75
+ function normalizeToUnit(values) {
76
+ if (values.length === 0)
77
+ return [];
78
+ const min = Math.min(...values);
79
+ const max = Math.max(...values);
80
+ if (max === min) {
81
+ return values.map(() => 0.5);
82
+ }
83
+ return values.map(value => (value - min) / (max - min));
84
+ }
85
+ function calculateLexicalScore(filePath, fileContent, terms) {
86
+ if (terms.length === 0)
87
+ return 0.5;
88
+ const pathTokens = splitIdentifierTokens(filePath);
89
+ const contentTokens = splitIdentifierTokens(fileContent);
90
+ let raw = 0;
91
+ for (const term of terms) {
92
+ const pathMatches = pathTokens.filter(token => token.includes(term)).length;
93
+ const contentMatches = contentTokens.filter(token => token === term).length;
94
+ if (pathMatches > 0) {
95
+ raw += Math.min(pathMatches * 2, 6);
96
+ }
97
+ if (contentMatches > 0) {
98
+ raw += Math.min(Math.sqrt(contentMatches), 4);
99
+ }
100
+ }
101
+ return Math.min(raw / (terms.length * 5), 1);
102
+ }
103
+ function calculateStructuralScore(filePath, question, metadata, terms) {
104
+ if (!metadata)
105
+ return 0;
106
+ let score = 0;
107
+ const q = question.toLowerCase();
108
+ const exportHits = metadata.exports.filter(exp => terms.some(term => exp.toLowerCase().includes(term))).length;
109
+ score += Math.min(exportHits * 0.2, 0.5);
110
+ const importHits = metadata.imports.filter(imp => terms.some(term => imp.toLowerCase().includes(term))).length;
111
+ score += Math.min(importHits * 0.05, 0.2);
112
+ const density = metadata.linesOfCode > 0
113
+ ? metadata.symbolCount / Math.max(metadata.linesOfCode / 100, 1)
114
+ : 0;
115
+ score += Math.min(density * 0.05, 0.2);
116
+ if ((q.includes('where') || q.includes('entry') || q.includes('flow')) && filePath.includes('index')) {
117
+ score += 0.1;
118
+ }
119
+ if ((q.includes('permission') || q.includes('auth')) && filePath.includes('auth')) {
120
+ score += 0.15;
121
+ }
122
+ if ((q.includes('message') || q.includes('send')) && (filePath.includes('message') || filePath.includes('room'))) {
123
+ score += 0.15;
124
+ }
125
+ return Math.min(score, 1);
126
+ }
127
+ function calculateCrossRerankScore(filePath, content, question, terms) {
128
+ const q = question.toLowerCase();
129
+ const contentLower = content.toLowerCase();
130
+ const pathLower = filePath.toLowerCase();
131
+ let score = 0;
132
+ for (const term of terms) {
133
+ if (pathLower.includes(term)) {
134
+ score += 0.1;
135
+ }
136
+ const termRegex = new RegExp(`\\b${term}\\b`, 'g');
137
+ const occurrences = (contentLower.match(termRegex) || []).length;
138
+ if (occurrences > 0) {
139
+ score += Math.min(occurrences * 0.03, 0.2);
140
+ }
141
+ }
142
+ // Phrase and intent matches get a strong rerank boost.
143
+ if (contentLower.includes(q) || pathLower.includes(q)) {
144
+ score += 0.25;
145
+ }
146
+ const hasVerbIntent = /(how|where|why|send|check|validate|authorize|upload)/.test(q);
147
+ if (hasVerbIntent && /(function|class|return|export)/.test(contentLower)) {
148
+ score += 0.1;
149
+ }
150
+ return Math.min(score, 1);
151
+ }
152
+ /**
153
+ * Enhanced relevance scoring with multiple factors
154
+ */
155
+ function calculateEnhancedScore(filePath, fileContent, question, metadata) {
156
+ if (!fileContent) {
157
+ return { score: 0, reasons: [] };
158
+ }
159
+ const reasons = [];
160
+ const questionLower = question.toLowerCase();
161
+ const questionWords = questionLower
162
+ .split(/\s+/)
163
+ .filter(word => word.length > 2);
164
+ if (questionWords.length === 0) {
165
+ return { score: 0.5, reasons: ['No meaningful keywords'] };
166
+ }
167
+ const fileName = path.basename(filePath, path.extname(filePath)).toLowerCase();
168
+ const pathComponents = filePath.toLowerCase().split(path.sep);
169
+ const contentLower = fileContent.toLowerCase();
170
+ let score = 0;
171
+ const weights = {
172
+ filenameExact: 10,
173
+ filenamePartial: 5,
174
+ pathComponent: 3,
175
+ contentFrequency: 2,
176
+ exportMatch: 4,
177
+ symbolDensity: 2,
178
+ fileSize: 1,
179
+ };
180
+ // 1. Filename matching (highest priority)
181
+ for (const word of questionWords) {
182
+ if (fileName === word) {
183
+ score += weights.filenameExact;
184
+ reasons.push(`Exact filename match: "${word}"`);
185
+ }
186
+ else if (fileName.includes(word)) {
187
+ score += weights.filenamePartial;
188
+ reasons.push(`Filename contains: "${word}"`);
189
+ }
190
+ }
191
+ // 2. Path component matching
192
+ for (const word of questionWords) {
193
+ const matchingComponents = pathComponents.filter(comp => comp.includes(word));
194
+ if (matchingComponents.length > 0) {
195
+ score += weights.pathComponent * matchingComponents.length;
196
+ reasons.push(`Path contains: "${word}" (${matchingComponents.length} times)`);
197
+ }
198
+ }
199
+ // 3. Content frequency analysis
200
+ for (const word of questionWords) {
201
+ const regex = new RegExp(`\\b${word}\\b`, 'gi');
202
+ const matches = contentLower.match(regex) || [];
203
+ const frequency = matches.length;
204
+ if (frequency > 0) {
205
+ // Logarithmic scaling to prevent over-weighting very common words
206
+ const contentScore = Math.min(Math.log2(frequency + 1) * weights.contentFrequency, 10);
207
+ score += contentScore;
208
+ if (frequency > 5) {
209
+ reasons.push(`High frequency of "${word}": ${frequency} occurrences`);
210
+ }
211
+ else if (frequency > 0) {
212
+ reasons.push(`Contains "${word}": ${frequency} times`);
213
+ }
214
+ }
215
+ }
216
+ // 4. Export matching (if file exports symbols matching question)
217
+ if (metadata?.exports) {
218
+ for (const word of questionWords) {
219
+ const matchingExports = metadata.exports.filter(exp => exp.toLowerCase().includes(word));
220
+ if (matchingExports.length > 0) {
221
+ score += weights.exportMatch * matchingExports.length;
222
+ reasons.push(`Exports symbols matching "${word}": ${matchingExports.join(', ')}`);
223
+ }
224
+ }
225
+ }
226
+ // 5. Symbol density (files with more symbols are potentially more relevant)
227
+ if (metadata?.symbolCount && metadata?.linesOfCode) {
228
+ const density = metadata.symbolCount / (metadata.linesOfCode / 100);
229
+ if (density > 1) {
230
+ score += Math.min(density * weights.symbolDensity, 5);
231
+ reasons.push(`High symbol density: ${density.toFixed(1)} symbols per 100 LOC`);
232
+ }
233
+ }
234
+ // 6. File size penalty (very large or very small files are less likely to be relevant)
235
+ if (metadata?.linesOfCode) {
236
+ const loc = metadata.linesOfCode;
237
+ if (loc > 50 && loc < 500) {
238
+ score += weights.fileSize;
239
+ reasons.push('Optimal file size');
240
+ }
241
+ else if (loc >= 500) {
242
+ score -= 1;
243
+ reasons.push('Large file - may need refinement');
244
+ }
245
+ }
246
+ // Normalize score to 0-1 range
247
+ const maxPossibleScore = questionWords.length *
248
+ (weights.filenameExact + weights.pathComponent + 10); // Approximate max
249
+ const normalizedScore = Math.min(score / maxPossibleScore, 1);
250
+ return { score: normalizedScore, reasons };
251
+ }
252
+ /**
253
+ * Extract file metadata using AST analysis
254
+ */
255
+ function extractFileMetadata(filePath) {
256
+ try {
257
+ const content = (0, scanner_1.readFileContent)(filePath);
258
+ if (!content)
259
+ return null;
260
+ const adapter = (0, registry_1.getAdapter)(filePath);
261
+ const symbols = adapter.extractSymbols(content);
262
+ const imports = adapter.extractImports(content);
263
+ const exports = symbols.filter((symbol) => symbol.kind === 'export').map((symbol) => symbol.name);
264
+ const symbolCount = symbols.filter((symbol) => symbol.kind !== 'export').length;
265
+ const linesOfCode = content.split('\n').length;
266
+ return {
267
+ imports,
268
+ exports,
269
+ symbolCount,
270
+ linesOfCode,
271
+ };
272
+ }
273
+ catch (error) {
274
+ return null;
275
+ }
276
+ }
277
+ /**
278
+ * Analyze file dependencies to boost scores of dependent files
279
+ */
280
+ function analyzeDependencyGraph(filePaths, rootPath) {
281
+ const dependencyMap = new Map();
282
+ for (const filePath of filePaths) {
283
+ try {
284
+ const content = (0, scanner_1.readFileContent)(filePath);
285
+ if (!content)
286
+ continue;
287
+ const dependencies = [];
288
+ const importRegex = /(?:import\s+(?:{[^}]*}|[^;]+)\s+from\s+['"]([^'"]+)['"]|from\s+([A-Za-z0-9_./-]+)\s+import|import\s+([A-Za-z0-9_.,\s]+))/g;
289
+ let match;
290
+ while ((match = importRegex.exec(content)) !== null) {
291
+ const importPath = (match[1] || match[2] || match[3]?.split(',')[0]?.trim() || '').trim();
292
+ if (!importPath) {
293
+ continue;
294
+ }
295
+ // Resolve relative imports
296
+ if (importPath.startsWith('.')) {
297
+ const resolvedPath = path.resolve(path.dirname(filePath), importPath);
298
+ const relativePath = path.relative(rootPath, resolvedPath);
299
+ dependencies.push(relativePath);
300
+ }
301
+ else {
302
+ dependencies.push(importPath);
303
+ }
304
+ }
305
+ const key = path.relative(rootPath, filePath);
306
+ dependencyMap.set(key, dependencies);
307
+ }
308
+ catch (error) {
309
+ continue;
310
+ }
311
+ }
312
+ return dependencyMap;
313
+ }
314
+ /**
315
+ * Enhanced ranking with dependency analysis
316
+ */
317
+ function rankFilesEnhanced(filePaths, question, limit = 10, rootPath) {
318
+ const resolvedRoot = rootPath || process.cwd();
319
+ const expandedTerms = expandQueryTerms(question);
320
+ const records = [];
321
+ // First pass: collect raw component scores.
322
+ for (const filePath of filePaths) {
323
+ const content = (0, scanner_1.readFileContent)(filePath) || '';
324
+ const metadata = extractFileMetadata(filePath);
325
+ const enhancedScore = calculateEnhancedScore(filePath, content, question, metadata || undefined);
326
+ const lexicalScore = calculateLexicalScore(filePath, content, expandedTerms);
327
+ const structuralScore = calculateStructuralScore(filePath, question, metadata, expandedTerms);
328
+ const reasons = [...enhancedScore.reasons];
329
+ const baseScore = (lexicalScore * 0.5 +
330
+ enhancedScore.score * 0.3 +
331
+ structuralScore * 0.2);
332
+ records.push({
333
+ file: {
334
+ path: filePath,
335
+ score: 0,
336
+ reasons,
337
+ symbolCount: metadata?.symbolCount,
338
+ dependencies: metadata?.imports,
339
+ },
340
+ metadata,
341
+ content,
342
+ baseScore,
343
+ });
344
+ }
345
+ if (records.length === 0) {
346
+ return [];
347
+ }
348
+ // Second pass: dependency-aware score contribution.
349
+ const dependencyMap = analyzeDependencyGraph(filePaths, resolvedRoot);
350
+ const dependencyScores = [];
351
+ for (const record of records) {
352
+ const relativePath = path.relative(resolvedRoot, record.file.path);
353
+ let dependencyBoost = 0;
354
+ for (const otherRecord of records) {
355
+ if (otherRecord.file.path === record.file.path)
356
+ continue;
357
+ const otherRelPath = path.relative(resolvedRoot, otherRecord.file.path);
358
+ const otherDeps = dependencyMap.get(otherRelPath) || [];
359
+ if (otherDeps.some(dep => dep.includes(path.parse(relativePath).name))) {
360
+ dependencyBoost += Math.max(otherRecord.baseScore, 0) * 0.15;
361
+ }
362
+ }
363
+ dependencyScores.push(dependencyBoost);
364
+ }
365
+ const normalizedDependencyScores = normalizeToUnit(dependencyScores);
366
+ // Third pass: normalize and combine hybrid components.
367
+ const normalizedBaseScores = normalizeToUnit(records.map(record => record.baseScore));
368
+ records.forEach((record, index) => {
369
+ const combined = normalizedBaseScores[index] * 0.85 + normalizedDependencyScores[index] * 0.15;
370
+ record.file.score = combined;
371
+ if (normalizedDependencyScores[index] > 0.2) {
372
+ record.file.reasons.push(`Dependency centrality boost: ${(normalizedDependencyScores[index] * 100).toFixed(0)}%`);
373
+ }
374
+ });
375
+ // Fourth pass: cross-rerank on top candidates.
376
+ records.sort((a, b) => b.file.score - a.file.score || a.file.path.localeCompare(b.file.path));
377
+ const rerankWindow = Math.min(records.length, Math.max(limit * 4, 20));
378
+ const topRecords = records.slice(0, rerankWindow);
379
+ for (const record of topRecords) {
380
+ const rerank = calculateCrossRerankScore(record.file.path, record.content, question, expandedTerms);
381
+ record.file.score = Math.min(record.file.score * 0.75 + rerank * 0.25, 1);
382
+ if (rerank > 0.2) {
383
+ record.file.reasons.push(`Cross-rerank relevance: ${(rerank * 100).toFixed(0)}%`);
384
+ }
385
+ }
386
+ // Sort by score descending
387
+ records.sort((a, b) => {
388
+ if (b.file.score !== a.file.score) {
389
+ return b.file.score - a.file.score;
390
+ }
391
+ return a.file.path.localeCompare(b.file.path);
392
+ });
393
+ return records.slice(0, limit).map(record => record.file);
394
+ }
395
+ //# sourceMappingURL=ranker-enhanced.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranker-enhanced.js","sourceRoot":"","sources":["../src/ranker-enhanced.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * File ranking based on relevance to a question
3
+ */
4
+ import { RankedFile } from './types';
5
+ /**
6
+ * Simple keyword-based relevance scoring
7
+ * Returns a score between 0 and 1
8
+ */
9
+ export declare function calculateRelevanceScore(filePath: string, fileContent: string | null, question: string): number;
10
+ /**
11
+ * Rank files by relevance to the question
12
+ */
13
+ export declare function rankFiles(filePaths: string[], question: string, limit?: number): RankedFile[];
14
+ //# sourceMappingURL=ranker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranker.d.ts","sourceRoot":"","sources":["../src/ranker.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,QAAQ,EAAE,MAAM,GACf,MAAM,CA2CR;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,SAAS,EAAE,MAAM,EAAE,EACnB,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAW,GACjB,UAAU,EAAE,CAuBd"}
package/dist/ranker.js ADDED
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ /**
3
+ * File ranking based on relevance to a question
4
+ */
5
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ var desc = Object.getOwnPropertyDescriptor(m, k);
8
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9
+ desc = { enumerable: true, get: function() { return m[k]; } };
10
+ }
11
+ Object.defineProperty(o, k2, desc);
12
+ }) : (function(o, m, k, k2) {
13
+ if (k2 === undefined) k2 = k;
14
+ o[k2] = m[k];
15
+ }));
16
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
17
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
18
+ }) : function(o, v) {
19
+ o["default"] = v;
20
+ });
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.calculateRelevanceScore = calculateRelevanceScore;
40
+ exports.rankFiles = rankFiles;
41
+ const path = __importStar(require("path"));
42
+ const scanner_1 = require("./scanner");
43
+ /**
44
+ * Simple keyword-based relevance scoring
45
+ * Returns a score between 0 and 1
46
+ */
47
+ function calculateRelevanceScore(filePath, fileContent, question) {
48
+ if (!fileContent) {
49
+ return 0;
50
+ }
51
+ const questionLower = question.toLowerCase();
52
+ const questionWords = questionLower
53
+ .split(/\s+/)
54
+ .filter(word => word.length > 2); // Ignore very short words
55
+ if (questionWords.length === 0) {
56
+ return 0.5; // Neutral score if no meaningful words
57
+ }
58
+ // Extract filename and path components
59
+ const fileName = path.basename(filePath, path.extname(filePath)).toLowerCase();
60
+ const pathComponents = filePath.toLowerCase().split(path.sep);
61
+ const contentLower = fileContent.toLowerCase();
62
+ let score = 0;
63
+ let maxScore = 0;
64
+ for (const word of questionWords) {
65
+ maxScore += 10; // Max points per word
66
+ // Filename match (highest weight)
67
+ if (fileName.includes(word)) {
68
+ score += 5;
69
+ }
70
+ // Path component match (medium weight)
71
+ if (pathComponents.some(component => component.includes(word))) {
72
+ score += 3;
73
+ }
74
+ // Content match (lower weight, but counted)
75
+ const contentMatches = (contentLower.match(new RegExp(word, 'g')) || []).length;
76
+ // Cap content matches contribution
77
+ score += Math.min(contentMatches * 0.1, 2);
78
+ }
79
+ // Normalize to 0-1 range
80
+ return maxScore > 0 ? Math.min(score / maxScore, 1) : 0;
81
+ }
82
+ /**
83
+ * Rank files by relevance to the question
84
+ */
85
+ function rankFiles(filePaths, question, limit = 10) {
86
+ const rankedFiles = [];
87
+ for (const filePath of filePaths) {
88
+ const content = (0, scanner_1.readFileContent)(filePath);
89
+ const score = calculateRelevanceScore(filePath, content, question);
90
+ rankedFiles.push({
91
+ path: filePath,
92
+ score,
93
+ });
94
+ }
95
+ // Sort by score descending, then by path alphabetically
96
+ rankedFiles.sort((a, b) => {
97
+ if (b.score !== a.score) {
98
+ return b.score - a.score;
99
+ }
100
+ return a.path.localeCompare(b.path);
101
+ });
102
+ // Return top N files
103
+ return rankedFiles.slice(0, limit);
104
+ }
105
+ //# sourceMappingURL=ranker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ranker.js","sourceRoot":"","sources":["../src/ranker.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAUH,0DA+CC;AAKD,8BA2BC;AAvFD,2CAA6B;AAC7B,uCAA4C;AAG5C;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,QAAgB,EAChB,WAA0B,EAC1B,QAAgB;IAEhB,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,aAAa,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAC7C,MAAM,aAAa,GAAG,aAAa;SAChC,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,0BAA0B;IAE9D,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,CAAC,uCAAuC;IACrD,CAAC;IAED,uCAAuC;IACvC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC/E,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IAE/C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,QAAQ,GAAG,CAAC,CAAC;IAEjB,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QACjC,QAAQ,IAAI,EAAE,CAAC,CAAC,sBAAsB;QAEtC,kCAAkC;QAClC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,uCAAuC;QACvC,IAAI,cAAc,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC;YAC/D,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;QAED,4CAA4C;QAC5C,MAAM,cAAc,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAChF,mCAAmC;QACnC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,yBAAyB;IACzB,OAAO,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CACvB,SAAmB,EACnB,QAAgB,EAChB,QAAgB,EAAE;IAElB,MAAM,WAAW,GAAiB,EAAE,CAAC;IAErC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,OAAO,GAAG,IAAA,yBAAe,EAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAEnE,WAAW,CAAC,IAAI,CAAC;YACf,IAAI,EAAE,QAAQ;YACd,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,wDAAwD;IACxD,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACxB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YACxB,OAAO,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAC3B,CAAC;QACD,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,qBAAqB;IACrB,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { RocketChatScopeConfig } from './types';
2
+ export declare const ROCKET_CHAT_SCOPE_CONFIG: RocketChatScopeConfig;
3
+ export declare function resolveMeteorAppRoot(root: string): string;
4
+ export declare function isRocketChatMeteorRoot(root: string): boolean;
5
+ export declare function getAllowedModulePaths(root: string, moduleKeys?: string[]): string[];
6
+ export declare function normalizeModuleKeys(moduleKeys?: string[]): string[];
7
+ //# sourceMappingURL=rocket-chat-scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rocket-chat-scope.d.ts","sourceRoot":"","sources":["../src/rocket-chat-scope.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAC;AAEhD,eAAO,MAAM,wBAAwB,EAAE,qBAsBtC,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAWzD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE5D;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAYnF;AAED,wBAAgB,mBAAmB,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAEnE"}
@@ -0,0 +1,95 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.ROCKET_CHAT_SCOPE_CONFIG = void 0;
37
+ exports.resolveMeteorAppRoot = resolveMeteorAppRoot;
38
+ exports.isRocketChatMeteorRoot = isRocketChatMeteorRoot;
39
+ exports.getAllowedModulePaths = getAllowedModulePaths;
40
+ exports.normalizeModuleKeys = normalizeModuleKeys;
41
+ const path = __importStar(require("path"));
42
+ const fs = __importStar(require("fs"));
43
+ exports.ROCKET_CHAT_SCOPE_CONFIG = {
44
+ repoRootMarker: 'package.json',
45
+ meteorAppPath: 'apps/meteor',
46
+ ignoredDirs: [
47
+ 'node_modules',
48
+ 'dist',
49
+ 'build',
50
+ 'out',
51
+ '.git',
52
+ '.next',
53
+ '.nuxt',
54
+ 'coverage',
55
+ '.vscode',
56
+ '.idea',
57
+ '.meteor',
58
+ ],
59
+ modules: [
60
+ { key: 'lib-server-functions', relativePath: 'app/lib/server/functions', description: 'Server functions' },
61
+ { key: 'authorization', relativePath: 'app/authorization', description: 'User permissions and access control' },
62
+ { key: 'e2e', relativePath: 'app/e2e', description: 'End-to-end encryption' },
63
+ { key: 'file-upload', relativePath: 'app/file-upload', description: 'File upload and media handling' },
64
+ ],
65
+ };
66
+ function resolveMeteorAppRoot(root) {
67
+ // If root is already the meteor app
68
+ if (fs.existsSync(path.join(root, '.meteor'))) {
69
+ return root;
70
+ }
71
+ // If root is monorepo root
72
+ const meteorPath = path.join(root, exports.ROCKET_CHAT_SCOPE_CONFIG.meteorAppPath);
73
+ if (fs.existsSync(meteorPath)) {
74
+ return meteorPath;
75
+ }
76
+ return root;
77
+ }
78
+ function isRocketChatMeteorRoot(root) {
79
+ return fs.existsSync(path.join(root, '.meteor'));
80
+ }
81
+ function getAllowedModulePaths(root, moduleKeys) {
82
+ const meteorRoot = resolveMeteorAppRoot(root);
83
+ let modules = exports.ROCKET_CHAT_SCOPE_CONFIG.modules;
84
+ if (moduleKeys && moduleKeys.length > 0) {
85
+ modules = modules.filter((m) => moduleKeys.includes(m.key));
86
+ if (modules.length === 0) {
87
+ throw new Error(`No matching modules found for keys: ${moduleKeys.join(', ')}`);
88
+ }
89
+ }
90
+ return modules.map((m) => path.join(meteorRoot, m.relativePath));
91
+ }
92
+ function normalizeModuleKeys(moduleKeys) {
93
+ return moduleKeys || [];
94
+ }
95
+ //# sourceMappingURL=rocket-chat-scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rocket-chat-scope.js","sourceRoot":"","sources":["../src/rocket-chat-scope.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,oDAWC;AAED,wDAEC;AAED,sDAYC;AAED,kDAEC;AA7DD,2CAA6B;AAC7B,uCAAyB;AAGZ,QAAA,wBAAwB,GAA0B;IAC7D,cAAc,EAAE,cAAc;IAC9B,aAAa,EAAE,aAAa;IAC5B,WAAW,EAAE;QACX,cAAc;QACd,MAAM;QACN,OAAO;QACP,KAAK;QACL,MAAM;QACN,OAAO;QACP,OAAO;QACP,UAAU;QACV,SAAS;QACT,OAAO;QACP,SAAS;KACV;IACD,OAAO,EAAE;QACP,EAAE,GAAG,EAAE,sBAAsB,EAAE,YAAY,EAAE,0BAA0B,EAAE,WAAW,EAAE,kBAAkB,EAAE;QAC1G,EAAE,GAAG,EAAE,eAAe,EAAE,YAAY,EAAE,mBAAmB,EAAE,WAAW,EAAE,qCAAqC,EAAE;QAC/G,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,uBAAuB,EAAE;QAC7E,EAAE,GAAG,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,EAAE,WAAW,EAAE,gCAAgC,EAAE;KACvG;CACF,CAAC;AAEF,SAAgB,oBAAoB,CAAC,IAAY;IAC/C,oCAAoC;IACpC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC;QAC9C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,2BAA2B;IAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,gCAAwB,CAAC,aAAa,CAAC,CAAC;IAC3E,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,sBAAsB,CAAC,IAAY;IACjD,OAAO,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;AACnD,CAAC;AAED,SAAgB,qBAAqB,CAAC,IAAY,EAAE,UAAqB;IACvE,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,gCAAwB,CAAC,OAAO,CAAC;IAE/C,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,KAAK,CAAC,uCAAuC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;AACnE,CAAC;AAED,SAAgB,mBAAmB,CAAC,UAAqB;IACvD,OAAO,UAAU,IAAI,EAAE,CAAC;AAC1B,CAAC"}