@milo4jo/contextkit 0.3.0 → 0.5.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.
- package/README.md +43 -11
- package/dist/commands/cache.d.ts +3 -0
- package/dist/commands/cache.d.ts.map +1 -0
- package/dist/commands/cache.js +50 -0
- package/dist/commands/cache.js.map +1 -0
- package/dist/commands/select.d.ts.map +1 -1
- package/dist/commands/select.js +17 -9
- package/dist/commands/select.js.map +1 -1
- 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 +47 -0
- package/dist/db/index.d.ts.map +1 -1
- package/dist/db/index.js +98 -0
- package/dist/db/index.js.map +1 -1
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/dist/indexer/chunker.d.ts +15 -2
- package/dist/indexer/chunker.d.ts.map +1 -1
- package/dist/indexer/chunker.js +222 -3
- package/dist/indexer/chunker.js.map +1 -1
- package/dist/parsers/index.d.ts +45 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +71 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/typescript.d.ts +43 -0
- package/dist/parsers/typescript.d.ts.map +1 -0
- package/dist/parsers/typescript.js +306 -0
- package/dist/parsers/typescript.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/formatter.d.ts +15 -0
- package/dist/selector/formatter.d.ts.map +1 -1
- package/dist/selector/formatter.js +132 -0
- package/dist/selector/formatter.js.map +1 -1
- package/dist/selector/index.d.ts +15 -4
- package/dist/selector/index.d.ts.map +1 -1
- package/dist/selector/index.js +100 -12
- package/dist/selector/index.js.map +1 -1
- package/dist/selector/scoring.d.ts +20 -0
- package/dist/selector/scoring.d.ts.map +1 -1
- package/dist/selector/scoring.js +103 -10
- package/dist/selector/scoring.js.map +1 -1
- package/package.json +1 -1
- 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/index.js
CHANGED
|
@@ -3,19 +3,22 @@
|
|
|
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 {
|
|
13
|
+
import { formatInFormat } from './formatter.js';
|
|
14
|
+
import { parseImportsWithResolution, isJsTsFile } from '../retrieval/imports.js';
|
|
15
|
+
import { generateCacheKey, computeIndexVersion, getCachedResult, setCachedResult, } from '../db/index.js';
|
|
14
16
|
/**
|
|
15
17
|
* Select optimal context for a query
|
|
16
18
|
*/
|
|
17
19
|
export async function selectContext(db, options) {
|
|
18
20
|
const startTime = Date.now();
|
|
21
|
+
const format = options.format || 'markdown';
|
|
19
22
|
// Check if index has any chunks
|
|
20
23
|
const countResult = db.prepare('SELECT COUNT(*) as count FROM chunks').get();
|
|
21
24
|
if (countResult.count === 0) {
|
|
@@ -36,32 +39,117 @@ export async function selectContext(db, options) {
|
|
|
36
39
|
},
|
|
37
40
|
},
|
|
38
41
|
isEmpty: true,
|
|
42
|
+
fromCache: false,
|
|
39
43
|
};
|
|
40
44
|
}
|
|
45
|
+
// Check cache (skip if --explain is used or --no-cache is set)
|
|
46
|
+
const useCache = !options.explain && !options.noCache;
|
|
47
|
+
let cacheKey;
|
|
48
|
+
let indexVersion;
|
|
49
|
+
if (useCache) {
|
|
50
|
+
cacheKey = generateCacheKey({
|
|
51
|
+
query: options.query,
|
|
52
|
+
budget: options.budget,
|
|
53
|
+
sources: options.sources,
|
|
54
|
+
format,
|
|
55
|
+
includeImports: options.includeImports,
|
|
56
|
+
});
|
|
57
|
+
indexVersion = computeIndexVersion(db);
|
|
58
|
+
const cachedResult = getCachedResult(db, cacheKey, indexVersion);
|
|
59
|
+
if (cachedResult) {
|
|
60
|
+
const data = JSON.parse(cachedResult);
|
|
61
|
+
return {
|
|
62
|
+
output: {
|
|
63
|
+
text: format === 'json' ? JSON.stringify(data, null, 2) : data.context,
|
|
64
|
+
data,
|
|
65
|
+
},
|
|
66
|
+
isEmpty: false,
|
|
67
|
+
fromCache: true,
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
}
|
|
41
71
|
// Step 1: Search for similar chunks
|
|
42
72
|
const searchOpts = {
|
|
43
73
|
limit: 50,
|
|
44
74
|
sources: options.sources,
|
|
45
75
|
};
|
|
46
76
|
const similarChunks = await searchSimilar(db, options.query, searchOpts);
|
|
47
|
-
// Step 2:
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
77
|
+
// Step 2: Build import graph if needed
|
|
78
|
+
let importGraph;
|
|
79
|
+
if (options.includeImports) {
|
|
80
|
+
importGraph = buildImportGraphFromChunks(db, options.basePath || process.cwd());
|
|
81
|
+
}
|
|
82
|
+
// Step 3: Score and rank (with import boost if graph provided)
|
|
83
|
+
const rankedChunks = rankChunks(similarChunks, options.query, { importGraph });
|
|
84
|
+
// Step 4: Fit to budget
|
|
85
|
+
let budgetResult = fitToBudget(rankedChunks, options.budget);
|
|
86
|
+
// Step 5: Include related imports if requested
|
|
87
|
+
if (options.includeImports && importGraph) {
|
|
88
|
+
const selectedFiles = [...new Set(budgetResult.chunks.map(c => c.filePath))];
|
|
89
|
+
const relatedFiles = getRelatedImports(selectedFiles, importGraph);
|
|
90
|
+
// Find chunks from related files that aren't already included
|
|
91
|
+
const includedFiles = new Set(budgetResult.chunks.map(c => c.filePath));
|
|
92
|
+
const relatedChunks = similarChunks.filter(c => relatedFiles.includes(c.filePath) && !includedFiles.has(c.filePath));
|
|
93
|
+
if (relatedChunks.length > 0) {
|
|
94
|
+
// Score and add related chunks with remaining budget
|
|
95
|
+
const relatedRanked = rankChunks(relatedChunks, options.query, { importGraph });
|
|
96
|
+
const remainingBudget = options.budget - budgetResult.totalTokens;
|
|
97
|
+
if (remainingBudget > 0) {
|
|
98
|
+
const relatedBudget = fitToBudget(relatedRanked, remainingBudget);
|
|
99
|
+
budgetResult = {
|
|
100
|
+
chunks: [...budgetResult.chunks, ...relatedBudget.chunks],
|
|
101
|
+
totalTokens: budgetResult.totalTokens + relatedBudget.totalTokens,
|
|
102
|
+
excluded: budgetResult.excluded + relatedBudget.excluded,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
// Step 6: Merge adjacent chunks for cleaner output
|
|
52
108
|
const mergedChunks = mergeAdjacentChunks(budgetResult.chunks);
|
|
53
109
|
const mergedResult = {
|
|
54
110
|
...budgetResult,
|
|
55
111
|
chunks: mergedChunks,
|
|
56
112
|
};
|
|
57
|
-
// Step
|
|
113
|
+
// Step 7: Format output
|
|
58
114
|
const timeMs = Date.now() - startTime;
|
|
59
|
-
const output = options.explain
|
|
60
|
-
|
|
61
|
-
|
|
115
|
+
const output = formatInFormat(format, options.query, mergedResult, similarChunks.length, timeMs, options.explain);
|
|
116
|
+
// Step 8: Store in cache (if caching is enabled)
|
|
117
|
+
if (useCache && cacheKey && indexVersion) {
|
|
118
|
+
setCachedResult(db, cacheKey, JSON.stringify(output.data), indexVersion);
|
|
119
|
+
}
|
|
62
120
|
return {
|
|
63
121
|
output,
|
|
64
122
|
isEmpty: false,
|
|
123
|
+
fromCache: false,
|
|
65
124
|
};
|
|
66
125
|
}
|
|
126
|
+
/**
|
|
127
|
+
* Build import graph from all indexed chunks
|
|
128
|
+
*/
|
|
129
|
+
function buildImportGraphFromChunks(db, basePath) {
|
|
130
|
+
// Get all unique files and their content
|
|
131
|
+
const rows = db.prepare(`
|
|
132
|
+
SELECT DISTINCT file_path, content
|
|
133
|
+
FROM chunks
|
|
134
|
+
ORDER BY file_path, start_line
|
|
135
|
+
`).all();
|
|
136
|
+
// Group content by file (combine chunks)
|
|
137
|
+
const fileContents = new Map();
|
|
138
|
+
for (const row of rows) {
|
|
139
|
+
const existing = fileContents.get(row.file_path) || '';
|
|
140
|
+
fileContents.set(row.file_path, existing + row.content);
|
|
141
|
+
}
|
|
142
|
+
// Parse imports for each JS/TS file
|
|
143
|
+
const dependencyMap = new Map();
|
|
144
|
+
for (const [filePath, content] of fileContents) {
|
|
145
|
+
if (!isJsTsFile(filePath)) {
|
|
146
|
+
dependencyMap.set(filePath, []);
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
149
|
+
const { relatedFiles } = parseImportsWithResolution(content, filePath, basePath);
|
|
150
|
+
dependencyMap.set(filePath, relatedFiles);
|
|
151
|
+
}
|
|
152
|
+
return buildImportGraph(dependencyMap);
|
|
153
|
+
}
|
|
154
|
+
export { buildImportGraph, getRelatedImports } from './scoring.js';
|
|
67
155
|
//# 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;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/selector/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -22,15 +22,35 @@ export interface RankedChunk extends ScoredChunk {
|
|
|
22
22
|
contentMatch: number;
|
|
23
23
|
symbolMatch: number;
|
|
24
24
|
fileTypeBoost: number;
|
|
25
|
+
importBoost: number;
|
|
25
26
|
};
|
|
26
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
|
+
}
|
|
27
35
|
/** Options for scoring */
|
|
28
36
|
export interface ScoringOptions {
|
|
29
37
|
/** Apply diversity penalty (reduce score for many chunks from same file) */
|
|
30
38
|
diversityPenalty?: boolean;
|
|
39
|
+
/** Import relationships for boosting related files */
|
|
40
|
+
importGraph?: ImportGraph;
|
|
31
41
|
}
|
|
32
42
|
/**
|
|
33
43
|
* Calculate scores and rank chunks
|
|
34
44
|
*/
|
|
35
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[];
|
|
36
56
|
//# sourceMappingURL=scoring.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
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;
|
|
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"}
|
package/dist/selector/scoring.js
CHANGED
|
@@ -12,11 +12,12 @@
|
|
|
12
12
|
*/
|
|
13
13
|
/** Scoring weights - tuned for code search */
|
|
14
14
|
const WEIGHTS = {
|
|
15
|
-
similarity: 0.
|
|
15
|
+
similarity: 0.45, // Semantic similarity is primary signal
|
|
16
16
|
pathMatch: 0.15, // Path contains query keywords
|
|
17
17
|
contentMatch: 0.15, // Content contains exact keywords
|
|
18
18
|
symbolMatch: 0.15, // Contains relevant function/class names
|
|
19
19
|
fileTypeBoost: 0.05, // File type priority
|
|
20
|
+
importBoost: 0.05, // File is imported by selected chunks
|
|
20
21
|
};
|
|
21
22
|
/**
|
|
22
23
|
* Calculate scores and rank chunks
|
|
@@ -25,24 +26,36 @@ export function rankChunks(chunks, query, options = {}) {
|
|
|
25
26
|
// Extract keywords and symbols from query
|
|
26
27
|
const queryKeywords = extractKeywords(query);
|
|
27
28
|
const querySymbols = extractSymbols(query);
|
|
28
|
-
//
|
|
29
|
-
const
|
|
30
|
-
// Semantic similarity (already 0-1)
|
|
29
|
+
// First pass: score all chunks without import boost
|
|
30
|
+
const initialScores = chunks.map((chunk) => {
|
|
31
31
|
const similarityScore = chunk.similarity;
|
|
32
|
-
// Path match bonus (query keywords in file path)
|
|
33
32
|
const pathMatchScore = calculatePathMatch(chunk.filePath, queryKeywords);
|
|
34
|
-
// Content keyword match (exact words in content)
|
|
35
33
|
const contentMatchScore = calculateContentMatch(chunk.content, queryKeywords);
|
|
36
|
-
// Code symbol match (function/class names)
|
|
37
34
|
const symbolMatchScore = calculateSymbolMatch(chunk.content, querySymbols);
|
|
38
|
-
// File type boost
|
|
39
35
|
const fileTypeBoost = calculateFileTypeBoost(chunk.filePath);
|
|
40
|
-
|
|
41
|
-
const score = WEIGHTS.similarity * similarityScore +
|
|
36
|
+
const baseScore = WEIGHTS.similarity * similarityScore +
|
|
42
37
|
WEIGHTS.pathMatch * pathMatchScore +
|
|
43
38
|
WEIGHTS.contentMatch * contentMatchScore +
|
|
44
39
|
WEIGHTS.symbolMatch * symbolMatchScore +
|
|
45
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;
|
|
46
59
|
return {
|
|
47
60
|
...chunk,
|
|
48
61
|
score,
|
|
@@ -52,6 +65,7 @@ export function rankChunks(chunks, query, options = {}) {
|
|
|
52
65
|
contentMatch: contentMatchScore,
|
|
53
66
|
symbolMatch: symbolMatchScore,
|
|
54
67
|
fileTypeBoost: fileTypeBoost,
|
|
68
|
+
importBoost: importBoost,
|
|
55
69
|
},
|
|
56
70
|
};
|
|
57
71
|
});
|
|
@@ -63,6 +77,41 @@ export function rankChunks(chunks, query, options = {}) {
|
|
|
63
77
|
}
|
|
64
78
|
return ranked;
|
|
65
79
|
}
|
|
80
|
+
/**
|
|
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
|
+
}
|
|
66
115
|
/**
|
|
67
116
|
* Apply diversity penalty to avoid too many chunks from same file
|
|
68
117
|
*/
|
|
@@ -284,4 +333,48 @@ const STOP_WORDS = new Set([
|
|
|
284
333
|
'file',
|
|
285
334
|
'function',
|
|
286
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
|
+
}
|
|
287
380
|
//# sourceMappingURL=scoring.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/selector/scoring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"scoring.js","sourceRoot":"","sources":["../../src/selector/scoring.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/commands/source.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/output.d.ts
DELETED
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Output utilities for consistent CLI formatting
|
|
3
|
-
*/
|
|
4
|
-
export declare const output: {
|
|
5
|
-
/**
|
|
6
|
-
* Print a success message with checkmark
|
|
7
|
-
*/
|
|
8
|
-
success(message: string): void;
|
|
9
|
-
/**
|
|
10
|
-
* Print an error message
|
|
11
|
-
*/
|
|
12
|
-
error(message: string): void;
|
|
13
|
-
/**
|
|
14
|
-
* Print a warning message
|
|
15
|
-
*/
|
|
16
|
-
warn(message: string): void;
|
|
17
|
-
/**
|
|
18
|
-
* Print an info message
|
|
19
|
-
*/
|
|
20
|
-
info(message: string): void;
|
|
21
|
-
/**
|
|
22
|
-
* Print a dim/secondary message
|
|
23
|
-
*/
|
|
24
|
-
dim(message: string): void;
|
|
25
|
-
/**
|
|
26
|
-
* Print a heading
|
|
27
|
-
*/
|
|
28
|
-
heading(message: string): void;
|
|
29
|
-
/**
|
|
30
|
-
* Print a key-value pair
|
|
31
|
-
*/
|
|
32
|
-
keyValue(key: string, value: string): void;
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Check if stdout is a TTY (for progress bars, colors, etc.)
|
|
36
|
-
*/
|
|
37
|
-
export declare function isTTY(): boolean;
|
|
38
|
-
/**
|
|
39
|
-
* Check if colors should be disabled
|
|
40
|
-
*/
|
|
41
|
-
export declare function isNoColor(): boolean;
|
|
42
|
-
//# sourceMappingURL=output.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"output.d.ts","sourceRoot":"","sources":["../../src/utils/output.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,MAAM;IACjB;;OAEG;qBACc,MAAM,GAAG,IAAI;IAI9B;;OAEG;mBACY,MAAM,GAAG,IAAI;IAI5B;;OAEG;kBACW,MAAM,GAAG,IAAI;IAI3B;;OAEG;kBACW,MAAM,GAAG,IAAI;IAI3B;;OAEG;iBACU,MAAM,GAAG,IAAI;IAI1B;;OAEG;qBACc,MAAM,GAAG,IAAI;IAK9B;;OAEG;kBACW,MAAM,SAAS,MAAM,GAAG,IAAI;CAG3C,CAAC;AAEF;;GAEG;AACH,wBAAgB,KAAK,IAAI,OAAO,CAE/B;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,OAAO,CAEnC"}
|