@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.
- package/README.md +269 -72
- package/dist/commands/index-cmd.d.ts.map +1 -1
- package/dist/commands/index-cmd.js +10 -2
- package/dist/commands/index-cmd.js.map +1 -1
- package/dist/commands/mcp.d.ts +8 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +23 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/select.d.ts.map +1 -1
- package/dist/commands/select.js +15 -9
- package/dist/commands/select.js.map +1 -1
- package/dist/commands/watch.d.ts +8 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +171 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/config/index.d.ts +11 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +11 -0
- package/dist/config/index.js.map +1 -1
- package/dist/config/validation.d.ts +33 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +241 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +11 -2
- package/dist/db/index.js.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/indexer/discovery.d.ts +7 -0
- package/dist/indexer/discovery.d.ts.map +1 -1
- package/dist/indexer/discovery.js +9 -0
- package/dist/indexer/discovery.js.map +1 -1
- package/dist/indexer/index.d.ts +17 -3
- package/dist/indexer/index.d.ts.map +1 -1
- package/dist/indexer/index.js +135 -24
- package/dist/indexer/index.js.map +1 -1
- package/dist/mcp/index.d.ts +7 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +7 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +20 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +252 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp-server.d.ts +18 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +22 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/retrieval/imports.d.ts +76 -0
- package/dist/retrieval/imports.d.ts.map +1 -0
- package/dist/retrieval/imports.js +258 -0
- package/dist/retrieval/imports.js.map +1 -0
- package/dist/selector/budget.d.ts +2 -0
- package/dist/selector/budget.d.ts.map +1 -1
- package/dist/selector/budget.js +19 -6
- package/dist/selector/budget.js.map +1 -1
- package/dist/selector/formatter.d.ts +15 -0
- package/dist/selector/formatter.d.ts.map +1 -1
- package/dist/selector/formatter.js +139 -5
- package/dist/selector/formatter.js.map +1 -1
- package/dist/selector/index.d.ts +11 -4
- package/dist/selector/index.d.ts.map +1 -1
- package/dist/selector/index.js +67 -12
- package/dist/selector/index.js.map +1 -1
- package/dist/selector/scoring.d.ts +35 -5
- package/dist/selector/scoring.d.ts.map +1 -1
- package/dist/selector/scoring.js +290 -23
- package/dist/selector/scoring.js.map +1 -1
- package/dist/utils/streams.d.ts +4 -0
- package/dist/utils/streams.d.ts.map +1 -1
- package/dist/utils/streams.js +7 -0
- package/dist/utils/streams.js.map +1 -1
- package/package.json +18 -6
- package/dist/commands/source.d.ts +0 -3
- package/dist/commands/source.d.ts.map +0 -1
- package/dist/commands/source.js +0 -153
- package/dist/commands/source.js.map +0 -1
- package/dist/utils/output.d.ts +0 -42
- package/dist/utils/output.d.ts.map +0 -1
- package/dist/utils/output.js +0 -62
- package/dist/utils/output.js.map +0 -1
package/dist/selector/scoring.js
CHANGED
|
@@ -3,51 +3,137 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Calculates final scores for chunks based on multiple signals.
|
|
5
5
|
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
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
|
-
/** Scoring weights */
|
|
13
|
+
/** Scoring weights - tuned for code search */
|
|
11
14
|
const WEIGHTS = {
|
|
12
|
-
similarity: 0.
|
|
13
|
-
|
|
14
|
-
|
|
15
|
+
similarity: 0.45, // Semantic similarity is primary signal
|
|
16
|
+
pathMatch: 0.15, // Path contains query keywords
|
|
17
|
+
contentMatch: 0.15, // Content contains exact keywords
|
|
18
|
+
symbolMatch: 0.15, // Contains relevant function/class names
|
|
19
|
+
fileTypeBoost: 0.05, // File type priority
|
|
20
|
+
importBoost: 0.05, // File is imported by selected chunks
|
|
15
21
|
};
|
|
16
22
|
/**
|
|
17
23
|
* Calculate scores and rank chunks
|
|
18
24
|
*/
|
|
19
|
-
export function rankChunks(chunks, query) {
|
|
20
|
-
// Extract keywords from query
|
|
25
|
+
export function rankChunks(chunks, query, options = {}) {
|
|
26
|
+
// Extract keywords and symbols from query
|
|
21
27
|
const queryKeywords = extractKeywords(query);
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
28
|
+
const querySymbols = extractSymbols(query);
|
|
29
|
+
// First pass: score all chunks without import boost
|
|
30
|
+
const initialScores = chunks.map((chunk) => {
|
|
25
31
|
const similarityScore = chunk.similarity;
|
|
26
|
-
// Recency bonus (placeholder - would use indexed_at if we tracked per-chunk)
|
|
27
|
-
// For now, give all chunks equal recency
|
|
28
|
-
const recencyScore = 0.5;
|
|
29
|
-
// Path match bonus
|
|
30
32
|
const pathMatchScore = calculatePathMatch(chunk.filePath, queryKeywords);
|
|
31
|
-
|
|
32
|
-
const
|
|
33
|
-
|
|
34
|
-
|
|
33
|
+
const contentMatchScore = calculateContentMatch(chunk.content, queryKeywords);
|
|
34
|
+
const symbolMatchScore = calculateSymbolMatch(chunk.content, querySymbols);
|
|
35
|
+
const fileTypeBoost = calculateFileTypeBoost(chunk.filePath);
|
|
36
|
+
const baseScore = WEIGHTS.similarity * similarityScore +
|
|
37
|
+
WEIGHTS.pathMatch * pathMatchScore +
|
|
38
|
+
WEIGHTS.contentMatch * contentMatchScore +
|
|
39
|
+
WEIGHTS.symbolMatch * symbolMatchScore +
|
|
40
|
+
WEIGHTS.fileTypeBoost * fileTypeBoost;
|
|
41
|
+
return {
|
|
42
|
+
chunk,
|
|
43
|
+
baseScore,
|
|
44
|
+
similarityScore,
|
|
45
|
+
pathMatchScore,
|
|
46
|
+
contentMatchScore,
|
|
47
|
+
symbolMatchScore,
|
|
48
|
+
fileTypeBoost,
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
// Sort by base score to find top files
|
|
52
|
+
initialScores.sort((a, b) => b.baseScore - a.baseScore);
|
|
53
|
+
// Calculate import boosts if import graph is provided
|
|
54
|
+
const importBoosts = calculateImportBoosts(initialScores, options.importGraph);
|
|
55
|
+
// Second pass: apply import boosts and create final ranked chunks
|
|
56
|
+
const ranked = initialScores.map(({ chunk, baseScore, similarityScore, pathMatchScore, contentMatchScore, symbolMatchScore, fileTypeBoost, }) => {
|
|
57
|
+
const importBoost = importBoosts.get(chunk.filePath) || 0;
|
|
58
|
+
const score = baseScore + WEIGHTS.importBoost * importBoost;
|
|
35
59
|
return {
|
|
36
60
|
...chunk,
|
|
37
61
|
score,
|
|
38
62
|
scoreBreakdown: {
|
|
39
63
|
similarity: similarityScore,
|
|
40
|
-
recency: recencyScore,
|
|
41
64
|
pathMatch: pathMatchScore,
|
|
65
|
+
contentMatch: contentMatchScore,
|
|
66
|
+
symbolMatch: symbolMatchScore,
|
|
67
|
+
fileTypeBoost: fileTypeBoost,
|
|
68
|
+
importBoost: importBoost,
|
|
42
69
|
},
|
|
43
70
|
};
|
|
44
71
|
});
|
|
45
72
|
// Sort by final score descending
|
|
46
73
|
ranked.sort((a, b) => b.score - a.score);
|
|
74
|
+
// Apply diversity penalty if enabled
|
|
75
|
+
if (options.diversityPenalty) {
|
|
76
|
+
return applyDiversityPenalty(ranked);
|
|
77
|
+
}
|
|
47
78
|
return ranked;
|
|
48
79
|
}
|
|
49
80
|
/**
|
|
50
|
-
*
|
|
81
|
+
* Calculate import boosts for files based on their relationship to top-scoring files
|
|
82
|
+
*
|
|
83
|
+
* If a top-scoring file imports another file, that file gets a boost.
|
|
84
|
+
* Boost decays based on how far from top the importer is.
|
|
85
|
+
*/
|
|
86
|
+
function calculateImportBoosts(scoredChunks, importGraph) {
|
|
87
|
+
const boosts = new Map();
|
|
88
|
+
if (!importGraph) {
|
|
89
|
+
return boosts;
|
|
90
|
+
}
|
|
91
|
+
// Get unique files from top chunks (consider top 20 as "selected")
|
|
92
|
+
const topFiles = new Set();
|
|
93
|
+
const fileScores = new Map();
|
|
94
|
+
for (const { chunk, baseScore } of scoredChunks.slice(0, 20)) {
|
|
95
|
+
if (!topFiles.has(chunk.filePath)) {
|
|
96
|
+
topFiles.add(chunk.filePath);
|
|
97
|
+
fileScores.set(chunk.filePath, baseScore);
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
// For each top file, boost its imports
|
|
101
|
+
for (const filePath of topFiles) {
|
|
102
|
+
const fileScore = fileScores.get(filePath) || 0;
|
|
103
|
+
const imports = importGraph.imports.get(filePath) || [];
|
|
104
|
+
for (const importedFile of imports) {
|
|
105
|
+
// Boost proportional to the importer's score
|
|
106
|
+
// Higher scoring importers give stronger boosts
|
|
107
|
+
const boost = Math.min(fileScore, 1.0);
|
|
108
|
+
const currentBoost = boosts.get(importedFile) || 0;
|
|
109
|
+
// Take max boost if multiple files import the same file
|
|
110
|
+
boosts.set(importedFile, Math.max(currentBoost, boost));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
return boosts;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Apply diversity penalty to avoid too many chunks from same file
|
|
117
|
+
*/
|
|
118
|
+
function applyDiversityPenalty(chunks) {
|
|
119
|
+
const fileChunkCount = new Map();
|
|
120
|
+
const PENALTY_PER_DUPLICATE = 0.1;
|
|
121
|
+
const MAX_PENALTY = 0.3;
|
|
122
|
+
return chunks.map((chunk) => {
|
|
123
|
+
const count = fileChunkCount.get(chunk.filePath) || 0;
|
|
124
|
+
fileChunkCount.set(chunk.filePath, count + 1);
|
|
125
|
+
if (count > 0) {
|
|
126
|
+
const penalty = Math.min(count * PENALTY_PER_DUPLICATE, MAX_PENALTY);
|
|
127
|
+
return {
|
|
128
|
+
...chunk,
|
|
129
|
+
score: chunk.score * (1 - penalty),
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
return chunk;
|
|
133
|
+
}).sort((a, b) => b.score - a.score);
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Extract keywords from query for matching
|
|
51
137
|
*/
|
|
52
138
|
function extractKeywords(query) {
|
|
53
139
|
return query
|
|
@@ -56,6 +142,24 @@ function extractKeywords(query) {
|
|
|
56
142
|
.filter((word) => word.length > 2)
|
|
57
143
|
.filter((word) => !STOP_WORDS.has(word));
|
|
58
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Extract potential code symbols from query (camelCase, snake_case, etc.)
|
|
147
|
+
*/
|
|
148
|
+
function extractSymbols(query) {
|
|
149
|
+
const symbols = [];
|
|
150
|
+
// Match camelCase, PascalCase, snake_case patterns
|
|
151
|
+
const symbolPattern = /[a-zA-Z_][a-zA-Z0-9_]*(?:[A-Z][a-z0-9]*)+|[a-z]+(?:_[a-z0-9]+)+/g;
|
|
152
|
+
const matches = query.match(symbolPattern) || [];
|
|
153
|
+
symbols.push(...matches.map(s => s.toLowerCase()));
|
|
154
|
+
// Also include any word that looks like a function/variable name (>4 chars, no spaces)
|
|
155
|
+
const words = query.split(/\s+/);
|
|
156
|
+
for (const word of words) {
|
|
157
|
+
if (word.length > 4 && /^[a-zA-Z_][a-zA-Z0-9_]*$/.test(word)) {
|
|
158
|
+
symbols.push(word.toLowerCase());
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return [...new Set(symbols)];
|
|
162
|
+
}
|
|
59
163
|
/**
|
|
60
164
|
* Calculate path match score (0-1)
|
|
61
165
|
*/
|
|
@@ -71,7 +175,104 @@ function calculatePathMatch(filePath, keywords) {
|
|
|
71
175
|
}
|
|
72
176
|
return matches / keywords.length;
|
|
73
177
|
}
|
|
74
|
-
/**
|
|
178
|
+
/**
|
|
179
|
+
* Calculate content keyword match score (0-1)
|
|
180
|
+
* Looks for exact keyword matches in content
|
|
181
|
+
*/
|
|
182
|
+
function calculateContentMatch(content, keywords) {
|
|
183
|
+
if (keywords.length === 0)
|
|
184
|
+
return 0;
|
|
185
|
+
let matches = 0;
|
|
186
|
+
let totalWeight = 0;
|
|
187
|
+
for (const keyword of keywords) {
|
|
188
|
+
// Count occurrences (capped at 5 for normalization)
|
|
189
|
+
const regex = new RegExp(`\\b${escapeRegex(keyword)}\\b`, 'gi');
|
|
190
|
+
const occurrences = (content.match(regex) || []).length;
|
|
191
|
+
if (occurrences > 0) {
|
|
192
|
+
matches++;
|
|
193
|
+
// Bonus for multiple occurrences (diminishing returns)
|
|
194
|
+
totalWeight += Math.min(occurrences, 5) / 5;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Combine match ratio and occurrence weight
|
|
198
|
+
const matchRatio = matches / keywords.length;
|
|
199
|
+
const avgWeight = matches > 0 ? totalWeight / matches : 0;
|
|
200
|
+
return matchRatio * 0.7 + avgWeight * 0.3;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Calculate code symbol match score (0-1)
|
|
204
|
+
* Looks for function names, class names, etc.
|
|
205
|
+
*/
|
|
206
|
+
function calculateSymbolMatch(content, symbols) {
|
|
207
|
+
if (symbols.length === 0)
|
|
208
|
+
return 0;
|
|
209
|
+
let matches = 0;
|
|
210
|
+
// Common code patterns to look for
|
|
211
|
+
const patterns = [
|
|
212
|
+
/function\s+(\w+)/gi, // function declarations
|
|
213
|
+
/const\s+(\w+)\s*=/gi, // const assignments
|
|
214
|
+
/class\s+(\w+)/gi, // class declarations
|
|
215
|
+
/export\s+(?:async\s+)?function\s+(\w+)/gi, // exported functions
|
|
216
|
+
/export\s+const\s+(\w+)/gi, // exported consts
|
|
217
|
+
/(\w+)\s*[:=]\s*(?:async\s+)?\(/gi, // method/property functions
|
|
218
|
+
];
|
|
219
|
+
// Extract all symbols from content
|
|
220
|
+
const contentSymbols = new Set();
|
|
221
|
+
for (const pattern of patterns) {
|
|
222
|
+
let match;
|
|
223
|
+
while ((match = pattern.exec(content)) !== null) {
|
|
224
|
+
contentSymbols.add(match[1].toLowerCase());
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
// Check for matches
|
|
228
|
+
for (const symbol of symbols) {
|
|
229
|
+
if (contentSymbols.has(symbol)) {
|
|
230
|
+
matches++;
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
// Partial match (symbol is substring of content symbol or vice versa)
|
|
234
|
+
for (const contentSymbol of contentSymbols) {
|
|
235
|
+
if (contentSymbol.includes(symbol) || symbol.includes(contentSymbol)) {
|
|
236
|
+
matches += 0.5;
|
|
237
|
+
break;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return Math.min(matches / symbols.length, 1);
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Calculate file type boost (0-1)
|
|
246
|
+
* Prioritizes implementation files over tests, configs, etc.
|
|
247
|
+
*/
|
|
248
|
+
function calculateFileTypeBoost(filePath) {
|
|
249
|
+
const pathLower = filePath.toLowerCase();
|
|
250
|
+
// Test files - lower priority
|
|
251
|
+
if (pathLower.includes('.test.') || pathLower.includes('.spec.') || pathLower.includes('__tests__')) {
|
|
252
|
+
return 0.3;
|
|
253
|
+
}
|
|
254
|
+
// Config/setup files - lower priority
|
|
255
|
+
if (pathLower.includes('config') || pathLower.includes('setup') || pathLower.endsWith('.json')) {
|
|
256
|
+
return 0.4;
|
|
257
|
+
}
|
|
258
|
+
// Type definition files
|
|
259
|
+
if (pathLower.endsWith('.d.ts')) {
|
|
260
|
+
return 0.5;
|
|
261
|
+
}
|
|
262
|
+
// Index/barrel files - medium priority
|
|
263
|
+
if (pathLower.endsWith('/index.ts') || pathLower.endsWith('/index.js')) {
|
|
264
|
+
return 0.6;
|
|
265
|
+
}
|
|
266
|
+
// Core implementation files - highest priority
|
|
267
|
+
return 1.0;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Escape special regex characters
|
|
271
|
+
*/
|
|
272
|
+
function escapeRegex(str) {
|
|
273
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
274
|
+
}
|
|
275
|
+
/** Common words to ignore in matching */
|
|
75
276
|
const STOP_WORDS = new Set([
|
|
76
277
|
'the',
|
|
77
278
|
'a',
|
|
@@ -109,5 +310,71 @@ const STOP_WORDS = new Set([
|
|
|
109
310
|
'to',
|
|
110
311
|
'in',
|
|
111
312
|
'on',
|
|
313
|
+
'work',
|
|
314
|
+
'works',
|
|
315
|
+
'working',
|
|
316
|
+
'use',
|
|
317
|
+
'using',
|
|
318
|
+
'used',
|
|
319
|
+
'can',
|
|
320
|
+
'could',
|
|
321
|
+
'would',
|
|
322
|
+
'should',
|
|
323
|
+
'will',
|
|
324
|
+
'get',
|
|
325
|
+
'set',
|
|
326
|
+
'make',
|
|
327
|
+
'find',
|
|
328
|
+
'show',
|
|
329
|
+
'tell',
|
|
330
|
+
'want',
|
|
331
|
+
'need',
|
|
332
|
+
'code',
|
|
333
|
+
'file',
|
|
334
|
+
'function',
|
|
112
335
|
]);
|
|
336
|
+
/**
|
|
337
|
+
* Build an import graph from a dependency map
|
|
338
|
+
*/
|
|
339
|
+
export function buildImportGraph(dependencyMap) {
|
|
340
|
+
const imports = new Map();
|
|
341
|
+
const importedBy = new Map();
|
|
342
|
+
for (const [file, deps] of dependencyMap) {
|
|
343
|
+
imports.set(file, deps);
|
|
344
|
+
for (const dep of deps) {
|
|
345
|
+
const existing = importedBy.get(dep) || [];
|
|
346
|
+
if (!existing.includes(file)) {
|
|
347
|
+
existing.push(file);
|
|
348
|
+
}
|
|
349
|
+
importedBy.set(dep, existing);
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
return { imports, importedBy };
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Get files that should be included based on imports from selected files
|
|
356
|
+
*/
|
|
357
|
+
export function getRelatedImports(selectedFiles, importGraph, options = {}) {
|
|
358
|
+
const maxDepth = options.maxDepth ?? 1;
|
|
359
|
+
const related = new Set();
|
|
360
|
+
const visited = new Set(selectedFiles);
|
|
361
|
+
let currentLevel = selectedFiles;
|
|
362
|
+
for (let depth = 0; depth < maxDepth; depth++) {
|
|
363
|
+
const nextLevel = [];
|
|
364
|
+
for (const file of currentLevel) {
|
|
365
|
+
const imports = importGraph.imports.get(file) || [];
|
|
366
|
+
for (const importedFile of imports) {
|
|
367
|
+
if (!visited.has(importedFile)) {
|
|
368
|
+
visited.add(importedFile);
|
|
369
|
+
related.add(importedFile);
|
|
370
|
+
nextLevel.push(importedFile);
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
currentLevel = nextLevel;
|
|
375
|
+
if (currentLevel.length === 0)
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
return Array.from(related);
|
|
379
|
+
}
|
|
113
380
|
//# sourceMappingURL=scoring.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/selector/scoring.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/selector/scoring.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/streams.d.ts
CHANGED
|
@@ -37,4 +37,8 @@ export declare function writeWarning(message: string): void;
|
|
|
37
37
|
* Write info to stderr
|
|
38
38
|
*/
|
|
39
39
|
export declare function writeInfo(message: string): void;
|
|
40
|
+
/**
|
|
41
|
+
* Write dim/muted text to stderr
|
|
42
|
+
*/
|
|
43
|
+
export declare function writeDim(message: string): void;
|
|
40
44
|
//# sourceMappingURL=streams.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../../src/utils/streams.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG/C"}
|
|
1
|
+
{"version":3,"file":"streams.d.ts","sourceRoot":"","sources":["../../src/utils/streams.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH;;GAEG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAExC;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAElD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGhD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAGlD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG/C;AAED;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAG9C"}
|
package/dist/utils/streams.js
CHANGED
|
@@ -58,4 +58,11 @@ export function writeInfo(message) {
|
|
|
58
58
|
const prefix = shouldUseColor() ? chalk.blue('ℹ') : 'ℹ';
|
|
59
59
|
process.stderr.write(`${prefix} ${message}\n`);
|
|
60
60
|
}
|
|
61
|
+
/**
|
|
62
|
+
* Write dim/muted text to stderr
|
|
63
|
+
*/
|
|
64
|
+
export function writeDim(message) {
|
|
65
|
+
const text = shouldUseColor() ? chalk.dim(message) : message;
|
|
66
|
+
process.stderr.write(`${text}\n`);
|
|
67
|
+
}
|
|
61
68
|
//# sourceMappingURL=streams.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"streams.js","sourceRoot":"","sources":["../../src/utils/streams.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,KAAK;IACnB,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,EAAE,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;AACjD,CAAC"}
|
|
1
|
+
{"version":3,"file":"streams.js","sourceRoot":"","sources":["../../src/utils/streams.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,KAAK;IACnB,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc;IAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,KAAK,EAAE,CAAC;AACtF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IACjE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACzD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAC1D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IACxD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,OAAO,IAAI,CAAC,CAAC;AACjD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,IAAI,CAAC,CAAC;AACpC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@milo4jo/contextkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Intelligent context selection for LLM applications",
|
|
5
5
|
"author": "Milo <milo4jo@outlook.de>",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"bin": {
|
|
9
|
-
"contextkit": "dist/index.js"
|
|
9
|
+
"contextkit": "dist/index.js",
|
|
10
|
+
"contextkit-mcp": "dist/mcp-server.js"
|
|
10
11
|
},
|
|
11
12
|
"main": "./dist/index.js",
|
|
12
13
|
"types": "./dist/index.d.ts",
|
|
@@ -22,12 +23,15 @@
|
|
|
22
23
|
"format": "prettier --write .",
|
|
23
24
|
"format:check": "prettier --check .",
|
|
24
25
|
"clean": "rm -rf dist",
|
|
25
|
-
"prepublishOnly": "npm run build"
|
|
26
|
+
"prepublishOnly": "npm run build",
|
|
27
|
+
"test": "vitest run"
|
|
26
28
|
},
|
|
27
29
|
"dependencies": {
|
|
30
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
28
31
|
"@xenova/transformers": "^2.17.2",
|
|
29
32
|
"better-sqlite3": "^11.7.0",
|
|
30
33
|
"chalk": "^5.3.0",
|
|
34
|
+
"chokidar": "^5.0.0",
|
|
31
35
|
"cli-progress": "^3.12.0",
|
|
32
36
|
"commander": "^12.1.0",
|
|
33
37
|
"fast-glob": "^3.3.2",
|
|
@@ -41,12 +45,13 @@
|
|
|
41
45
|
"eslint": "^9.18.0",
|
|
42
46
|
"prettier": "^3.4.2",
|
|
43
47
|
"typescript": "^5.7.3",
|
|
44
|
-
"typescript-eslint": "^8.20.0"
|
|
48
|
+
"typescript-eslint": "^8.20.0",
|
|
49
|
+
"vitest": "^4.0.18"
|
|
45
50
|
},
|
|
46
51
|
"engines": {
|
|
47
52
|
"node": ">=18"
|
|
48
53
|
},
|
|
49
|
-
"homepage": "https://
|
|
54
|
+
"homepage": "https://contextkit-site.vercel.app",
|
|
50
55
|
"bugs": {
|
|
51
56
|
"url": "https://github.com/milo4jo/contextkit/issues"
|
|
52
57
|
},
|
|
@@ -58,7 +63,14 @@
|
|
|
58
63
|
"embeddings",
|
|
59
64
|
"claude",
|
|
60
65
|
"gpt",
|
|
61
|
-
"cli"
|
|
66
|
+
"cli",
|
|
67
|
+
"mcp",
|
|
68
|
+
"model-context-protocol",
|
|
69
|
+
"semantic-search",
|
|
70
|
+
"code-search",
|
|
71
|
+
"context-window",
|
|
72
|
+
"token-budget",
|
|
73
|
+
"coding-assistant"
|
|
62
74
|
],
|
|
63
75
|
"repository": {
|
|
64
76
|
"type": "git",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../src/commands/source.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,eAAO,MAAM,aAAa,SAKtB,CAAC"}
|
package/dist/commands/source.js
DELETED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { Command } from 'commander';
|
|
2
|
-
import { existsSync, statSync } from 'fs';
|
|
3
|
-
import { resolve, relative, basename } from 'path';
|
|
4
|
-
import chalk from 'chalk';
|
|
5
|
-
import fg from 'fast-glob';
|
|
6
|
-
import { loadConfig, saveConfig, ensureInitialized } from '../config/index.js';
|
|
7
|
-
import { output } from '../utils/output.js';
|
|
8
|
-
export const sourceCommand = new Command('source')
|
|
9
|
-
.description('Manage sources')
|
|
10
|
-
.action(() => {
|
|
11
|
-
// Show subcommand help when no subcommand given
|
|
12
|
-
sourceCommand.help();
|
|
13
|
-
});
|
|
14
|
-
// source add
|
|
15
|
-
sourceCommand
|
|
16
|
-
.command('add <path>')
|
|
17
|
-
.description('Add a directory as a source')
|
|
18
|
-
.option('-n, --name <name>', 'Custom name for the source')
|
|
19
|
-
.option('-i, --include <patterns...>', 'Include patterns (glob)')
|
|
20
|
-
.option('-e, --exclude <patterns...>', 'Exclude patterns (glob)')
|
|
21
|
-
.action(async (path, options) => {
|
|
22
|
-
ensureInitialized();
|
|
23
|
-
const absolutePath = resolve(process.cwd(), path);
|
|
24
|
-
const relativePath = './' + relative(process.cwd(), absolutePath);
|
|
25
|
-
// Validate path exists
|
|
26
|
-
if (!existsSync(absolutePath)) {
|
|
27
|
-
output.error('Path not found');
|
|
28
|
-
// Try to suggest similar paths
|
|
29
|
-
const parent = resolve(absolutePath, '..');
|
|
30
|
-
if (existsSync(parent)) {
|
|
31
|
-
const entries = fg.sync(['*'], { cwd: parent, onlyDirectories: true });
|
|
32
|
-
const similar = entries.filter((e) => e.toLowerCase().includes(basename(path).toLowerCase()));
|
|
33
|
-
if (similar.length > 0) {
|
|
34
|
-
console.error(`Did you mean '${similar[0]}'?`);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
process.exit(1);
|
|
38
|
-
}
|
|
39
|
-
// Validate it's a directory
|
|
40
|
-
if (!statSync(absolutePath).isDirectory()) {
|
|
41
|
-
output.error('Not a directory');
|
|
42
|
-
console.error(`'${path}' is a file, not a directory.`);
|
|
43
|
-
process.exit(1);
|
|
44
|
-
}
|
|
45
|
-
// Load config
|
|
46
|
-
const config = loadConfig();
|
|
47
|
-
// Generate source ID
|
|
48
|
-
const sourceId = options.name || basename(absolutePath);
|
|
49
|
-
// Check for duplicates
|
|
50
|
-
const existing = config.sources.find((s) => s.id === sourceId);
|
|
51
|
-
if (existing) {
|
|
52
|
-
output.error('Source already exists');
|
|
53
|
-
console.error(`A source named '${sourceId}' already exists.`);
|
|
54
|
-
console.error(`Use a different name with ${chalk.cyan('--name')}`);
|
|
55
|
-
process.exit(1);
|
|
56
|
-
}
|
|
57
|
-
// Count files
|
|
58
|
-
const defaultInclude = ['**/*.ts', '**/*.js', '**/*.tsx', '**/*.jsx', '**/*.md', '**/*.json'];
|
|
59
|
-
const defaultExclude = ['**/node_modules/**', '**/dist/**', '**/.git/**'];
|
|
60
|
-
const include = options.include || defaultInclude;
|
|
61
|
-
const exclude = options.exclude || defaultExclude;
|
|
62
|
-
const files = fg.sync(include, {
|
|
63
|
-
cwd: absolutePath,
|
|
64
|
-
ignore: exclude,
|
|
65
|
-
onlyFiles: true,
|
|
66
|
-
});
|
|
67
|
-
// Create source entry
|
|
68
|
-
const source = {
|
|
69
|
-
id: sourceId,
|
|
70
|
-
path: relativePath,
|
|
71
|
-
patterns: {
|
|
72
|
-
include,
|
|
73
|
-
exclude,
|
|
74
|
-
},
|
|
75
|
-
};
|
|
76
|
-
// Add to config
|
|
77
|
-
config.sources.push(source);
|
|
78
|
-
saveConfig(config);
|
|
79
|
-
// Output
|
|
80
|
-
output.success(`Added source '${chalk.cyan(sourceId)}'`);
|
|
81
|
-
console.log(` Path: ${relativePath}`);
|
|
82
|
-
console.log(` Files: ${files.length} (${getFileExtensions(files)})`);
|
|
83
|
-
console.log();
|
|
84
|
-
console.log(`Run ${chalk.cyan('contextkit index')} to index this source.`);
|
|
85
|
-
});
|
|
86
|
-
// source list
|
|
87
|
-
sourceCommand
|
|
88
|
-
.command('list')
|
|
89
|
-
.description('List configured sources')
|
|
90
|
-
.action(() => {
|
|
91
|
-
ensureInitialized();
|
|
92
|
-
const config = loadConfig();
|
|
93
|
-
const opts = sourceCommand.parent?.opts() || {};
|
|
94
|
-
if (config.sources.length === 0) {
|
|
95
|
-
if (opts.json) {
|
|
96
|
-
console.log(JSON.stringify({ sources: [] }));
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
console.log('No sources configured.');
|
|
100
|
-
console.log(`Add one with ${chalk.cyan('contextkit source add <path>')}`);
|
|
101
|
-
}
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
if (opts.json) {
|
|
105
|
-
console.log(JSON.stringify({ sources: config.sources }, null, 2));
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
if (opts.plain) {
|
|
109
|
-
for (const source of config.sources) {
|
|
110
|
-
console.log(`${source.id}\t${source.path}`);
|
|
111
|
-
}
|
|
112
|
-
return;
|
|
113
|
-
}
|
|
114
|
-
// Table output
|
|
115
|
-
console.log();
|
|
116
|
-
console.log(chalk.bold('Sources:'));
|
|
117
|
-
console.log(` ${chalk.gray('NAME'.padEnd(15))} ${chalk.gray('PATH')}`);
|
|
118
|
-
for (const source of config.sources) {
|
|
119
|
-
console.log(` ${source.id.padEnd(15)} ${source.path}`);
|
|
120
|
-
}
|
|
121
|
-
console.log();
|
|
122
|
-
console.log(`Total: ${config.sources.length} source${config.sources.length === 1 ? '' : 's'}`);
|
|
123
|
-
});
|
|
124
|
-
// source remove
|
|
125
|
-
sourceCommand
|
|
126
|
-
.command('remove <name>')
|
|
127
|
-
.alias('rm')
|
|
128
|
-
.description('Remove a source')
|
|
129
|
-
.action((name) => {
|
|
130
|
-
ensureInitialized();
|
|
131
|
-
const config = loadConfig();
|
|
132
|
-
const index = config.sources.findIndex((s) => s.id === name);
|
|
133
|
-
if (index === -1) {
|
|
134
|
-
output.error('Source not found');
|
|
135
|
-
console.error(`No source named '${name}'.`);
|
|
136
|
-
console.error(`Run ${chalk.cyan('contextkit source list')} to see available sources.`);
|
|
137
|
-
process.exit(1);
|
|
138
|
-
}
|
|
139
|
-
config.sources.splice(index, 1);
|
|
140
|
-
saveConfig(config);
|
|
141
|
-
output.success(`Removed source '${chalk.cyan(name)}'`);
|
|
142
|
-
console.log(`Run ${chalk.cyan('contextkit index')} to update the index.`);
|
|
143
|
-
});
|
|
144
|
-
function getFileExtensions(files) {
|
|
145
|
-
const exts = new Set();
|
|
146
|
-
for (const file of files) {
|
|
147
|
-
const ext = file.split('.').pop();
|
|
148
|
-
if (ext)
|
|
149
|
-
exts.add(ext);
|
|
150
|
-
}
|
|
151
|
-
return Array.from(exts).slice(0, 5).join(', ') + (exts.size > 5 ? '...' : '');
|
|
152
|
-
}
|
|
153
|
-
//# sourceMappingURL=source.js.map
|