skill-creator 1.0.0 → 1.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.
- package/README.md +14 -5
- package/dist/cli.d.ts +1 -2
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +30 -29
- package/dist/cli.js.map +1 -1
- package/dist/commands/init.js +2 -2
- package/dist/commands/init.js.map +1 -1
- package/dist/core/chromaSearch.d.ts +2 -2
- package/dist/core/chromaSearch.d.ts.map +1 -1
- package/dist/core/chromaSearch.js +11 -9
- package/dist/core/chromaSearch.js.map +1 -1
- package/dist/core/skillCreator.d.ts +2 -2
- package/dist/core/skillCreator.d.ts.map +1 -1
- package/dist/core/skillCreator.js +39 -116
- package/dist/core/skillCreator.js.map +1 -1
- package/dist/core/templateManager.d.ts +2 -1
- package/dist/core/templateManager.d.ts.map +1 -1
- package/dist/core/templateManager.js +19 -13
- package/dist/core/templateManager.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/SKILL.md +193 -0
- package/templates/SKILL.zh-CN.md +193 -0
- package/templates/skill-creator.md +6 -4
- package/templates/skill-creator.zh-CN.md +9 -4
- package/dist/commands/initCc.d.ts +0 -5
- package/dist/commands/initCc.d.ts.map +0 -1
- package/dist/commands/initCc.js +0 -26
- package/dist/commands/initCc.js.map +0 -1
- package/dist/commands/updateContext7.d.ts +0 -5
- package/dist/commands/updateContext7.d.ts.map +0 -1
- package/dist/commands/updateContext7.js +0 -28
- package/dist/commands/updateContext7.js.map +0 -1
- package/dist/core/chromaLocalSearch.d.ts +0 -26
- package/dist/core/chromaLocalSearch.d.ts.map +0 -1
- package/dist/core/chromaLocalSearch.js +0 -212
- package/dist/core/chromaLocalSearch.js.map +0 -1
- package/dist/core/chromaLocalSimple.d.ts +0 -24
- package/dist/core/chromaLocalSimple.d.ts.map +0 -1
- package/dist/core/chromaLocalSimple.js +0 -216
- package/dist/core/chromaLocalSimple.js.map +0 -1
- package/dist/core/chromaSearchImproved.d.ts +0 -29
- package/dist/core/chromaSearchImproved.d.ts.map +0 -1
- package/dist/core/chromaSearchImproved.js +0 -259
- package/dist/core/chromaSearchImproved.js.map +0 -1
- package/dist/core/fuseSearch.d.ts +0 -25
- package/dist/core/fuseSearch.d.ts.map +0 -1
- package/dist/core/fuseSearch.js +0 -198
- package/dist/core/fuseSearch.js.map +0 -1
- package/dist/core/fuzzySearch.d.ts +0 -66
- package/dist/core/fuzzySearch.d.ts.map +0 -1
- package/dist/core/fuzzySearch.js +0 -271
- package/dist/core/fuzzySearch.js.map +0 -1
- package/dist/core/searchEngine.d.ts +0 -25
- package/dist/core/searchEngine.d.ts.map +0 -1
- package/dist/core/searchEngine.js +0 -198
- package/dist/core/searchEngine.js.map +0 -1
- package/dist/core/simpleLocalSearch.d.ts +0 -50
- package/dist/core/simpleLocalSearch.d.ts.map +0 -1
- package/dist/core/simpleLocalSearch.js +0 -406
- package/dist/core/simpleLocalSearch.js.map +0 -1
- package/dist/core/simpleSearch.d.ts +0 -21
- package/dist/core/simpleSearch.d.ts.map +0 -1
- package/dist/core/simpleSearch.js +0 -113
- package/dist/core/simpleSearch.js.map +0 -1
- package/dist/test/testFuzzy.d.ts +0 -3
- package/dist/test/testFuzzy.d.ts.map +0 -1
- package/dist/test/testFuzzy.js +0 -72
- package/dist/test/testFuzzy.js.map +0 -1
- package/dist/test-fuzzy.d.ts +0 -6
- package/dist/test-fuzzy.d.ts.map +0 -1
- package/dist/test-fuzzy.js +0 -65
- package/dist/test-fuzzy.js.map +0 -1
package/dist/core/fuzzySearch.js
DELETED
|
@@ -1,271 +0,0 @@
|
|
|
1
|
-
import uFuzzy from '@leeoniya/ufuzzy';
|
|
2
|
-
import { glob } from 'glob';
|
|
3
|
-
import { readFileSync } from 'node:fs';
|
|
4
|
-
export class FuzzySearchEngine {
|
|
5
|
-
options;
|
|
6
|
-
documents = [];
|
|
7
|
-
constructor(options = {}) {
|
|
8
|
-
this.options = {
|
|
9
|
-
fuzzyThreshold: 0.5,
|
|
10
|
-
prioritizeExact: true,
|
|
11
|
-
maxResults: 20,
|
|
12
|
-
...options,
|
|
13
|
-
};
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Enhanced fuzzy search function that returns both indices and detailed info
|
|
17
|
-
*/
|
|
18
|
-
fuzzySearchWithInfo(haystack, needle) {
|
|
19
|
-
if (!needle || needle.length < 1)
|
|
20
|
-
return { indices: [], info: null };
|
|
21
|
-
if (!haystack || haystack.length === 0)
|
|
22
|
-
return { indices: [], info: null };
|
|
23
|
-
const fuzzy = new uFuzzy({ unicode: true });
|
|
24
|
-
const idxs = fuzzy.filter(haystack, needle);
|
|
25
|
-
if (!idxs || idxs.length === 0) {
|
|
26
|
-
return { indices: [], info: null };
|
|
27
|
-
}
|
|
28
|
-
const info = fuzzy.info(idxs, haystack, needle);
|
|
29
|
-
const order = fuzzy.sort(info, haystack, needle);
|
|
30
|
-
const indices = order.map((sortedIdx) => {
|
|
31
|
-
return info.idx[sortedIdx];
|
|
32
|
-
});
|
|
33
|
-
return { indices, info };
|
|
34
|
-
}
|
|
35
|
-
async buildIndex(referencesDir, hashFile) {
|
|
36
|
-
console.log('Building enhanced fuzzy search index with uFuzzy...');
|
|
37
|
-
// Get all markdown files
|
|
38
|
-
const files = await glob('**/*.md', { cwd: referencesDir });
|
|
39
|
-
if (files.length === 0) {
|
|
40
|
-
console.log('No documentation files found to index');
|
|
41
|
-
return;
|
|
42
|
-
}
|
|
43
|
-
this.documents = [];
|
|
44
|
-
for (const filePath of files) {
|
|
45
|
-
try {
|
|
46
|
-
const fullPath = `${referencesDir}/${filePath}`;
|
|
47
|
-
const content = readFileSync(fullPath, 'utf-8');
|
|
48
|
-
// Extract title from first line or filename
|
|
49
|
-
const lines = content.split('\n');
|
|
50
|
-
const title = lines[0]?.replace(/^#+\s*/, '').trim() ||
|
|
51
|
-
filePath.replace(/\.md$/, '').replace(/[-_]/g, ' ');
|
|
52
|
-
// Determine source based on path
|
|
53
|
-
const source = filePath.includes('context7/') ? 'context7' : 'user';
|
|
54
|
-
const document = {
|
|
55
|
-
id: filePath,
|
|
56
|
-
title: title,
|
|
57
|
-
content: content,
|
|
58
|
-
source: source,
|
|
59
|
-
file_path: fullPath,
|
|
60
|
-
metadata: {
|
|
61
|
-
file_name: filePath,
|
|
62
|
-
file_path: fullPath,
|
|
63
|
-
},
|
|
64
|
-
};
|
|
65
|
-
this.documents.push(document);
|
|
66
|
-
}
|
|
67
|
-
catch (error) {
|
|
68
|
-
console.warn(`Failed to process file ${filePath}:`, error);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
console.log(`✅ Enhanced fuzzy search index built with ${this.documents.length} documents`);
|
|
72
|
-
}
|
|
73
|
-
async search(query, topK = 5, where) {
|
|
74
|
-
// Helper function to safely convert to string
|
|
75
|
-
const safeString = (value) => {
|
|
76
|
-
if (value === null || value === undefined)
|
|
77
|
-
return '';
|
|
78
|
-
if (typeof value === 'string') {
|
|
79
|
-
// Filter out empty strings and very short strings
|
|
80
|
-
return value.trim().length >= 2 ? value.trim() : '';
|
|
81
|
-
}
|
|
82
|
-
if (typeof value === 'number' || typeof value === 'boolean')
|
|
83
|
-
return String(value);
|
|
84
|
-
return '';
|
|
85
|
-
};
|
|
86
|
-
// Sanitize the query
|
|
87
|
-
const sanitizedQuery = safeString(query);
|
|
88
|
-
if (sanitizedQuery.length < 1) {
|
|
89
|
-
console.warn('Query too short or invalid for fuzzy search');
|
|
90
|
-
return [];
|
|
91
|
-
}
|
|
92
|
-
if (this.documents.length === 0) {
|
|
93
|
-
console.warn('Search index not built. Call buildIndex() first.');
|
|
94
|
-
return [];
|
|
95
|
-
}
|
|
96
|
-
// Filter documents by source if specified
|
|
97
|
-
let filteredDocs = this.documents;
|
|
98
|
-
if (where?.source) {
|
|
99
|
-
filteredDocs = this.documents.filter((doc) => doc.source === where.source);
|
|
100
|
-
}
|
|
101
|
-
// If no documents match the filter, return empty
|
|
102
|
-
if (filteredDocs.length === 0) {
|
|
103
|
-
return [];
|
|
104
|
-
}
|
|
105
|
-
const candidates = [];
|
|
106
|
-
// Prepare search arrays
|
|
107
|
-
const titles = filteredDocs.map((doc) => safeString(doc.title)).filter((t) => t.length >= 2);
|
|
108
|
-
const contents = filteredDocs.map((doc) => safeString(doc.content)).filter((c) => c.length >= 2);
|
|
109
|
-
const fileNames = filteredDocs
|
|
110
|
-
.map((doc) => safeString(doc.metadata.file_name))
|
|
111
|
-
.filter((f) => f.length >= 2);
|
|
112
|
-
// Search in titles (highest priority)
|
|
113
|
-
const titleResult = this.fuzzySearchWithInfo(titles, sanitizedQuery);
|
|
114
|
-
titleResult.indices.forEach((idx, i) => {
|
|
115
|
-
const doc = filteredDocs[idx];
|
|
116
|
-
if (doc) {
|
|
117
|
-
candidates.push({
|
|
118
|
-
doc,
|
|
119
|
-
score: this.calculateFuzzyScore(titleResult.info, i),
|
|
120
|
-
matchType: 'title',
|
|
121
|
-
info: titleResult.info,
|
|
122
|
-
ranges: titleResult.info?.ranges,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
});
|
|
126
|
-
// Search in content (medium priority)
|
|
127
|
-
const contentResult = this.fuzzySearchWithInfo(contents, sanitizedQuery);
|
|
128
|
-
contentResult.indices.forEach((idx, i) => {
|
|
129
|
-
const doc = filteredDocs[idx];
|
|
130
|
-
if (doc && !candidates.find((c) => c.doc.id === doc.id)) {
|
|
131
|
-
candidates.push({
|
|
132
|
-
doc,
|
|
133
|
-
score: this.calculateFuzzyScore(contentResult.info, i) * 0.7, // Reduce score for content matches
|
|
134
|
-
matchType: 'content',
|
|
135
|
-
info: contentResult.info,
|
|
136
|
-
ranges: contentResult.info?.ranges,
|
|
137
|
-
});
|
|
138
|
-
}
|
|
139
|
-
});
|
|
140
|
-
// Search in file names (lowest priority)
|
|
141
|
-
const fileNameResult = this.fuzzySearchWithInfo(fileNames, sanitizedQuery);
|
|
142
|
-
fileNameResult.indices.forEach((idx, i) => {
|
|
143
|
-
const doc = filteredDocs[idx];
|
|
144
|
-
if (doc && !candidates.find((c) => c.doc.id === doc.id)) {
|
|
145
|
-
candidates.push({
|
|
146
|
-
doc,
|
|
147
|
-
score: this.calculateFuzzyScore(fileNameResult.info, i) * 0.5, // Reduce score for filename matches
|
|
148
|
-
matchType: 'filename',
|
|
149
|
-
info: fileNameResult.info,
|
|
150
|
-
ranges: fileNameResult.info?.ranges,
|
|
151
|
-
});
|
|
152
|
-
}
|
|
153
|
-
});
|
|
154
|
-
// Sort by score and convert to SearchResult
|
|
155
|
-
const sortedCandidates = candidates.sort((a, b) => b.score - a.score).slice(0, topK);
|
|
156
|
-
const maxScore = sortedCandidates.length > 0 ? sortedCandidates[0].score : 0;
|
|
157
|
-
const averageScore = sortedCandidates.reduce((sum, c) => sum + c.score, 0) / sortedCandidates.length || 0;
|
|
158
|
-
return sortedCandidates.map((candidate) => {
|
|
159
|
-
const { doc, score, matchType } = candidate;
|
|
160
|
-
// Add enhanced metadata for smart content handling
|
|
161
|
-
const enhancedMetadata = {
|
|
162
|
-
...doc.metadata,
|
|
163
|
-
matchType,
|
|
164
|
-
originalScore: score,
|
|
165
|
-
maxScore,
|
|
166
|
-
averageScore,
|
|
167
|
-
};
|
|
168
|
-
return {
|
|
169
|
-
id: doc.id,
|
|
170
|
-
title: doc.title,
|
|
171
|
-
content: this.selectContent(doc.content, score, maxScore, averageScore, candidate.info?.ranges),
|
|
172
|
-
source: doc.source,
|
|
173
|
-
file_path: doc.file_path,
|
|
174
|
-
score,
|
|
175
|
-
metadata: enhancedMetadata,
|
|
176
|
-
};
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Calculate fuzzy search score based on uFuzzy info
|
|
181
|
-
*/
|
|
182
|
-
calculateFuzzyScore(info, resultIndex) {
|
|
183
|
-
if (!info)
|
|
184
|
-
return 0;
|
|
185
|
-
const { chars, terms, interIns, intraIns } = info;
|
|
186
|
-
// Base score: exact match ratio
|
|
187
|
-
const exactRatio = (chars[resultIndex] || 0) / (terms[resultIndex] || 1);
|
|
188
|
-
// Penalty for insertions
|
|
189
|
-
const insertionPenalty = (interIns[resultIndex] + intraIns[resultIndex]) * 0.1;
|
|
190
|
-
// Final score (0-1)
|
|
191
|
-
return Math.max(0, Math.min(1, exactRatio - insertionPenalty));
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Smart content selection based on score
|
|
195
|
-
*/
|
|
196
|
-
selectContent(content, score, maxScore, averageScore, ranges) {
|
|
197
|
-
const showFullContentThreshold = 0.8;
|
|
198
|
-
const minScoreForPreview = 0.3;
|
|
199
|
-
if (score >= maxScore * showFullContentThreshold) {
|
|
200
|
-
// High score: return full content
|
|
201
|
-
return content;
|
|
202
|
-
}
|
|
203
|
-
else if (score >= averageScore * minScoreForPreview) {
|
|
204
|
-
// Medium score: return range-based preview
|
|
205
|
-
return this.extractRangePreview(content, ranges);
|
|
206
|
-
}
|
|
207
|
-
// Low score: return standard preview
|
|
208
|
-
return content.substring(0, 200) + '...';
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Extract preview based on match ranges
|
|
212
|
-
*/
|
|
213
|
-
extractRangePreview(content, ranges) {
|
|
214
|
-
if (!ranges || ranges.length === 0) {
|
|
215
|
-
return content.substring(0, 100) + '...';
|
|
216
|
-
}
|
|
217
|
-
const lines = content.split('\n');
|
|
218
|
-
const previewLines = [];
|
|
219
|
-
// Extract lines around match ranges
|
|
220
|
-
ranges.forEach(([start, ...end]) => {
|
|
221
|
-
const startLine = Math.floor(start / 50); // Rough estimate of line numbers
|
|
222
|
-
const endLine = Math.floor(end[end.length - 1] / 50);
|
|
223
|
-
for (let i = Math.max(0, startLine - 1); i <= Math.min(lines.length - 1, endLine + 1); i++) {
|
|
224
|
-
if (!previewLines.includes(lines[i])) {
|
|
225
|
-
previewLines.push(lines[i]);
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
});
|
|
229
|
-
return previewLines.slice(0, 5).join('\n') + (previewLines.length > 5 ? '\n...' : '');
|
|
230
|
-
}
|
|
231
|
-
async searchByPriority(query, topK = 5) {
|
|
232
|
-
// Search with priority on user documents first
|
|
233
|
-
const userResults = await this.search(query, Math.ceil(topK / 2), { source: 'user' });
|
|
234
|
-
const context7Results = await this.search(query, Math.ceil(topK / 2), { source: 'context7' });
|
|
235
|
-
// Combine and sort by score
|
|
236
|
-
const allResults = [...userResults, ...context7Results]
|
|
237
|
-
.sort((a, b) => {
|
|
238
|
-
// User documents get priority boost
|
|
239
|
-
const aBoost = a.source === 'user' ? 0.2 : 0;
|
|
240
|
-
const bBoost = b.source === 'user' ? 0.2 : 0;
|
|
241
|
-
return b.score + bBoost - (a.score + aBoost);
|
|
242
|
-
})
|
|
243
|
-
.slice(0, topK);
|
|
244
|
-
return allResults;
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* Get statistics about the search index
|
|
248
|
-
*/
|
|
249
|
-
getStats() {
|
|
250
|
-
const userDocs = this.documents.filter((doc) => doc.source === 'user');
|
|
251
|
-
const context7Docs = this.documents.filter((doc) => doc.source === 'context7');
|
|
252
|
-
return {
|
|
253
|
-
totalDocuments: this.documents.length,
|
|
254
|
-
userDocuments: userDocs.length,
|
|
255
|
-
context7Documents: context7Docs.length,
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Check if the search index is built
|
|
260
|
-
*/
|
|
261
|
-
isBuilt() {
|
|
262
|
-
return this.documents.length > 0;
|
|
263
|
-
}
|
|
264
|
-
/**
|
|
265
|
-
* Clear the search index
|
|
266
|
-
*/
|
|
267
|
-
clearIndex() {
|
|
268
|
-
this.documents = [];
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
//# sourceMappingURL=fuzzySearch.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzySearch.js","sourceRoot":"","sources":["../../src/core/fuzzySearch.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ChromaDB-based search engine
|
|
3
|
-
*/
|
|
4
|
-
import type { SearchResult } from '../types/index.js';
|
|
5
|
-
export interface SearchEngineOptions {
|
|
6
|
-
dbPath: string;
|
|
7
|
-
collectionName: string;
|
|
8
|
-
embeddingModel: string;
|
|
9
|
-
}
|
|
10
|
-
export declare class SearchEngine {
|
|
11
|
-
private db;
|
|
12
|
-
private options;
|
|
13
|
-
private embeddingFunction;
|
|
14
|
-
constructor(options: SearchEngineOptions);
|
|
15
|
-
initialize(): Promise<void>;
|
|
16
|
-
buildIndex(referencesDir: string, hashFile: string): Promise<void>;
|
|
17
|
-
search(query: string, topK?: number, where?: Record<string, any>): Promise<SearchResult[]>;
|
|
18
|
-
searchByPriority(query: string, topK?: number): Promise<SearchResult[]>;
|
|
19
|
-
getStats(): Promise<{
|
|
20
|
-
totalDocuments: number;
|
|
21
|
-
}>;
|
|
22
|
-
private initializeIfNeeded;
|
|
23
|
-
private splitIntoSections;
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=searchEngine.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"searchEngine.d.ts","sourceRoot":"","sources":["../../src/core/searchEngine.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;IACtB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,EAAE,CAAmB;IAC7B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,iBAAiB,CAAmB;gBAEhC,OAAO,EAAE,mBAAmB;IAIlC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAoB3B,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiGlE,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAU,EAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC1B,OAAO,CAAC,YAAY,EAAE,CAAC;IAmCpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAY1E,QAAQ,IAAI,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;YAgBvC,kBAAkB;IAOhC,OAAO,CAAC,iBAAiB;CA2B1B"}
|
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* ChromaDB-based search engine
|
|
3
|
-
*/
|
|
4
|
-
import { DefaultEmbeddingFunction } from '@chroma-core/default-embed';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
|
-
import { existsSync } from 'node:fs';
|
|
7
|
-
import { glob } from 'glob';
|
|
8
|
-
import { createHash } from 'node:crypto';
|
|
9
|
-
export class SearchEngine {
|
|
10
|
-
db = null;
|
|
11
|
-
options;
|
|
12
|
-
embeddingFunction = null;
|
|
13
|
-
constructor(options) {
|
|
14
|
-
this.options = options;
|
|
15
|
-
}
|
|
16
|
-
async initialize() {
|
|
17
|
-
const { ChromaClient } = await import('chromadb');
|
|
18
|
-
// Try to use local embedded ChromaDB
|
|
19
|
-
try {
|
|
20
|
-
this.db = new ChromaClient({
|
|
21
|
-
path: this.options.dbPath,
|
|
22
|
-
});
|
|
23
|
-
}
|
|
24
|
-
catch (e) {
|
|
25
|
-
// Fallback to HTTP client (requires ChromaDB server)
|
|
26
|
-
console.warn('Failed to initialize embedded ChromaDB, falling back to HTTP client');
|
|
27
|
-
this.db = new ChromaClient({
|
|
28
|
-
path: 'http://localhost:8000',
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
// Use default embedding function (doesn't require API keys)
|
|
32
|
-
this.embeddingFunction = new DefaultEmbeddingFunction();
|
|
33
|
-
}
|
|
34
|
-
async buildIndex(referencesDir, hashFile) {
|
|
35
|
-
const { hash } = await import('node:crypto');
|
|
36
|
-
if (!await this.initializeIfNeeded()) {
|
|
37
|
-
return;
|
|
38
|
-
}
|
|
39
|
-
// Get all markdown files
|
|
40
|
-
const files = await glob('**/*.md', { cwd: referencesDir });
|
|
41
|
-
if (files.length === 0) {
|
|
42
|
-
console.log('No documentation files found to index');
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
// Calculate current hash
|
|
46
|
-
const { readFileSync } = await import('node:fs');
|
|
47
|
-
const fileContents = files.map(file => {
|
|
48
|
-
const content = readFileSync(join(referencesDir, file), 'utf-8');
|
|
49
|
-
return `${file}:${content}`;
|
|
50
|
-
});
|
|
51
|
-
const h = createHash('sha256');
|
|
52
|
-
h.update(fileContents.join('\n'));
|
|
53
|
-
const currentHash = h.digest('hex');
|
|
54
|
-
// Check if we need to rebuild
|
|
55
|
-
if (existsSync(hashFile)) {
|
|
56
|
-
const lastHash = readFileSync(hashFile, 'utf-8');
|
|
57
|
-
if (lastHash === currentHash) {
|
|
58
|
-
console.log('Index is up to date');
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
console.log(`Indexing ${files.length} documents...`);
|
|
63
|
-
// Get or create collection
|
|
64
|
-
let collection;
|
|
65
|
-
try {
|
|
66
|
-
collection = await this.db.getCollection({
|
|
67
|
-
name: this.options.collectionName,
|
|
68
|
-
});
|
|
69
|
-
await collection.delete(); // Clear existing data
|
|
70
|
-
}
|
|
71
|
-
catch {
|
|
72
|
-
collection = await this.db.createCollection({
|
|
73
|
-
name: this.options.collectionName,
|
|
74
|
-
embeddingFunction: this.embeddingFunction,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
// Process and add documents
|
|
78
|
-
const documents = [];
|
|
79
|
-
const metadatas = [];
|
|
80
|
-
const ids = [];
|
|
81
|
-
for (const file of files) {
|
|
82
|
-
const content = readFileSync(join(referencesDir, file), 'utf-8');
|
|
83
|
-
const sections = this.splitIntoSections(content);
|
|
84
|
-
for (let i = 0; i < sections.length; i++) {
|
|
85
|
-
const section = sections[i];
|
|
86
|
-
documents.push(section.content);
|
|
87
|
-
const source = file.includes('context7/') ? 'context7' : 'user';
|
|
88
|
-
metadatas.push({
|
|
89
|
-
source,
|
|
90
|
-
file_path: file,
|
|
91
|
-
section_index: i,
|
|
92
|
-
title: section.title,
|
|
93
|
-
priority: source === 'user' ? 10 : 1,
|
|
94
|
-
});
|
|
95
|
-
ids.push(`${file}_${i}`);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
// Add to collection in batches
|
|
99
|
-
const batchSize = 100;
|
|
100
|
-
for (let i = 0; i < documents.length; i += batchSize) {
|
|
101
|
-
const batch = documents.slice(i, i + batchSize);
|
|
102
|
-
const metadataBatch = metadatas.slice(i, i + batchSize);
|
|
103
|
-
const idBatch = ids.slice(i, i + batchSize);
|
|
104
|
-
await collection.add({
|
|
105
|
-
ids: idBatch,
|
|
106
|
-
documents: batch,
|
|
107
|
-
metadatas: metadataBatch,
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
// Save hash
|
|
111
|
-
const { writeFileSync } = await import('node:fs');
|
|
112
|
-
writeFileSync(hashFile, currentHash);
|
|
113
|
-
console.log(`✅ Indexed ${documents.length} sections from ${files.length} files`);
|
|
114
|
-
}
|
|
115
|
-
async search(query, topK = 5, where) {
|
|
116
|
-
if (!await this.initializeIfNeeded()) {
|
|
117
|
-
return [];
|
|
118
|
-
}
|
|
119
|
-
let collection;
|
|
120
|
-
try {
|
|
121
|
-
collection = await this.db.getCollection({
|
|
122
|
-
name: this.options.collectionName,
|
|
123
|
-
});
|
|
124
|
-
}
|
|
125
|
-
catch {
|
|
126
|
-
return [];
|
|
127
|
-
}
|
|
128
|
-
const results = await collection.query({
|
|
129
|
-
queryTexts: [query],
|
|
130
|
-
nResults: topK,
|
|
131
|
-
where,
|
|
132
|
-
});
|
|
133
|
-
if (!results.ids[0] || results.ids[0].length === 0) {
|
|
134
|
-
return [];
|
|
135
|
-
}
|
|
136
|
-
return results.ids[0].map((id, index) => ({
|
|
137
|
-
id,
|
|
138
|
-
title: results.metadatas[0]?.[index]?.title || 'Untitled',
|
|
139
|
-
content: results.documents[0]?.[index] || '',
|
|
140
|
-
score: results.distances[0]?.[index] || 0,
|
|
141
|
-
source: results.metadatas[0]?.[index]?.source || 'unknown',
|
|
142
|
-
file_path: results.metadatas[0]?.[index]?.file_path || '',
|
|
143
|
-
metadata: results.metadatas[0]?.[index] || {},
|
|
144
|
-
}));
|
|
145
|
-
}
|
|
146
|
-
async searchByPriority(query, topK = 5) {
|
|
147
|
-
// First try user content, then context7
|
|
148
|
-
const userResults = await this.search(query, topK, { source: 'user' });
|
|
149
|
-
const contextResults = await this.search(query, topK - userResults.length, { source: 'context7' });
|
|
150
|
-
return [...userResults, ...contextResults].slice(0, topK);
|
|
151
|
-
}
|
|
152
|
-
async getStats() {
|
|
153
|
-
if (!await this.initializeIfNeeded()) {
|
|
154
|
-
return { totalDocuments: 0 };
|
|
155
|
-
}
|
|
156
|
-
try {
|
|
157
|
-
const collection = await this.db.getCollection({
|
|
158
|
-
name: this.options.collectionName,
|
|
159
|
-
});
|
|
160
|
-
const count = await collection.count();
|
|
161
|
-
return { totalDocuments: count };
|
|
162
|
-
}
|
|
163
|
-
catch {
|
|
164
|
-
return { totalDocuments: 0 };
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
async initializeIfNeeded() {
|
|
168
|
-
if (!this.db) {
|
|
169
|
-
await this.initialize();
|
|
170
|
-
}
|
|
171
|
-
return !!this.db;
|
|
172
|
-
}
|
|
173
|
-
splitIntoSections(content) {
|
|
174
|
-
const sections = [];
|
|
175
|
-
const lines = content.split('\n');
|
|
176
|
-
let currentSection = { title: 'Introduction', content: '' };
|
|
177
|
-
for (const line of lines) {
|
|
178
|
-
const headingMatch = line.match(/^(#{1,6})\s+(.+)$/);
|
|
179
|
-
if (headingMatch) {
|
|
180
|
-
if (currentSection.content.trim()) {
|
|
181
|
-
sections.push({ ...currentSection });
|
|
182
|
-
}
|
|
183
|
-
currentSection = {
|
|
184
|
-
title: headingMatch[2],
|
|
185
|
-
content: '',
|
|
186
|
-
};
|
|
187
|
-
}
|
|
188
|
-
else {
|
|
189
|
-
currentSection.content += line + '\n';
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
if (currentSection.content.trim()) {
|
|
193
|
-
sections.push(currentSection);
|
|
194
|
-
}
|
|
195
|
-
return sections.filter(s => s.content.trim().length > 50);
|
|
196
|
-
}
|
|
197
|
-
}
|
|
198
|
-
//# sourceMappingURL=searchEngine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"searchEngine.js","sourceRoot":"","sources":["../../src/core/searchEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 简化的本地搜索引擎
|
|
3
|
-
* 模拟 ChromaDB 的本地存储功能,但完全基于文件系统
|
|
4
|
-
* 专为 skill-creator 的嵌入式架构设计
|
|
5
|
-
*/
|
|
6
|
-
import type { SearchResult } from './searchAdapter.js';
|
|
7
|
-
export interface SimpleLocalOptions {
|
|
8
|
-
dbPath: string;
|
|
9
|
-
collectionName: string;
|
|
10
|
-
}
|
|
11
|
-
export declare class SimpleLocalSearchEngine {
|
|
12
|
-
private options;
|
|
13
|
-
private embeddingFunction;
|
|
14
|
-
private collectionData;
|
|
15
|
-
private dataFile;
|
|
16
|
-
constructor(options: SimpleLocalOptions);
|
|
17
|
-
private ensureDirectory;
|
|
18
|
-
private loadCollection;
|
|
19
|
-
private saveCollection;
|
|
20
|
-
private initialize;
|
|
21
|
-
buildIndex(referencesDir: string, hashFile: string): Promise<void>;
|
|
22
|
-
search(query: string, topK?: number, where?: Record<string, unknown>): Promise<SearchResult[]>;
|
|
23
|
-
searchByPriority(query: string, topK?: number): Promise<SearchResult[]>;
|
|
24
|
-
getStats(): Promise<{
|
|
25
|
-
totalDocuments: number;
|
|
26
|
-
}>;
|
|
27
|
-
private calculateDirectoryHash;
|
|
28
|
-
private loadDocumentsFromDirectory;
|
|
29
|
-
/**
|
|
30
|
-
* 递归获取目录中的所有文件
|
|
31
|
-
*/
|
|
32
|
-
private getAllFiles;
|
|
33
|
-
/**
|
|
34
|
-
* 从内容中提取标题
|
|
35
|
-
*/
|
|
36
|
-
private extractTitleFromContent;
|
|
37
|
-
/**
|
|
38
|
-
* 从文件路径生成标题
|
|
39
|
-
*/
|
|
40
|
-
private generateTitleFromPath;
|
|
41
|
-
/**
|
|
42
|
-
* 生成文档ID
|
|
43
|
-
*/
|
|
44
|
-
private generateDocumentId;
|
|
45
|
-
/**
|
|
46
|
-
* 创建示例文档(回退方案)
|
|
47
|
-
*/
|
|
48
|
-
private createSampleDocuments;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=simpleLocalSearch.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"simpleLocalSearch.d.ts","sourceRoot":"","sources":["../../src/core/simpleLocalSearch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAiB,MAAM,oBAAoB,CAAA;AAKrE,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,EAAE,MAAM,CAAA;CACvB;AAqED,qBAAa,uBAAuB;IAClC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,iBAAiB,CAAyB;IAClD,OAAO,CAAC,cAAc,CAA8B;IACpD,OAAO,CAAC,QAAQ,CAAQ;gBAEZ,OAAO,EAAE,kBAAkB;YAMzB,eAAe;YAQf,cAAc;YAad,cAAc;YAMd,UAAU;IAclB,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2DlE,MAAM,CACV,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,MAAU,EAChB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC9B,OAAO,CAAC,YAAY,EAAE,CAAC;IA0DpB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAI1E,QAAQ,IAAI,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;YAiBvC,sBAAsB;YAMtB,0BAA0B;IA+FxC;;OAEG;YACW,WAAW;IA4BzB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAM1B;;OAEG;YACW,qBAAqB;CA6CpC"}
|