@milo4jo/contextkit 0.1.2 → 0.5.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 (81) hide show
  1. package/README.md +269 -72
  2. package/dist/commands/index-cmd.d.ts.map +1 -1
  3. package/dist/commands/index-cmd.js +10 -2
  4. package/dist/commands/index-cmd.js.map +1 -1
  5. package/dist/commands/mcp.d.ts +8 -0
  6. package/dist/commands/mcp.d.ts.map +1 -0
  7. package/dist/commands/mcp.js +23 -0
  8. package/dist/commands/mcp.js.map +1 -0
  9. package/dist/commands/select.d.ts.map +1 -1
  10. package/dist/commands/select.js +15 -9
  11. package/dist/commands/select.js.map +1 -1
  12. package/dist/commands/watch.d.ts +8 -0
  13. package/dist/commands/watch.d.ts.map +1 -0
  14. package/dist/commands/watch.js +171 -0
  15. package/dist/commands/watch.js.map +1 -0
  16. package/dist/config/index.d.ts +11 -0
  17. package/dist/config/index.d.ts.map +1 -1
  18. package/dist/config/index.js +11 -0
  19. package/dist/config/index.js.map +1 -1
  20. package/dist/config/validation.d.ts +33 -0
  21. package/dist/config/validation.d.ts.map +1 -0
  22. package/dist/config/validation.js +241 -0
  23. package/dist/config/validation.js.map +1 -0
  24. package/dist/db/index.d.ts.map +1 -1
  25. package/dist/db/index.js +11 -2
  26. package/dist/db/index.js.map +1 -1
  27. package/dist/index.js +7 -1
  28. package/dist/index.js.map +1 -1
  29. package/dist/indexer/discovery.d.ts +7 -0
  30. package/dist/indexer/discovery.d.ts.map +1 -1
  31. package/dist/indexer/discovery.js +9 -0
  32. package/dist/indexer/discovery.js.map +1 -1
  33. package/dist/indexer/index.d.ts +17 -3
  34. package/dist/indexer/index.d.ts.map +1 -1
  35. package/dist/indexer/index.js +135 -24
  36. package/dist/indexer/index.js.map +1 -1
  37. package/dist/mcp/index.d.ts +7 -0
  38. package/dist/mcp/index.d.ts.map +1 -0
  39. package/dist/mcp/index.js +7 -0
  40. package/dist/mcp/index.js.map +1 -0
  41. package/dist/mcp/server.d.ts +20 -0
  42. package/dist/mcp/server.d.ts.map +1 -0
  43. package/dist/mcp/server.js +252 -0
  44. package/dist/mcp/server.js.map +1 -0
  45. package/dist/mcp-server.d.ts +18 -0
  46. package/dist/mcp-server.d.ts.map +1 -0
  47. package/dist/mcp-server.js +22 -0
  48. package/dist/mcp-server.js.map +1 -0
  49. package/dist/retrieval/imports.d.ts +76 -0
  50. package/dist/retrieval/imports.d.ts.map +1 -0
  51. package/dist/retrieval/imports.js +258 -0
  52. package/dist/retrieval/imports.js.map +1 -0
  53. package/dist/selector/budget.d.ts +2 -0
  54. package/dist/selector/budget.d.ts.map +1 -1
  55. package/dist/selector/budget.js +19 -6
  56. package/dist/selector/budget.js.map +1 -1
  57. package/dist/selector/formatter.d.ts +15 -0
  58. package/dist/selector/formatter.d.ts.map +1 -1
  59. package/dist/selector/formatter.js +139 -5
  60. package/dist/selector/formatter.js.map +1 -1
  61. package/dist/selector/index.d.ts +11 -4
  62. package/dist/selector/index.d.ts.map +1 -1
  63. package/dist/selector/index.js +67 -12
  64. package/dist/selector/index.js.map +1 -1
  65. package/dist/selector/scoring.d.ts +35 -5
  66. package/dist/selector/scoring.d.ts.map +1 -1
  67. package/dist/selector/scoring.js +290 -23
  68. package/dist/selector/scoring.js.map +1 -1
  69. package/dist/utils/streams.d.ts +4 -0
  70. package/dist/utils/streams.d.ts.map +1 -1
  71. package/dist/utils/streams.js +7 -0
  72. package/dist/utils/streams.js.map +1 -1
  73. package/package.json +18 -6
  74. package/dist/commands/source.d.ts +0 -3
  75. package/dist/commands/source.d.ts.map +0 -1
  76. package/dist/commands/source.js +0 -153
  77. package/dist/commands/source.js.map +0 -1
  78. package/dist/utils/output.d.ts +0 -42
  79. package/dist/utils/output.d.ts.map +0 -1
  80. package/dist/utils/output.js +0 -62
  81. package/dist/utils/output.js.map +0 -1
