skill-creator 1.4.2 → 1.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/dist/chunk-Da8dvM5T.mjs +1 -0
- package/dist/cli.d.mts +1016 -0
- package/dist/cli.d.mts.map +1 -0
- package/dist/cli.mjs +36 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/contentManager-8rmWJMb6.mjs +22 -0
- package/dist/contentManager-8rmWJMb6.mjs.map +1 -0
- package/dist/contentManager-Xt8N5psY.mjs +1 -0
- package/dist/dist-DZL34HNo.mjs +8 -0
- package/dist/dist-DZL34HNo.mjs.map +1 -0
- package/dist/dist-X_kVEzbK.mjs +1 -0
- package/dist/esm-8qfZdcpd.mjs +33 -0
- package/dist/esm-8qfZdcpd.mjs.map +1 -0
- package/dist/esm-BF5pvSbc.mjs +1 -0
- package/dist/esm-BbhxxeGF.mjs +4 -0
- package/dist/esm-BbhxxeGF.mjs.map +1 -0
- package/dist/index.d.mts +1964 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +21 -0
- package/dist/index.mjs.map +1 -0
- package/dist/listContext7-DKXzgWdn.mjs +2 -0
- package/dist/listContext7-DKXzgWdn.mjs.map +1 -0
- package/dist/package-B4FNst2t.mjs +2 -0
- package/dist/package-B4FNst2t.mjs.map +1 -0
- package/dist/path-CuoiIaIe.mjs +2 -0
- package/dist/path-CuoiIaIe.mjs.map +1 -0
- package/dist/removeContext7-DOXrTXeI.mjs +3 -0
- package/dist/removeContext7-DOXrTXeI.mjs.map +1 -0
- package/dist/removeSkill-C-ehFexk.mjs +5 -0
- package/dist/removeSkill-C-ehFexk.mjs.map +1 -0
- package/dist/removeSkill-DWwhvzej.mjs +1 -0
- package/dist/runScript-Cr9RRN9y.mjs +14 -0
- package/dist/runScript-Cr9RRN9y.mjs.map +1 -0
- package/dist/search_format-DIs-1lKk.mjs +5 -0
- package/dist/search_format-DIs-1lKk.mjs.map +1 -0
- package/dist/shared-CFoY2Xhg.mjs +2 -0
- package/dist/shared-CFoY2Xhg.mjs.map +1 -0
- package/dist/skillMdManager-DP8fGZb7.mjs +7 -0
- package/dist/skillMdManager-DP8fGZb7.mjs.map +1 -0
- package/dist/unifiedSearch-CGZXw0NB.mjs +1 -0
- package/dist/unifiedSearch-l-lrSc9C.mjs +4 -0
- package/dist/unifiedSearch-l-lrSc9C.mjs.map +1 -0
- package/package.json +30 -16
- package/dist/cli.d.ts +0 -8
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js +0 -513
- package/dist/cli.js.map +0 -1
- package/dist/commands/addContent.d.ts +0 -5
- package/dist/commands/addContent.d.ts.map +0 -1
- package/dist/commands/addContent.js +0 -88
- package/dist/commands/addContent.js.map +0 -1
- package/dist/commands/buildIndex.d.ts +0 -5
- package/dist/commands/buildIndex.d.ts.map +0 -1
- package/dist/commands/buildIndex.js +0 -16
- package/dist/commands/buildIndex.js.map +0 -1
- package/dist/commands/createSkill.d.ts +0 -6
- package/dist/commands/createSkill.d.ts.map +0 -1
- package/dist/commands/createSkill.js +0 -32
- package/dist/commands/createSkill.js.map +0 -1
- package/dist/commands/downloadContext7.d.ts +0 -5
- package/dist/commands/downloadContext7.d.ts.map +0 -1
- package/dist/commands/downloadContext7.js +0 -71
- package/dist/commands/downloadContext7.js.map +0 -1
- package/dist/commands/init.d.ts +0 -5
- package/dist/commands/init.d.ts.map +0 -1
- package/dist/commands/init.js +0 -95
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/listContent.d.ts +0 -5
- package/dist/commands/listContent.d.ts.map +0 -1
- package/dist/commands/listContent.js +0 -34
- package/dist/commands/listContent.js.map +0 -1
- package/dist/commands/listContext7.d.ts +0 -5
- package/dist/commands/listContext7.d.ts.map +0 -1
- package/dist/commands/listContext7.js +0 -26
- package/dist/commands/listContext7.js.map +0 -1
- package/dist/commands/listSkills.d.ts +0 -5
- package/dist/commands/listSkills.d.ts.map +0 -1
- package/dist/commands/listSkills.js +0 -34
- package/dist/commands/listSkills.js.map +0 -1
- package/dist/commands/removeContext7.d.ts +0 -5
- package/dist/commands/removeContext7.d.ts.map +0 -1
- package/dist/commands/removeContext7.js +0 -54
- package/dist/commands/removeContext7.js.map +0 -1
- package/dist/commands/removeSkill.d.ts +0 -5
- package/dist/commands/removeSkill.d.ts.map +0 -1
- package/dist/commands/removeSkill.js +0 -83
- package/dist/commands/removeSkill.js.map +0 -1
- package/dist/commands/searchContent.d.ts +0 -5
- package/dist/commands/searchContent.d.ts.map +0 -1
- package/dist/commands/searchContent.js +0 -99
- package/dist/commands/searchContent.js.map +0 -1
- package/dist/commands/shared.d.ts +0 -21
- package/dist/commands/shared.d.ts.map +0 -1
- package/dist/commands/shared.js +0 -80
- package/dist/commands/shared.js.map +0 -1
- package/dist/core/autoSearchAdapter.d.ts +0 -42
- package/dist/core/autoSearchAdapter.d.ts.map +0 -1
- package/dist/core/autoSearchAdapter.js +0 -116
- package/dist/core/autoSearchAdapter.js.map +0 -1
- package/dist/core/chromaSearch.d.ts +0 -24
- package/dist/core/chromaSearch.d.ts.map +0 -1
- package/dist/core/chromaSearch.js +0 -194
- package/dist/core/chromaSearch.js.map +0 -1
- package/dist/core/chromaSearchAdapter.d.ts +0 -86
- package/dist/core/chromaSearchAdapter.d.ts.map +0 -1
- package/dist/core/chromaSearchAdapter.js +0 -477
- package/dist/core/chromaSearchAdapter.js.map +0 -1
- package/dist/core/chromaServerManager.d.ts +0 -64
- package/dist/core/chromaServerManager.d.ts.map +0 -1
- package/dist/core/chromaServerManager.js +0 -186
- package/dist/core/chromaServerManager.js.map +0 -1
- package/dist/core/contentManager.d.ts +0 -65
- package/dist/core/contentManager.d.ts.map +0 -1
- package/dist/core/contentManager.js +0 -533
- package/dist/core/contentManager.js.map +0 -1
- package/dist/core/fuzzySearchAdapter.d.ts +0 -33
- package/dist/core/fuzzySearchAdapter.d.ts.map +0 -1
- package/dist/core/fuzzySearchAdapter.js +0 -185
- package/dist/core/fuzzySearchAdapter.js.map +0 -1
- package/dist/core/portUtils.d.ts +0 -51
- package/dist/core/portUtils.d.ts.map +0 -1
- package/dist/core/portUtils.js +0 -120
- package/dist/core/portUtils.js.map +0 -1
- package/dist/core/runScript.d.ts +0 -5
- package/dist/core/runScript.d.ts.map +0 -1
- package/dist/core/runScript.js +0 -40
- package/dist/core/runScript.js.map +0 -1
- package/dist/core/searchAdapter.d.ts +0 -48
- package/dist/core/searchAdapter.d.ts.map +0 -1
- package/dist/core/searchAdapter.js +0 -6
- package/dist/core/searchAdapter.js.map +0 -1
- package/dist/core/searchEngineFactory.d.ts +0 -30
- package/dist/core/searchEngineFactory.d.ts.map +0 -1
- package/dist/core/searchEngineFactory.js +0 -41
- package/dist/core/searchEngineFactory.js.map +0 -1
- package/dist/core/skillCreator.d.ts +0 -12
- package/dist/core/skillCreator.d.ts.map +0 -1
- package/dist/core/skillCreator.js +0 -75
- package/dist/core/skillCreator.js.map +0 -1
- package/dist/core/templateManager.d.ts +0 -28
- package/dist/core/templateManager.d.ts.map +0 -1
- package/dist/core/templateManager.js +0 -583
- package/dist/core/templateManager.js.map +0 -1
- package/dist/core/unifiedSearch.d.ts +0 -69
- package/dist/core/unifiedSearch.d.ts.map +0 -1
- package/dist/core/unifiedSearch.js +0 -105
- package/dist/core/unifiedSearch.js.map +0 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -11
- package/dist/index.js.map +0 -1
- package/dist/search_format/enhancedFormatter.d.ts +0 -109
- package/dist/search_format/enhancedFormatter.d.ts.map +0 -1
- package/dist/search_format/enhancedFormatter.js +0 -262
- package/dist/search_format/enhancedFormatter.js.map +0 -1
- package/dist/search_format/index.d.ts +0 -10
- package/dist/search_format/index.d.ts.map +0 -1
- package/dist/search_format/index.js +0 -22
- package/dist/search_format/index.js.map +0 -1
- package/dist/search_format/listFormatter.d.ts +0 -16
- package/dist/search_format/listFormatter.d.ts.map +0 -1
- package/dist/search_format/listFormatter.js +0 -51
- package/dist/search_format/listFormatter.js.map +0 -1
- package/dist/search_format/types.d.ts +0 -69
- package/dist/search_format/types.d.ts.map +0 -1
- package/dist/search_format/types.js +0 -5
- package/dist/search_format/types.js.map +0 -1
- package/dist/types/index.d.ts +0 -74
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -2
- package/dist/types/index.js.map +0 -1
- package/dist/utils/claudeCodeDetection.d.ts +0 -27
- package/dist/utils/claudeCodeDetection.d.ts.map +0 -1
- package/dist/utils/claudeCodeDetection.js +0 -81
- package/dist/utils/claudeCodeDetection.js.map +0 -1
- package/dist/utils/config.d.ts +0 -23
- package/dist/utils/config.d.ts.map +0 -1
- package/dist/utils/config.js +0 -41
- package/dist/utils/config.js.map +0 -1
- package/dist/utils/package.d.ts +0 -88
- package/dist/utils/package.d.ts.map +0 -1
- package/dist/utils/package.js +0 -221
- package/dist/utils/package.js.map +0 -1
- package/dist/utils/skillMdManager.d.ts +0 -44
- package/dist/utils/skillMdManager.d.ts.map +0 -1
- package/dist/utils/skillMdManager.js +0 -157
- package/dist/utils/skillMdManager.js.map +0 -1
|
@@ -1,533 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Content management with Context7 integration
|
|
3
|
-
*/
|
|
4
|
-
import { join } from 'node:path';
|
|
5
|
-
import { existsSync, mkdirSync, readdirSync, writeFileSync, rmSync, statSync, readFileSync, } from 'node:fs';
|
|
6
|
-
import { createHash } from 'node:crypto';
|
|
7
|
-
import MarkdownIt from 'markdown-it';
|
|
8
|
-
export class ContentManager {
|
|
9
|
-
options;
|
|
10
|
-
userDir;
|
|
11
|
-
context7BaseDir;
|
|
12
|
-
md;
|
|
13
|
-
constructor(options) {
|
|
14
|
-
this.options = options;
|
|
15
|
-
this.userDir = join(options.referencesDir, 'user');
|
|
16
|
-
this.context7BaseDir = join(options.referencesDir, 'context7');
|
|
17
|
-
this.md = new MarkdownIt();
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Get the directory path for a specific context7 project
|
|
21
|
-
*/
|
|
22
|
-
getContext7ProjectDir(projectId) {
|
|
23
|
-
return join(this.context7BaseDir, projectId);
|
|
24
|
-
}
|
|
25
|
-
async updateFromContext7(libraryId, force = false) {
|
|
26
|
-
const result = {
|
|
27
|
-
updated: false,
|
|
28
|
-
skipped: false,
|
|
29
|
-
filesCreated: 0,
|
|
30
|
-
message: '',
|
|
31
|
-
};
|
|
32
|
-
try {
|
|
33
|
-
// Download content
|
|
34
|
-
const content = await this.downloadContext7Doc(libraryId);
|
|
35
|
-
// Get project-specific directory
|
|
36
|
-
const projectDir = this.getContext7ProjectDir(libraryId);
|
|
37
|
-
// Check if update needed
|
|
38
|
-
if (!force && !this.needsUpdate(content, libraryId)) {
|
|
39
|
-
result.skipped = true;
|
|
40
|
-
result.message = 'Context7 documentation is up to date';
|
|
41
|
-
return result;
|
|
42
|
-
}
|
|
43
|
-
// Clear existing context7 docs for this project
|
|
44
|
-
if (existsSync(projectDir)) {
|
|
45
|
-
const files = readdirSync(projectDir);
|
|
46
|
-
for (const file of files) {
|
|
47
|
-
if (file.endsWith('.md')) {
|
|
48
|
-
rmSync(join(projectDir, file));
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
// Ensure directory exists
|
|
53
|
-
mkdirSync(projectDir, { recursive: true });
|
|
54
|
-
// Slice and save
|
|
55
|
-
const savedFiles = await this.sliceDocument(content, projectDir);
|
|
56
|
-
result.filesCreated = savedFiles.length;
|
|
57
|
-
// Save hash for this project
|
|
58
|
-
this.saveContentHash(content, libraryId);
|
|
59
|
-
// Trigger reindex
|
|
60
|
-
this.triggerReindex();
|
|
61
|
-
result.updated = true;
|
|
62
|
-
result.message = `Updated ${savedFiles.length} documentation slices for project ${libraryId}`;
|
|
63
|
-
}
|
|
64
|
-
catch (error) {
|
|
65
|
-
result.message = `Failed to update Context7 docs: ${error}`;
|
|
66
|
-
}
|
|
67
|
-
return result;
|
|
68
|
-
}
|
|
69
|
-
async addUserContent(options) {
|
|
70
|
-
const result = {
|
|
71
|
-
added: false,
|
|
72
|
-
updated: false,
|
|
73
|
-
skipped: false,
|
|
74
|
-
message: '',
|
|
75
|
-
similarFound: 0,
|
|
76
|
-
};
|
|
77
|
-
try {
|
|
78
|
-
// Search for similar content
|
|
79
|
-
const similar = await this.findSimilarContent(options.content);
|
|
80
|
-
if (similar.length > 0 && !options.force) {
|
|
81
|
-
const bestMatch = similar[0];
|
|
82
|
-
if (options.autoUpdate && bestMatch.source === 'user') {
|
|
83
|
-
// Update user file
|
|
84
|
-
const filePath = join(this.options.referencesDir, bestMatch.file_path);
|
|
85
|
-
if (this.isContentEnhanced(bestMatch, options.content)) {
|
|
86
|
-
writeFileSync(filePath, `# ${options.title}\n\n${options.content}`);
|
|
87
|
-
result.updated = true;
|
|
88
|
-
result.filePath = filePath;
|
|
89
|
-
result.message = `Updated existing content: ${bestMatch.file_path}`;
|
|
90
|
-
// Trigger index update
|
|
91
|
-
this.triggerReindex();
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
result.skipped = true;
|
|
95
|
-
result.message = 'Existing content is comprehensive enough';
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
// Similar content found but not updating
|
|
100
|
-
result.message = `Found ${similar.length} similar documents`;
|
|
101
|
-
result.similarContent = similar.slice(0, 3).map((s) => ({
|
|
102
|
-
title: s.title,
|
|
103
|
-
score: s.score,
|
|
104
|
-
source: s.source,
|
|
105
|
-
preview: s.content.slice(0, 200) + '...',
|
|
106
|
-
}));
|
|
107
|
-
result.similarFound = similar.length;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
else if (!result.added && !result.updated && !result.skipped) {
|
|
111
|
-
// Create new file only if no similar content was found
|
|
112
|
-
mkdirSync(this.userDir, { recursive: true });
|
|
113
|
-
// Check if file with same title already exists
|
|
114
|
-
const safeTitle = options.title
|
|
115
|
-
.toLowerCase()
|
|
116
|
-
.replace(/[^\w\s-]/g, '')
|
|
117
|
-
.replace(/[-\s]+/g, '_')
|
|
118
|
-
.replace(/^_+|_+$/g, '')
|
|
119
|
-
.slice(0, 50) || 'content';
|
|
120
|
-
const expectedFilePath = join(this.userDir, `${safeTitle}.md`);
|
|
121
|
-
if (existsSync(expectedFilePath) && !options.force && !options.forceAppend) {
|
|
122
|
-
// File exists and no force flag - show error and file content
|
|
123
|
-
const { readFileSync } = await import('node:fs');
|
|
124
|
-
const existingContent = readFileSync(expectedFilePath, 'utf-8');
|
|
125
|
-
result.message = `File already exists: ${safeTitle}.md. Use --force to overwrite or --force-append to append.`;
|
|
126
|
-
result.existingFile = {
|
|
127
|
-
path: expectedFilePath,
|
|
128
|
-
content: existingContent,
|
|
129
|
-
};
|
|
130
|
-
}
|
|
131
|
-
else {
|
|
132
|
-
// Either file doesn't exist or force flag is set
|
|
133
|
-
let filePath;
|
|
134
|
-
let fileName;
|
|
135
|
-
if (existsSync(expectedFilePath) && options.force) {
|
|
136
|
-
// Force overwrite: directly replace the existing file
|
|
137
|
-
filePath = expectedFilePath;
|
|
138
|
-
fileName = safeTitle + '.md';
|
|
139
|
-
writeFileSync(filePath, `# ${options.title}\n\n${options.content}`);
|
|
140
|
-
result.message = `Overwrote existing content: ${fileName}`;
|
|
141
|
-
}
|
|
142
|
-
else if (existsSync(expectedFilePath) && options.forceAppend) {
|
|
143
|
-
// Force append: add content to the end of existing file
|
|
144
|
-
filePath = expectedFilePath;
|
|
145
|
-
fileName = safeTitle + '.md';
|
|
146
|
-
const { readFileSync } = await import('node:fs');
|
|
147
|
-
const existingContent = readFileSync(filePath, 'utf-8');
|
|
148
|
-
const newContent = `${existingContent}\n\n---\n\n# ${options.title}\n\n${options.content}`;
|
|
149
|
-
writeFileSync(filePath, newContent);
|
|
150
|
-
result.message = `Appended content to existing file: ${fileName}`;
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
// Create new file
|
|
154
|
-
filePath = this.createUniqueFilePath(options.title, this.userDir);
|
|
155
|
-
fileName = filePath.split('/').pop() || safeTitle + '.md';
|
|
156
|
-
writeFileSync(filePath, `# ${options.title}\n\n${options.content}`);
|
|
157
|
-
result.message = `Created new content: ${fileName}`;
|
|
158
|
-
}
|
|
159
|
-
result.added = true;
|
|
160
|
-
result.filePath = filePath;
|
|
161
|
-
// Trigger index update
|
|
162
|
-
this.triggerReindex();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
catch (error) {
|
|
167
|
-
result.message = `Failed to add content: ${error}`;
|
|
168
|
-
}
|
|
169
|
-
result.similarFound = result.similarContent?.length || 0;
|
|
170
|
-
return result;
|
|
171
|
-
}
|
|
172
|
-
getContentStats() {
|
|
173
|
-
const stats = {
|
|
174
|
-
userFiles: 0,
|
|
175
|
-
context7Files: 0,
|
|
176
|
-
totalFiles: 0,
|
|
177
|
-
userDirExists: existsSync(this.userDir),
|
|
178
|
-
context7DirExists: existsSync(this.context7BaseDir),
|
|
179
|
-
};
|
|
180
|
-
if (stats.userDirExists) {
|
|
181
|
-
stats.userFiles = readdirSync(this.userDir).filter((f) => f.endsWith('.md')).length;
|
|
182
|
-
}
|
|
183
|
-
if (stats.context7DirExists) {
|
|
184
|
-
// Count files in all context7 project subdirectories
|
|
185
|
-
const projects = readdirSync(this.context7BaseDir, { withFileTypes: true })
|
|
186
|
-
.filter((dirent) => dirent.isDirectory())
|
|
187
|
-
.map((dirent) => dirent.name);
|
|
188
|
-
for (const projectId of projects) {
|
|
189
|
-
const projectDir = this.getContext7ProjectDir(projectId);
|
|
190
|
-
if (existsSync(projectDir)) {
|
|
191
|
-
stats.context7Files += readdirSync(projectDir).filter((f) => f.endsWith('.md')).length;
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
stats.totalFiles = stats.userFiles + stats.context7Files;
|
|
196
|
-
return stats;
|
|
197
|
-
}
|
|
198
|
-
listContent(source) {
|
|
199
|
-
const contentList = [];
|
|
200
|
-
// List user content
|
|
201
|
-
if (source === 'user' || !source) {
|
|
202
|
-
if (existsSync(this.userDir)) {
|
|
203
|
-
const files = readdirSync(this.userDir);
|
|
204
|
-
for (const file of files) {
|
|
205
|
-
if (!file.endsWith('.md'))
|
|
206
|
-
continue;
|
|
207
|
-
const filePath = join(this.userDir, file);
|
|
208
|
-
const stat = statSync(filePath);
|
|
209
|
-
let title = file.replace('.md', '');
|
|
210
|
-
try {
|
|
211
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
212
|
-
const firstLine = content.split('\n')[0];
|
|
213
|
-
if (firstLine?.startsWith('# ')) {
|
|
214
|
-
title = firstLine.slice(2);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
catch {
|
|
218
|
-
// Use filename if can't read
|
|
219
|
-
}
|
|
220
|
-
contentList.push({
|
|
221
|
-
title,
|
|
222
|
-
filename: file,
|
|
223
|
-
source: 'user',
|
|
224
|
-
path: filePath,
|
|
225
|
-
size: stat.size,
|
|
226
|
-
modified: stat.mtime || new Date(),
|
|
227
|
-
});
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
// List context7 content from all projects
|
|
232
|
-
if (source === 'context7' || !source) {
|
|
233
|
-
if (existsSync(this.context7BaseDir)) {
|
|
234
|
-
const projects = readdirSync(this.context7BaseDir, { withFileTypes: true })
|
|
235
|
-
.filter((dirent) => dirent.isDirectory())
|
|
236
|
-
.map((dirent) => dirent.name);
|
|
237
|
-
for (const projectId of projects) {
|
|
238
|
-
const projectDir = this.getContext7ProjectDir(projectId);
|
|
239
|
-
if (existsSync(projectDir)) {
|
|
240
|
-
const files = readdirSync(projectDir);
|
|
241
|
-
for (const file of files) {
|
|
242
|
-
if (!file.endsWith('.md'))
|
|
243
|
-
continue;
|
|
244
|
-
const filePath = join(projectDir, file);
|
|
245
|
-
const stat = statSync(filePath);
|
|
246
|
-
let title = file.replace('.md', '');
|
|
247
|
-
try {
|
|
248
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
249
|
-
const firstLine = content.split('\n')[0];
|
|
250
|
-
if (firstLine?.startsWith('# ')) {
|
|
251
|
-
title = firstLine.slice(2);
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
catch {
|
|
255
|
-
// Use filename if can't read
|
|
256
|
-
}
|
|
257
|
-
contentList.push({
|
|
258
|
-
title,
|
|
259
|
-
filename: file,
|
|
260
|
-
source: 'context7',
|
|
261
|
-
path: filePath,
|
|
262
|
-
size: stat.size,
|
|
263
|
-
modified: stat.mtime || new Date(),
|
|
264
|
-
});
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
return contentList.sort((a, b) => b.modified.getTime() - a.modified.getTime());
|
|
271
|
-
}
|
|
272
|
-
async downloadContext7Doc(libraryId) {
|
|
273
|
-
const url = `https://context7.com${libraryId}/llms.txt?tokens=100000000&topic=*`;
|
|
274
|
-
const response = await fetch(url);
|
|
275
|
-
if (!response.ok) {
|
|
276
|
-
throw new Error(`Failed to download: ${response.statusText}`);
|
|
277
|
-
}
|
|
278
|
-
return await response.text();
|
|
279
|
-
}
|
|
280
|
-
async sliceDocument(content, outputDir) {
|
|
281
|
-
const sections = this.extractSections(content);
|
|
282
|
-
const savedFiles = [];
|
|
283
|
-
for (let i = 0; i < sections.length; i++) {
|
|
284
|
-
const { title, content: sectionContent } = sections[i];
|
|
285
|
-
if (!sectionContent.trim())
|
|
286
|
-
continue;
|
|
287
|
-
const filename = this.createUniqueFileName(title, i, outputDir);
|
|
288
|
-
const filePath = join(outputDir, filename);
|
|
289
|
-
writeFileSync(filePath, `# ${title}\n\n${sectionContent}`);
|
|
290
|
-
savedFiles.push(filePath);
|
|
291
|
-
}
|
|
292
|
-
return savedFiles;
|
|
293
|
-
}
|
|
294
|
-
extractSections(content) {
|
|
295
|
-
const sections = [];
|
|
296
|
-
const lines = content.split('\n');
|
|
297
|
-
let currentSection = { title: 'Introduction', content: '' };
|
|
298
|
-
let sectionContent = [];
|
|
299
|
-
const headingPattern = /^(#{1,6})\s+(.+)$/;
|
|
300
|
-
for (let i = 0; i < lines.length; i++) {
|
|
301
|
-
const line = lines[i];
|
|
302
|
-
const match = headingPattern.exec(line);
|
|
303
|
-
if (match) {
|
|
304
|
-
// Save previous section if it has content
|
|
305
|
-
if (sectionContent.length > 0) {
|
|
306
|
-
currentSection.content = sectionContent.join('\n').trim();
|
|
307
|
-
// Only add section if it meets minimum content threshold
|
|
308
|
-
if (currentSection.content.length > 50) {
|
|
309
|
-
sections.push({ ...currentSection });
|
|
310
|
-
}
|
|
311
|
-
sectionContent = [];
|
|
312
|
-
}
|
|
313
|
-
// Start new section
|
|
314
|
-
currentSection = {
|
|
315
|
-
title: match[2].trim(),
|
|
316
|
-
content: '',
|
|
317
|
-
};
|
|
318
|
-
}
|
|
319
|
-
else {
|
|
320
|
-
// Add non-heading lines to current section
|
|
321
|
-
if (line.trim() || sectionContent.length > 0) {
|
|
322
|
-
sectionContent.push(line);
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
// Add the last section
|
|
327
|
-
if (sectionContent.length > 0) {
|
|
328
|
-
currentSection.content = sectionContent.join('\n').trim();
|
|
329
|
-
if (currentSection.content.length > 50) {
|
|
330
|
-
sections.push(currentSection);
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
// Post-process sections to merge very short ones
|
|
334
|
-
return this.mergeShortSections(sections);
|
|
335
|
-
}
|
|
336
|
-
mergeShortSections(sections) {
|
|
337
|
-
const merged = [];
|
|
338
|
-
for (let i = 0; i < sections.length; i++) {
|
|
339
|
-
const section = sections[i];
|
|
340
|
-
// If section is very short and not the last, consider merging with next
|
|
341
|
-
if (section.content.length < 200 && i < sections.length - 1) {
|
|
342
|
-
const nextSection = sections[i + 1];
|
|
343
|
-
// Merge if next section is not a major section
|
|
344
|
-
if (!this.isMajorSection(nextSection.title)) {
|
|
345
|
-
merged.push({
|
|
346
|
-
title: section.title,
|
|
347
|
-
content: section.content + '\n\n' + nextSection.content,
|
|
348
|
-
});
|
|
349
|
-
i++; // Skip next section
|
|
350
|
-
}
|
|
351
|
-
else {
|
|
352
|
-
merged.push(section);
|
|
353
|
-
}
|
|
354
|
-
}
|
|
355
|
-
else {
|
|
356
|
-
merged.push(section);
|
|
357
|
-
}
|
|
358
|
-
}
|
|
359
|
-
return merged;
|
|
360
|
-
}
|
|
361
|
-
isMajorSection(title) {
|
|
362
|
-
const majorKeywords = [
|
|
363
|
-
'introduction',
|
|
364
|
-
'getting started',
|
|
365
|
-
'installation',
|
|
366
|
-
'setup',
|
|
367
|
-
'api',
|
|
368
|
-
'reference',
|
|
369
|
-
'examples',
|
|
370
|
-
'tutorial',
|
|
371
|
-
'guide',
|
|
372
|
-
'overview',
|
|
373
|
-
'quick start',
|
|
374
|
-
'basics',
|
|
375
|
-
'advanced',
|
|
376
|
-
];
|
|
377
|
-
const titleLower = title.toLowerCase();
|
|
378
|
-
return majorKeywords.some((keyword) => titleLower.includes(keyword));
|
|
379
|
-
}
|
|
380
|
-
createUniqueFileName(title, index, dir) {
|
|
381
|
-
// Clean up the title for use in filename
|
|
382
|
-
const safeTitle = title
|
|
383
|
-
.replace(/[^\w\s-]/g, '')
|
|
384
|
-
.replace(/[-\s]+/g, '_')
|
|
385
|
-
.replace(/^_+|_+$/g, '') // Remove leading/trailing underscores
|
|
386
|
-
.slice(0, 50) || 'section';
|
|
387
|
-
// Create hierarchical naming based on heading level if possible
|
|
388
|
-
const headingLevel = this.extractHeadingLevel(title);
|
|
389
|
-
const prefix = headingLevel > 1 ? `${'0'.repeat(Math.min(headingLevel - 1, 3))}${index}` : index.toString();
|
|
390
|
-
// Use both index and title for better organization
|
|
391
|
-
const baseName = `${prefix.padStart(4, '0')}_${safeTitle}`;
|
|
392
|
-
let filename = `${baseName}.md`;
|
|
393
|
-
let counter = 1;
|
|
394
|
-
while (existsSync(join(dir, filename))) {
|
|
395
|
-
filename = `${baseName}_${counter.toString().padStart(2, '0')}.md`;
|
|
396
|
-
counter++;
|
|
397
|
-
}
|
|
398
|
-
return filename;
|
|
399
|
-
}
|
|
400
|
-
extractHeadingLevel(title) {
|
|
401
|
-
// Try to extract heading level from title if it contains markdown-like indicators
|
|
402
|
-
const match = title.match(/^(#{1,6})\s*(.+)$/);
|
|
403
|
-
if (match) {
|
|
404
|
-
return match[1].length;
|
|
405
|
-
}
|
|
406
|
-
// Look for other indicators in the title
|
|
407
|
-
if (/^(Chapter|Section|Part)\s+\d+/i.test(title))
|
|
408
|
-
return 1;
|
|
409
|
-
if (/^\d+\.\d+/i.test(title))
|
|
410
|
-
return 2;
|
|
411
|
-
if (/^\d+\.\d+\.\d+/i.test(title))
|
|
412
|
-
return 3;
|
|
413
|
-
return 1; // Default to level 1
|
|
414
|
-
}
|
|
415
|
-
createUniqueFilePath(title, dir) {
|
|
416
|
-
// Convert to lowercase and clean up for filename
|
|
417
|
-
const safeTitle = title
|
|
418
|
-
.toLowerCase()
|
|
419
|
-
.replace(/[^\w\s-]/g, '')
|
|
420
|
-
.replace(/[-\s]+/g, '_')
|
|
421
|
-
.replace(/^_+|_+$/g, '') // Remove leading/trailing underscores
|
|
422
|
-
.slice(0, 50) || 'content';
|
|
423
|
-
let filename = `${safeTitle}.md`;
|
|
424
|
-
let counter = 1;
|
|
425
|
-
while (existsSync(join(dir, filename))) {
|
|
426
|
-
filename = `${safeTitle}_${counter.toString().padStart(2, '0')}.md`;
|
|
427
|
-
counter++;
|
|
428
|
-
}
|
|
429
|
-
return join(dir, filename);
|
|
430
|
-
}
|
|
431
|
-
async findSimilarContent(content, threshold = 0.85, maxResults = 10) {
|
|
432
|
-
const results = await this.options.searchEngine.search(content, maxResults);
|
|
433
|
-
return results.filter((r) => r.score >= threshold);
|
|
434
|
-
}
|
|
435
|
-
isContentEnhanced(existing, newContent) {
|
|
436
|
-
const existingWords = existing.content.split(/\s+/).length;
|
|
437
|
-
const newWords = newContent.split(/\s+/).length;
|
|
438
|
-
return newWords > existingWords * 1.3;
|
|
439
|
-
}
|
|
440
|
-
getHashFilePath(projectId) {
|
|
441
|
-
// Sanitize project ID for use in filename (replace slashes with underscores)
|
|
442
|
-
const safeProjectId = projectId.replace(/\//g, '_');
|
|
443
|
-
return join(this.options.referencesDir, '..', `.context7_hash_${safeProjectId}`);
|
|
444
|
-
}
|
|
445
|
-
saveContentHash(content, projectId) {
|
|
446
|
-
const hash = createHash('md5').update(content).digest('hex');
|
|
447
|
-
const hashFile = this.getHashFilePath(projectId);
|
|
448
|
-
writeFileSync(hashFile, hash);
|
|
449
|
-
}
|
|
450
|
-
needsUpdate(content, projectId) {
|
|
451
|
-
const hashFile = this.getHashFilePath(projectId);
|
|
452
|
-
if (!existsSync(hashFile)) {
|
|
453
|
-
return true;
|
|
454
|
-
}
|
|
455
|
-
const currentHash = createHash('md5').update(content).digest('hex');
|
|
456
|
-
const storedHash = readFileSync(hashFile, 'utf-8');
|
|
457
|
-
return currentHash !== storedHash;
|
|
458
|
-
}
|
|
459
|
-
async triggerReindex() {
|
|
460
|
-
const hashFile = join(this.options.referencesDir, '..', '.last_index_hash');
|
|
461
|
-
if (existsSync(hashFile)) {
|
|
462
|
-
rmSync(hashFile);
|
|
463
|
-
}
|
|
464
|
-
}
|
|
465
|
-
/**
|
|
466
|
-
* List all context7 projects
|
|
467
|
-
*/
|
|
468
|
-
listContext7Projects() {
|
|
469
|
-
const projects = [];
|
|
470
|
-
if (!existsSync(this.context7BaseDir)) {
|
|
471
|
-
return projects;
|
|
472
|
-
}
|
|
473
|
-
const projectDirs = readdirSync(this.context7BaseDir, { withFileTypes: true })
|
|
474
|
-
.filter((dirent) => dirent.isDirectory())
|
|
475
|
-
.map((dirent) => dirent.name);
|
|
476
|
-
for (const projectId of projectDirs) {
|
|
477
|
-
const projectDir = this.getContext7ProjectDir(projectId);
|
|
478
|
-
if (existsSync(projectDir)) {
|
|
479
|
-
const files = readdirSync(projectDir).filter((f) => f.endsWith('.md'));
|
|
480
|
-
projects.push({
|
|
481
|
-
projectId,
|
|
482
|
-
filesCount: files.length,
|
|
483
|
-
directory: projectDir,
|
|
484
|
-
});
|
|
485
|
-
}
|
|
486
|
-
}
|
|
487
|
-
return projects;
|
|
488
|
-
}
|
|
489
|
-
/**
|
|
490
|
-
* Get files for a specific context7 project
|
|
491
|
-
*/
|
|
492
|
-
getContext7ProjectFiles(projectId) {
|
|
493
|
-
const projectDir = this.getContext7ProjectDir(projectId);
|
|
494
|
-
if (!existsSync(projectDir)) {
|
|
495
|
-
return [];
|
|
496
|
-
}
|
|
497
|
-
return readdirSync(projectDir).filter((f) => f.endsWith('.md'));
|
|
498
|
-
}
|
|
499
|
-
/**
|
|
500
|
-
* Remove a context7 project
|
|
501
|
-
*/
|
|
502
|
-
removeContext7Project(projectId) {
|
|
503
|
-
const projectDir = this.getContext7ProjectDir(projectId);
|
|
504
|
-
if (!existsSync(projectDir)) {
|
|
505
|
-
return {
|
|
506
|
-
success: false,
|
|
507
|
-
message: `Context7 project ${projectId} does not exist`,
|
|
508
|
-
};
|
|
509
|
-
}
|
|
510
|
-
try {
|
|
511
|
-
// Remove project directory
|
|
512
|
-
rmSync(projectDir, { recursive: true, force: true });
|
|
513
|
-
// Remove project hash file
|
|
514
|
-
const hashFile = this.getHashFilePath(projectId);
|
|
515
|
-
if (existsSync(hashFile)) {
|
|
516
|
-
rmSync(hashFile);
|
|
517
|
-
}
|
|
518
|
-
// Trigger reindex
|
|
519
|
-
this.triggerReindex();
|
|
520
|
-
return {
|
|
521
|
-
success: true,
|
|
522
|
-
message: `Context7 project ${projectId} removed successfully`,
|
|
523
|
-
};
|
|
524
|
-
}
|
|
525
|
-
catch (error) {
|
|
526
|
-
return {
|
|
527
|
-
success: false,
|
|
528
|
-
message: `Failed to remove Context7 project ${projectId}: ${error}`,
|
|
529
|
-
};
|
|
530
|
-
}
|
|
531
|
-
}
|
|
532
|
-
}
|
|
533
|
-
//# sourceMappingURL=contentManager.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"contentManager.js","sourceRoot":"","sources":["../../src/core/contentManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fuzzy Search Engine Adapter
|
|
3
|
-
* Implements the SearchEngine interface using uFuzzy library
|
|
4
|
-
* Clean, focused implementation - formatting handled by separate formatters
|
|
5
|
-
*/
|
|
6
|
-
import type { SearchEngine, SearchResult, SearchOptions } from './searchAdapter';
|
|
7
|
-
/**
|
|
8
|
-
* uFuzzy-based Search Engine Adapter
|
|
9
|
-
* Clean implementation focused only on search functionality
|
|
10
|
-
*/
|
|
11
|
-
export declare class FuzzySearchAdapter implements SearchEngine {
|
|
12
|
-
private documents;
|
|
13
|
-
private fuzzy;
|
|
14
|
-
private lastSearchInfo;
|
|
15
|
-
constructor();
|
|
16
|
-
buildIndex(referencesDir: string): Promise<void>;
|
|
17
|
-
search(query: string, options?: SearchOptions): Promise<SearchResult[]>;
|
|
18
|
-
/**
|
|
19
|
-
* Basic fuzzy search using uFuzzy
|
|
20
|
-
*/
|
|
21
|
-
private fuzzySearch;
|
|
22
|
-
/**
|
|
23
|
-
* Enhanced fuzzy search that returns both indices and detailed info
|
|
24
|
-
*/
|
|
25
|
-
private fuzzySearchWithInfo;
|
|
26
|
-
isBuilt(): boolean;
|
|
27
|
-
getStats(): Promise<{
|
|
28
|
-
totalDocuments: number;
|
|
29
|
-
}>;
|
|
30
|
-
searchByPriority(query: string, topK?: number): Promise<SearchResult[]>;
|
|
31
|
-
clearIndex(): void;
|
|
32
|
-
}
|
|
33
|
-
//# sourceMappingURL=fuzzySearchAdapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fuzzySearchAdapter.d.ts","sourceRoot":"","sources":["../../src/core/fuzzySearchAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAKhF;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,SAAS,CAOV;IAEP,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,cAAc,CAA8B;;IAS9C,UAAU,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2ChD,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA6FjF;;OAEG;IACH,OAAO,CAAC,WAAW;IAKnB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA8B3B,OAAO,IAAI,OAAO;IAIZ,QAAQ,IAAI,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAC;IAI/C,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAKhF,UAAU,IAAI,IAAI;CAInB"}
|