@@ -2,6 +2,7 @@
2
2
  * Output Formatter Module
3
3
  *
4
4
  * Formats selected chunks for display.
5
+ * Supports multiple output formats: markdown, xml, json, plain
5
6
  */
6
7
  /**
7
8
  * Format selection results for output
@@ -98,12 +99,14 @@ export function formatWithExplanation(query, result, totalConsidered, timeMs) {
98
99
  const base = formatOutput(query, result, totalConsidered, timeMs);
99
100
  // Add explanation section
100
101
  const explanations = result.chunks.map((chunk) => {
101
- const { similarity, recency, pathMatch } = chunk.scoreBreakdown;
102
+ const { similarity, pathMatch, contentMatch, symbolMatch, fileTypeBoost } = chunk.scoreBreakdown;
102
103
  return ` ${chunk.filePath}:${chunk.startLine}
103
- similarity: ${(similarity * 100).toFixed(1)}%
104
- recency: ${(recency * 100).toFixed(1)}%
105
- path_match: ${(pathMatch * 100).toFixed(1)}%
106
- → score: ${(chunk.score * 100).toFixed(1)}%`;
104
+ similarity: ${(similarity * 100).toFixed(1)}%
105
+ path_match: ${(pathMatch * 100).toFixed(1)}%
106
+ content_match: ${(contentMatch * 100).toFixed(1)}%
107
+ symbol_match: ${(symbolMatch * 100).toFixed(1)}%
108
+ file_type: ${(fileTypeBoost * 100).toFixed(1)}%
109
+ → score: ${(chunk.score * 100).toFixed(1)}%`;
107
110
  });
108
111
  const explainSection = '\n\n## Scoring Details\n\n' + explanations.join('\n\n');
109
112
  return {
@@ -111,4 +114,135 @@ export function formatWithExplanation(query, result, totalConsidered, timeMs) {
111
114
  data: base.data,
112
115
  };
113
116
  }
117
+ /**
118
+ * Format output as XML (Claude prefers XML for structured content)
119
+ */
120
+ export function formatAsXml(query, result, totalConsidered, timeMs) {
121
+ const { chunks, totalTokens } = result;
122
+ // Group chunks by file
123
+ const fileGroups = new Map();
124
+ for (const chunk of chunks) {
125
+ const existing = fileGroups.get(chunk.filePath) || [];
126
+ existing.push(chunk);
127
+ fileGroups.set(chunk.filePath, existing);
128
+ }
129
+ // Build XML output
130
+ const xmlParts = ['<context>'];
131
+ xmlParts.push(` <query>${escapeXml(query)}</query>`);
132
+ xmlParts.push(' <files>');
133
+ for (const [filePath, fileChunks] of fileGroups) {
134
+ // Sort chunks by line number within file
135
+ fileChunks.sort((a, b) => a.startLine - b.startLine);
136
+ xmlParts.push(` <file path="${escapeXml(filePath)}">`);
137
+ for (const chunk of fileChunks) {
138
+ xmlParts.push(` <chunk lines="${chunk.startLine}-${chunk.endLine}" tokens="${chunk.tokens}">`);
139
+ xmlParts.push(`<![CDATA[${chunk.content}]]>`);
140
+ xmlParts.push(' </chunk>');
141
+ }
142
+ xmlParts.push(' </file>');
143
+ }
144
+ xmlParts.push(' </files>');
145
+ xmlParts.push(` <stats tokens="${totalTokens}" chunks="${chunks.length}" files="${fileGroups.size}" time_ms="${timeMs}" />`);
146
+ xmlParts.push('</context>');
147
+ const text = xmlParts.join('\n');
148
+ // Build structured data (same as markdown)
149
+ const chunkInfos = chunks.map((c) => ({
150
+ file: c.filePath,
151
+ lines: [c.startLine, c.endLine],
152
+ tokens: c.tokens,
153
+ score: Math.round(c.score * 1000) / 1000,
154
+ }));
155
+ const data = {
156
+ query,
157
+ context: text,
158
+ chunks: chunkInfos,
159
+ stats: {
160
+ totalTokens,
161
+ chunksConsidered: totalConsidered,
162
+ chunksIncluded: chunks.length,
163
+ filesIncluded: fileGroups.size,
164
+ timeMs,
165
+ },
166
+ };
167
+ return { text, data };
168
+ }
169
+ /**
170
+ * Format output as plain text (optimized for clipboard/pasting)
171
+ */
172
+ export function formatAsPlain(query, result, totalConsidered, timeMs) {
173
+ const { chunks, totalTokens } = result;
174
+ // Group chunks by file
175
+ const fileGroups = new Map();
176
+ for (const chunk of chunks) {
177
+ const existing = fileGroups.get(chunk.filePath) || [];
178
+ existing.push(chunk);
179
+ fileGroups.set(chunk.filePath, existing);
180
+ }
181
+ // Build plain text output (no markdown formatting)
182
+ const textParts = [];
183
+ for (const [filePath, fileChunks] of fileGroups) {
184
+ // Sort chunks by line number within file
185
+ fileChunks.sort((a, b) => a.startLine - b.startLine);
186
+ for (const chunk of fileChunks) {
187
+ const header = `// ${filePath} (lines ${chunk.startLine}-${chunk.endLine})`;
188
+ textParts.push(`${header}\n${chunk.content}`);
189
+ }
190
+ }
191
+ const text = textParts.join('\n\n');
192
+ // Build structured data
193
+ const chunkInfos = chunks.map((c) => ({
194
+ file: c.filePath,
195
+ lines: [c.startLine, c.endLine],
196
+ tokens: c.tokens,
197
+ score: Math.round(c.score * 1000) / 1000,
198
+ }));
199
+ const data = {
200
+ query,
201
+ context: text,
202
+ chunks: chunkInfos,
203
+ stats: {
204
+ totalTokens,
205
+ chunksConsidered: totalConsidered,
206
+ chunksIncluded: chunks.length,
207
+ filesIncluded: fileGroups.size,
208
+ timeMs,
209
+ },
210
+ };
211
+ return { text, data };
212
+ }
213
+ /**
214
+ * Format output in specified format
215
+ */
216
+ export function formatInFormat(format, query, result, totalConsidered, timeMs, explain = false) {
217
+ switch (format) {
218
+ case 'xml':
219
+ return formatAsXml(query, result, totalConsidered, timeMs);
220
+ case 'json': {
221
+ // JSON format returns the data structure directly
222
+ const base = formatOutput(query, result, totalConsidered, timeMs);
223
+ return {
224
+ text: JSON.stringify(base.data, null, 2),
225
+ data: base.data,
226
+ };
227
+ }
228
+ case 'plain':
229
+ return formatAsPlain(query, result, totalConsidered, timeMs);
230
+ case 'markdown':
231
+ default:
232
+ return explain
233
+ ? formatWithExplanation(query, result, totalConsidered, timeMs)
234
+ : formatOutput(query, result, totalConsidered, timeMs);
235
+ }
236
+ }
237
+ /**
238
+ * Escape XML special characters
239
+ */
240
+ function escapeXml(str) {
241
+ return str
242
+ .replace(/&/g, '&amp;')
243
+ .replace(/</g, '&lt;')
244
+ .replace(/>/g, '&gt;')
245
+ .replace(/"/g, '&quot;')
246
+ .replace(/'/g, '&apos;');
247
+ }
114
248
  //# sourceMappingURL=formatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"formatter.js","sourceRoot":"","sources":["../../src/selector/formatter.ts"],"names":[],"mappings":"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"}
@@ -3,12 +3,12 @@
3
3
  *
4
4
  * Orchestrates the selection pipeline:
5
5
  * 1. Search for similar chunks
6
- * 2. Score and rank
6
+ * 2. Score and rank (with optional import boosting)
7
7
  * 3. Fit to budget
8
8
  * 4. Format output
9
9
  */
10
10
  import Database from 'better-sqlite3';
11
- import { type FormattedOutput } from './formatter.js';
11
+ import { type FormattedOutput, type OutputFormat } from './formatter.js';
12
12
  /** Selection options */
13
13
  export interface SelectOptions {
14
14
  /** Query to find context for */
@@ -19,6 +19,12 @@ export interface SelectOptions {
19
19
  sources?: string[];
20
20
  /** Show scoring explanation */
21
21
  explain?: boolean;
22
+ /** Output format */
23
+ format?: OutputFormat;
24
+ /** Include imported files in selection */
25
+ includeImports?: boolean;
26
+ /** Base path for resolving imports */
27
+ basePath?: string;
22
28
  }
23
29
  /** Selection result */
24
30
  export interface SelectResult {
@@ -31,7 +37,8 @@ export interface SelectResult {
31
37
  * Select optimal context for a query
32
38
  */
33
39
  export declare function selectContext(db: Database.Database, options: SelectOptions): Promise<SelectResult>;
34
- export type { FormattedOutput, SelectionData, SelectionStats, ChunkInfo } from './formatter.js';
40
+ export type { FormattedOutput, SelectionData, SelectionStats, ChunkInfo, OutputFormat } from './formatter.js';
35
41
  export type { ScoredChunk } from './search.js';
36
- export type { RankedChunk } from './scoring.js';
42
+ export type { RankedChunk, ImportGraph, ScoringOptions } from './scoring.js';
43
+ export { buildImportGraph, getRelatedImports } from './scoring.js';
37
44
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/selector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAuC,KAAK,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAE3F,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,uBAAuB;AACvB,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CAwDvB;AAGD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChG,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/selector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAItC,OAAO,EAAkB,KAAK,eAAe,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGzF,wBAAwB;AACxB,MAAM,WAAW,aAAa;IAC5B,gCAAgC;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,iCAAiC;IACjC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,oBAAoB;IACpB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,0CAA0C;IAC1C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sCAAsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,uBAAuB;AACvB,MAAM,WAAW,YAAY;IAC3B,uBAAuB;IACvB,MAAM,EAAE,eAAe,CAAC;IACxB,6BAA6B;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,YAAY,CAAC,CA+FvB;AAwCD,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9G,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC"}
@@ -3,14 +3,15 @@
3
3
  *
4
4
  * Orchestrates the selection pipeline:
5
5
  * 1. Search for similar chunks
6
- * 2. Score and rank
6
+ * 2. Score and rank (with optional import boosting)
7
7
  * 3. Fit to budget
8
8
  * 4. Format output
9
9
  */
10
10
  import { searchSimilar } from './search.js';
11
- import { rankChunks } from './scoring.js';
11
+ import { rankChunks, buildImportGraph, getRelatedImports } from './scoring.js';
12
12
  import { fitToBudget, mergeAdjacentChunks } from './budget.js';
13
- import { formatOutput, formatWithExplanation } from './formatter.js';
13
+ import { formatInFormat } from './formatter.js';
14
+ import { parseImportsWithResolution, isJsTsFile } from '../retrieval/imports.js';
14
15
  /**
15
16
  * Select optimal context for a query
16
17
  */
@@ -44,24 +45,78 @@ export async function selectContext(db, options) {
44
45
  sources: options.sources,
45
46
  };
46
47
  const similarChunks = await searchSimilar(db, options.query, searchOpts);
47
- // Step 2: Score and rank
48
- const rankedChunks = rankChunks(similarChunks, options.query);
49
- // Step 3: Fit to budget
50
- const budgetResult = fitToBudget(rankedChunks, options.budget);
51
- // Step 4: Merge adjacent chunks for cleaner output
48
+ // Step 2: Build import graph if needed
49
+ let importGraph;
50
+ if (options.includeImports) {
51
+ importGraph = buildImportGraphFromChunks(db, options.basePath || process.cwd());
52
+ }
53
+ // Step 3: Score and rank (with import boost if graph provided)
54
+ const rankedChunks = rankChunks(similarChunks, options.query, { importGraph });
55
+ // Step 4: Fit to budget
56
+ let budgetResult = fitToBudget(rankedChunks, options.budget);
57
+ // Step 5: Include related imports if requested
58
+ if (options.includeImports && importGraph) {
59
+ const selectedFiles = [...new Set(budgetResult.chunks.map(c => c.filePath))];
60
+ const relatedFiles = getRelatedImports(selectedFiles, importGraph);
61
+ // Find chunks from related files that aren't already included
62
+ const includedFiles = new Set(budgetResult.chunks.map(c => c.filePath));
63
+ const relatedChunks = similarChunks.filter(c => relatedFiles.includes(c.filePath) && !includedFiles.has(c.filePath));
64
+ if (relatedChunks.length > 0) {
65
+ // Score and add related chunks with remaining budget
66
+ const relatedRanked = rankChunks(relatedChunks, options.query, { importGraph });
67
+ const remainingBudget = options.budget - budgetResult.totalTokens;
68
+ if (remainingBudget > 0) {
69
+ const relatedBudget = fitToBudget(relatedRanked, remainingBudget);
70
+ budgetResult = {
71
+ chunks: [...budgetResult.chunks, ...relatedBudget.chunks],
72
+ totalTokens: budgetResult.totalTokens + relatedBudget.totalTokens,
73
+ excluded: budgetResult.excluded + relatedBudget.excluded,
74
+ };
75
+ }
76
+ }
77
+ }
78
+ // Step 6: Merge adjacent chunks for cleaner output
52
79
  const mergedChunks = mergeAdjacentChunks(budgetResult.chunks);
53
80
  const mergedResult = {
54
81
  ...budgetResult,
55
82
  chunks: mergedChunks,
56
83
  };
57
- // Step 5: Format output
84
+ // Step 7: Format output
58
85
  const timeMs = Date.now() - startTime;
59
- const output = options.explain
60
- ? formatWithExplanation(options.query, mergedResult, similarChunks.length, timeMs)
61
- : formatOutput(options.query, mergedResult, similarChunks.length, timeMs);
86
+ const format = options.format || 'markdown';
87
+ const output = formatInFormat(format, options.query, mergedResult, similarChunks.length, timeMs, options.explain);
62
88
  return {
63
89
  output,
64
90
  isEmpty: false,
65
91
  };
66
92
  }
93
+ /**
94
+ * Build import graph from all indexed chunks
95
+ */
96
+ function buildImportGraphFromChunks(db, basePath) {
97
+ // Get all unique files and their content
98
+ const rows = db.prepare(`
99
+ SELECT DISTINCT file_path, content
100
+ FROM chunks
101
+ ORDER BY file_path, start_line
102
+ `).all();
103
+ // Group content by file (combine chunks)
104
+ const fileContents = new Map();
105
+ for (const row of rows) {
106
+ const existing = fileContents.get(row.file_path) || '';
107
+ fileContents.set(row.file_path, existing + row.content);
108
+ }
109
+ // Parse imports for each JS/TS file
110
+ const dependencyMap = new Map();
111
+ for (const [filePath, content] of fileContents) {
112
+ if (!isJsTsFile(filePath)) {
113
+ dependencyMap.set(filePath, []);
114
+ continue;
115
+ }
116
+ const { relatedFiles } = parseImportsWithResolution(content, filePath, basePath);
117
+ dependencyMap.set(filePath, relatedFiles);
118
+ }
119
+ return buildImportGraph(dependencyMap);
120
+ }
121
+ export { buildImportGraph, getRelatedImports } from './scoring.js';
67
122
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/selector/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,qBAAqB,EAAwB,MAAM,gBAAgB,CAAC;AAsB3F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,EAAqB,EACrB,OAAsB;IAEtB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAE7B,gCAAgC;IAChC,MAAM,WAAW,GAAG,EAAE,CAAC,OAAO,CAAC,sCAAsC,CAAC,CAAC,GAAG,EAAuB,CAAC;IAClG,IAAI,WAAW,CAAC,KAAK,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,MAAM,EAAE;gBACN,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE;oBACJ,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,OAAO,EAAE,EAAE;oBACX,MAAM,EAAE,EAAE;oBACV,KAAK,EAAE;wBACL,WAAW,EAAE,CAAC;wBACd,gBAAgB,EAAE,CAAC;wBACnB,cAAc,EAAE,CAAC;wBACjB,aAAa,EAAE,CAAC;wBAChB,MAAM,EAAE,CAAC;qBACV;iBACF;aACF;YACD,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,MAAM,UAAU,GAAkB;QAChC,KAAK,EAAE,EAAE;QACT,OAAO,EAAE,OAAO,CAAC,OAAO;KACzB,CAAC;IACF,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,EAAE,EAAE,OAAO,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;IAEzE,yBAAyB;IACzB,MAAM,YAAY,GAAG,UAAU,CAAC,aAAa,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAE9D,wBAAwB;IACxB,MAAM,YAAY,GAAG,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE/D,mDAAmD;IACnD,MAAM,YAAY,GAAG,mBAAmB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG;QACnB,GAAG,YAAY;QACf,MAAM,EAAE,YAAY;KACrB,CAAC;IAEF,wBAAwB;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO;QAC5B,CAAC,CAAC,qBAAqB,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC;QAClF,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5E,OAAO;QACL,MAAM;QACN,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/selector/index.ts"],"names":[],"mappings":"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"}
@@ -3,9 +3,12 @@
3
3
  *
4
4
  * Calculates final scores for chunks based on multiple signals.
5
5
  *
6
- * Score = 0.6 × semantic_similarity
7
- * + 0.2 × recency_bonus
8
- * + 0.2 × path_match_bonus
6
+ * Multi-factor scoring:
7
+ * - Semantic similarity (embeddings)
8
+ * - Path relevance (query keywords in file path)
9
+ * - Content keyword matching (exact word matches)
10
+ * - Code symbol matching (function/class names)
11
+ * - File type boost (implementation files > tests)
9
12
  */
10
13
  import type { ScoredChunk } from './search.js';
11
14
  /** Chunk with final score */
@@ -15,12 +18,39 @@ export interface RankedChunk extends ScoredChunk {
15
18
  /** Individual score components for --explain */
16
19
  scoreBreakdown: {
17
20
  similarity: number;
18
- recency: number;
19
21
  pathMatch: number;
22
+ contentMatch: number;
23
+ symbolMatch: number;
24
+ fileTypeBoost: number;
25
+ importBoost: number;
20
26
  };
21
27
  }
28
+ /** Import relationship data for scoring */
29
+ export interface ImportGraph {
30
+ /** Map of file path -> files it imports */
31
+ imports: Map<string, string[]>;
32
+ /** Map of file path -> files that import it */
33
+ importedBy: Map<string, string[]>;
34
+ }
35
+ /** Options for scoring */
36
+ export interface ScoringOptions {
37
+ /** Apply diversity penalty (reduce score for many chunks from same file) */
38
+ diversityPenalty?: boolean;
39
+ /** Import relationships for boosting related files */
40
+ importGraph?: ImportGraph;
41
+ }
22
42
  /**
23
43
  * Calculate scores and rank chunks
24
44
  */
25
- export declare function rankChunks(chunks: ScoredChunk[], query: string): RankedChunk[];
45
+ export declare function rankChunks(chunks: ScoredChunk[], query: string, options?: ScoringOptions): RankedChunk[];
46
+ /**
47
+ * Build an import graph from a dependency map
48
+ */
49
+ export declare function buildImportGraph(dependencyMap: Map<string, string[]>): ImportGraph;
50
+ /**
51
+ * Get files that should be included based on imports from selected files
52
+ */
53
+ export declare function getRelatedImports(selectedFiles: string[], importGraph: ImportGraph, options?: {
54
+ maxDepth?: number;
55
+ }): string[];
26
56
  //# sourceMappingURL=scoring.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/selector/scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,6BAA6B;AAC7B,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,cAAc,EAAE;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AASD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,EAAE,CAqC9E"}
1
+ {"version":3,"file":"scoring.d.ts","sourceRoot":"","sources":["../../src/selector/scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,6BAA6B;AAC7B,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC9C,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,cAAc,EAAE;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,aAAa,EAAE,MAAM,CAAC;QACtB,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAYD,2CAA2C;AAC3C,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAC/B,+CAA+C;IAC/C,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACnC;AAED,0BAA0B;AAC1B,MAAM,WAAW,cAAc;IAC7B,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,sDAAsD;IACtD,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,MAAM,EAAE,WAAW,EAAE,EACrB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,cAAmB,GAC3B,WAAW,EAAE,CAyEf;AAySD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACnC,WAAW,CAiBb;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,EAAE,WAAW,EACxB,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAClC,MAAM,EAAE,CA2BV"}