skill-creator 1.3.2 → 1.4.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 +13 -10
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +127 -5
- package/dist/cli.js.map +1 -1
- package/dist/commands/addContent.d.ts.map +1 -1
- package/dist/commands/addContent.js +17 -3
- package/dist/commands/addContent.js.map +1 -1
- package/dist/commands/buildIndex.d.ts.map +1 -1
- package/dist/commands/buildIndex.js +2 -3
- package/dist/commands/buildIndex.js.map +1 -1
- package/dist/commands/downloadContext7.d.ts.map +1 -1
- package/dist/commands/downloadContext7.js +14 -7
- package/dist/commands/downloadContext7.js.map +1 -1
- package/dist/commands/listContent.d.ts.map +1 -1
- package/dist/commands/listContent.js +2 -3
- package/dist/commands/listContent.js.map +1 -1
- package/dist/commands/listContext7.d.ts +5 -0
- package/dist/commands/listContext7.d.ts.map +1 -0
- package/dist/commands/listContext7.js +26 -0
- package/dist/commands/listContext7.js.map +1 -0
- package/dist/commands/listSkills.d.ts +5 -0
- package/dist/commands/listSkills.d.ts.map +1 -0
- package/dist/commands/listSkills.js +34 -0
- package/dist/commands/listSkills.js.map +1 -0
- package/dist/commands/removeContext7.d.ts +5 -0
- package/dist/commands/removeContext7.d.ts.map +1 -0
- package/dist/commands/removeContext7.js +54 -0
- package/dist/commands/removeContext7.js.map +1 -0
- package/dist/commands/removeSkill.d.ts +5 -0
- package/dist/commands/removeSkill.d.ts.map +1 -0
- package/dist/commands/removeSkill.js +83 -0
- package/dist/commands/removeSkill.js.map +1 -0
- package/dist/commands/searchContent.d.ts.map +1 -1
- package/dist/commands/searchContent.js +5 -4
- package/dist/commands/searchContent.js.map +1 -1
- package/dist/commands/shared.d.ts +4 -10
- package/dist/commands/shared.d.ts.map +1 -1
- package/dist/commands/shared.js +3 -17
- package/dist/commands/shared.js.map +1 -1
- package/dist/core/contentManager.d.ts +25 -1
- package/dist/core/contentManager.d.ts.map +1 -1
- package/dist/core/contentManager.js +152 -28
- package/dist/core/contentManager.js.map +1 -1
- package/dist/core/runScript.d.ts.map +1 -1
- package/dist/core/runScript.js +5 -2
- package/dist/core/runScript.js.map +1 -1
- package/dist/core/skillCreator.d.ts.map +1 -1
- package/dist/core/skillCreator.js +6 -5
- package/dist/core/skillCreator.js.map +1 -1
- package/dist/core/templateManager.d.ts +28 -0
- package/dist/core/templateManager.d.ts.map +1 -0
- package/dist/core/templateManager.js +583 -0
- package/dist/core/templateManager.js.map +1 -0
- package/dist/search_format/index.d.ts +1 -1
- package/dist/search_format/index.d.ts.map +1 -1
- package/dist/search_format/listFormatter.d.ts.map +1 -1
- package/dist/search_format/listFormatter.js +1 -1
- package/dist/search_format/listFormatter.js.map +1 -1
- package/dist/utils/claudeCodeDetection.d.ts +27 -0
- package/dist/utils/claudeCodeDetection.d.ts.map +1 -0
- package/dist/utils/claudeCodeDetection.js +81 -0
- package/dist/utils/claudeCodeDetection.js.map +1 -0
- package/dist/utils/config.d.ts +9 -0
- package/dist/utils/config.d.ts.map +1 -1
- package/dist/utils/config.js +7 -0
- package/dist/utils/config.js.map +1 -1
- package/dist/utils/package.d.ts +14 -0
- package/dist/utils/package.d.ts.map +1 -1
- package/dist/utils/package.js +14 -0
- package/dist/utils/package.js.map +1 -1
- package/dist/utils/skillMdManager.d.ts +44 -0
- package/dist/utils/skillMdManager.d.ts.map +1 -0
- package/dist/utils/skillMdManager.js +157 -0
- package/dist/utils/skillMdManager.js.map +1 -0
- package/package.json +17 -13
- package/templates/SKILL.md +21 -232
- package/templates/SKILL.zh-CN.md +37 -3
- package/templates/skill-creator.md +0 -1
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove Context7 project command
|
|
3
|
+
*/
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { existsSync } from 'node:fs';
|
|
6
|
+
import { parseArgs, createSearchEngine } from './shared.js';
|
|
7
|
+
import { removeContext7TagFromFile } from '../utils/skillMdManager.js';
|
|
8
|
+
export async function removeContext7(args) {
|
|
9
|
+
const searchEngine = await createSearchEngine({});
|
|
10
|
+
const { ContentManager } = await import('../core/contentManager.js');
|
|
11
|
+
const contentManager = new ContentManager({
|
|
12
|
+
searchEngine,
|
|
13
|
+
referencesDir: join(process.cwd(), 'assets', 'references'),
|
|
14
|
+
});
|
|
15
|
+
// Parse arguments
|
|
16
|
+
const options = parseArgs(args, [{ name: 'project-id', type: 'string' }]);
|
|
17
|
+
const projectId = options['project-id'];
|
|
18
|
+
if (!projectId) {
|
|
19
|
+
console.error('❌ No Context7 project ID provided');
|
|
20
|
+
console.error(' Use --project-id <id>');
|
|
21
|
+
process.exit(1);
|
|
22
|
+
}
|
|
23
|
+
console.log(`🗑️ Removing Context7 project: ${projectId}`);
|
|
24
|
+
try {
|
|
25
|
+
// Remove project from filesystem
|
|
26
|
+
const result = contentManager.removeContext7Project(projectId);
|
|
27
|
+
if (!result.success) {
|
|
28
|
+
console.error(`❌ ${result.message}`);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
console.log(`✅ ${result.message}`);
|
|
32
|
+
// Remove from SKILL.md
|
|
33
|
+
const skillMdPath = join(process.cwd(), 'SKILL.md');
|
|
34
|
+
if (existsSync(skillMdPath)) {
|
|
35
|
+
removeContext7TagFromFile(skillMdPath, projectId);
|
|
36
|
+
console.log(`📝 Updated SKILL.md`);
|
|
37
|
+
}
|
|
38
|
+
// Rebuild index
|
|
39
|
+
console.log(`\n🔧 Rebuilding ChromaDB index...`);
|
|
40
|
+
try {
|
|
41
|
+
await searchEngine.initialize();
|
|
42
|
+
await searchEngine.buildIndex(join(process.cwd(), 'assets', 'references'));
|
|
43
|
+
console.log(`✅ Index rebuilt successfully`);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
console.log(`⚠️ Index rebuild failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error(`❌ Error removing Context7 project:`, error);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=removeContext7.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeContext7.js","sourceRoot":"","sources":["../../src/commands/removeContext7.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAA;AACpC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAC3D,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAA;AAEtE,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,IAAc;IACjD,MAAM,YAAY,GAAG,MAAM,kBAAkB,CAAC,EAAE,CAAC,CAAA;IAEjD,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAA;IAEpE,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC;QACxC,YAAY;QACZ,aAAa,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC;KAC3D,CAAC,CAAA;IAEF,kBAAkB;IAClB,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAA;IAEzE,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACvC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAA;QAClD,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,mCAAmC,SAAS,EAAE,CAAC,CAAA;IAE3D,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,MAAM,GAAG,cAAc,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAA;QAE9D,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;YACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAA;QAElC,uBAAuB;QACvB,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,UAAU,CAAC,CAAA;QACnD,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,yBAAyB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAA;YACjD,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAA;QACpC,CAAC;QAED,gBAAgB;QAChB,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAA;QAChD,IAAI,CAAC;YACH,MAAM,YAAY,CAAC,UAAU,EAAE,CAAA;YAC/B,MAAM,YAAY,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAA;YAC1E,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CACT,6BAA6B,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtF,CAAA;QACH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,oCAAoC,EAAE,KAAK,CAAC,CAAA;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeSkill.d.ts","sourceRoot":"","sources":["../../src/commands/removeSkill.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E/D"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remove skill file command
|
|
3
|
+
*/
|
|
4
|
+
import { join } from 'node:path';
|
|
5
|
+
import { existsSync, unlinkSync, readdirSync } from 'node:fs';
|
|
6
|
+
import { parseArgs } from './shared.js';
|
|
7
|
+
import { updateSkillMdFile } from '../utils/skillMdManager.js';
|
|
8
|
+
export async function removeSkill(args) {
|
|
9
|
+
// Parse arguments
|
|
10
|
+
const options = parseArgs(args, [
|
|
11
|
+
{ name: 'type', type: 'string', required: true },
|
|
12
|
+
{ name: 'file', type: 'string', required: true },
|
|
13
|
+
]);
|
|
14
|
+
const type = options.type;
|
|
15
|
+
const fileName = options.file;
|
|
16
|
+
// Parse type: user or context7:<project_id>
|
|
17
|
+
let source = 'user';
|
|
18
|
+
let projectId;
|
|
19
|
+
if (type.startsWith('context7:')) {
|
|
20
|
+
source = 'context7';
|
|
21
|
+
projectId = type.slice('context7:'.length);
|
|
22
|
+
if (!projectId) {
|
|
23
|
+
console.error('❌ Invalid type format. Use: user or context7:<project_id>');
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
else if (type === 'user') {
|
|
28
|
+
source = 'user';
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.error('❌ Invalid type. Use: user or context7:<project_id>');
|
|
32
|
+
process.exit(1);
|
|
33
|
+
}
|
|
34
|
+
// Construct file path
|
|
35
|
+
const referencesDir = join(process.cwd(), 'assets', 'references');
|
|
36
|
+
let filePath;
|
|
37
|
+
if (source === 'user') {
|
|
38
|
+
filePath = join(referencesDir, 'user', fileName);
|
|
39
|
+
}
|
|
40
|
+
else if (source === 'context7' && projectId) {
|
|
41
|
+
filePath = join(referencesDir, 'context7', projectId, fileName);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
console.error('❌ Invalid configuration');
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
// Check if file exists
|
|
48
|
+
if (!existsSync(filePath)) {
|
|
49
|
+
console.error(`❌ File not found: ${filePath}`);
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
// Remove file
|
|
54
|
+
unlinkSync(filePath);
|
|
55
|
+
console.log(`✅ Removed file: ${fileName}`);
|
|
56
|
+
// Update SKILL.md
|
|
57
|
+
const skillMdPath = join(process.cwd(), 'SKILL.md');
|
|
58
|
+
if (existsSync(skillMdPath)) {
|
|
59
|
+
if (source === 'user') {
|
|
60
|
+
// Update user-skills tag
|
|
61
|
+
const userDir = join(referencesDir, 'user');
|
|
62
|
+
const files = readdirSync(userDir).filter((f) => f.endsWith('.md'));
|
|
63
|
+
const fileList = files.map((f) => `- ${f}`).join('\n');
|
|
64
|
+
updateSkillMdFile(skillMdPath, 'user-skills', fileList);
|
|
65
|
+
console.log(`📝 Updated SKILL.md`);
|
|
66
|
+
}
|
|
67
|
+
else if (source === 'context7' && projectId) {
|
|
68
|
+
// Update context7-skills tag
|
|
69
|
+
const projectDir = join(referencesDir, 'context7', projectId);
|
|
70
|
+
const files = readdirSync(projectDir).filter((f) => f.endsWith('.md'));
|
|
71
|
+
const fileList = files.map((f) => `- ${f}`).join('\n');
|
|
72
|
+
updateSkillMdFile(skillMdPath, 'context7-skills', fileList, projectId);
|
|
73
|
+
console.log(`📝 Updated SKILL.md`);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
console.log(`\n✅ Skill file removed successfully`);
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error(`❌ Error removing skill file:`, error);
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=removeSkill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"removeSkill.js","sourceRoot":"","sources":["../../src/commands/removeSkill.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchContent.d.ts","sourceRoot":"","sources":["../../src/commands/searchContent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"searchContent.d.ts","sourceRoot":"","sources":["../../src/commands/searchContent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,wBAAsB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6GjE"}
|
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
* Search skill content command
|
|
3
3
|
*/
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import {
|
|
5
|
+
import { parseArgs, createSearchEngine } from './shared.js';
|
|
6
6
|
import { createFormatter } from '../search_format/index.js';
|
|
7
7
|
export async function searchContent(args) {
|
|
8
|
-
const config = loadSkillConfig();
|
|
9
8
|
// Parse arguments
|
|
10
9
|
const options = parseArgs(args, [
|
|
11
10
|
{ name: 'query', alias: 'q', type: 'string', required: true },
|
|
@@ -20,8 +19,10 @@ export async function searchContent(args) {
|
|
|
20
19
|
process.exit(1);
|
|
21
20
|
}
|
|
22
21
|
// Create search engine
|
|
23
|
-
const searchEngine = await createSearchEngine(
|
|
24
|
-
|
|
22
|
+
const searchEngine = await createSearchEngine({
|
|
23
|
+
searchMode: options.mode,
|
|
24
|
+
useFormatting: false, // We'll handle formatting manually for now
|
|
25
|
+
});
|
|
25
26
|
// Initialize search engine
|
|
26
27
|
await searchEngine.initialize();
|
|
27
28
|
// Build index if needed
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"searchContent.js","sourceRoot":"","sources":["../../src/commands/searchContent.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"searchContent.js","sourceRoot":"","sources":["../../src/commands/searchContent.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Shared utilities for commands
|
|
3
3
|
*/
|
|
4
|
-
import type { SkillConfig } from '../types/index.js';
|
|
5
|
-
/**
|
|
6
|
-
* Load skill configuration from current directory
|
|
7
|
-
*/
|
|
8
|
-
export declare function loadSkillConfig(pwd?: string): SkillConfig;
|
|
9
|
-
/**
|
|
10
|
-
* Load skill configuration from current directory
|
|
11
|
-
*/
|
|
12
|
-
export declare function storeSkillConfig(config: SkillConfig, pwd?: string): void;
|
|
13
4
|
/**
|
|
14
5
|
* Parse command line arguments
|
|
15
6
|
*/
|
|
@@ -23,5 +14,8 @@ export declare function parseArgs(args: string[], definitions: Array<{
|
|
|
23
14
|
/**
|
|
24
15
|
* Create search engine instance
|
|
25
16
|
*/
|
|
26
|
-
export declare function createSearchEngine(
|
|
17
|
+
export declare function createSearchEngine(options?: {
|
|
18
|
+
searchMode?: 'chroma' | 'fuzzy' | 'auto';
|
|
19
|
+
useFormatting?: boolean;
|
|
20
|
+
}): Promise<import("../index.js").UnifiedSearchEngine>;
|
|
27
21
|
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;GAEG;AACH,wBAAgB,SAAS,CACvB,IAAI,EAAE,MAAM,EAAE,EACd,WAAW,EAAE,KAAK,CAAC;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,GAAG,CAAA;CACd,CAAC,GACD,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAiDrB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,GAAE;IACP,UAAU,CAAC,EAAE,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAA;IACxC,aAAa,CAAC,EAAE,OAAO,CAAA;CACnB,sDAwBP"}
|
package/dist/commands/shared.js
CHANGED
|
@@ -2,21 +2,6 @@
|
|
|
2
2
|
* Shared utilities for commands
|
|
3
3
|
*/
|
|
4
4
|
import { join } from 'node:path';
|
|
5
|
-
import { Config } from '../utils/config.js';
|
|
6
|
-
/**
|
|
7
|
-
* Load skill configuration from current directory
|
|
8
|
-
*/
|
|
9
|
-
export function loadSkillConfig(pwd = process.cwd()) {
|
|
10
|
-
const configPath = join(pwd, 'config.json');
|
|
11
|
-
return Config.loadWithDefaults(configPath);
|
|
12
|
-
}
|
|
13
|
-
/**
|
|
14
|
-
* Load skill configuration from current directory
|
|
15
|
-
*/
|
|
16
|
-
export function storeSkillConfig(config, pwd = process.cwd()) {
|
|
17
|
-
const configPath = join(pwd, 'config.json');
|
|
18
|
-
return Config.save(config, configPath);
|
|
19
|
-
}
|
|
20
5
|
/**
|
|
21
6
|
* Parse command line arguments
|
|
22
7
|
*/
|
|
@@ -69,13 +54,14 @@ export function parseArgs(args, definitions) {
|
|
|
69
54
|
/**
|
|
70
55
|
* Create search engine instance
|
|
71
56
|
*/
|
|
72
|
-
export async function createSearchEngine(
|
|
57
|
+
export async function createSearchEngine(options = {}) {
|
|
58
|
+
const { searchMode = 'auto', useFormatting = true } = options;
|
|
73
59
|
const { UnifiedSearchEngine } = await import('../core/unifiedSearch.js');
|
|
74
60
|
return new UnifiedSearchEngine({
|
|
75
61
|
mode: searchMode,
|
|
76
62
|
skillDir: join(process.cwd(), 'assets'),
|
|
77
63
|
referencesDir: join(process.cwd(), 'assets', 'references'),
|
|
78
|
-
config,
|
|
64
|
+
config: {}, // No longer needed
|
|
79
65
|
skillPath: process.cwd(),
|
|
80
66
|
format: useFormatting ? 'enhanced' : undefined,
|
|
81
67
|
adapterOptions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAEhC
|
|
1
|
+
{"version":3,"file":"shared.js","sourceRoot":"","sources":["../../src/commands/shared.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,9 +11,13 @@ export interface ContentManagerOptions {
|
|
|
11
11
|
export declare class ContentManager {
|
|
12
12
|
private options;
|
|
13
13
|
private userDir;
|
|
14
|
-
private
|
|
14
|
+
private context7BaseDir;
|
|
15
15
|
private md;
|
|
16
16
|
constructor(options: ContentManagerOptions);
|
|
17
|
+
/**
|
|
18
|
+
* Get the directory path for a specific context7 project
|
|
19
|
+
*/
|
|
20
|
+
private getContext7ProjectDir;
|
|
17
21
|
updateFromContext7(libraryId: string, force?: boolean): Promise<UpdateContext7Result>;
|
|
18
22
|
addUserContent(options: {
|
|
19
23
|
title: string;
|
|
@@ -34,8 +38,28 @@ export declare class ContentManager {
|
|
|
34
38
|
private createUniqueFilePath;
|
|
35
39
|
private findSimilarContent;
|
|
36
40
|
private isContentEnhanced;
|
|
41
|
+
private getHashFilePath;
|
|
37
42
|
private saveContentHash;
|
|
38
43
|
private needsUpdate;
|
|
39
44
|
private triggerReindex;
|
|
45
|
+
/**
|
|
46
|
+
* List all context7 projects
|
|
47
|
+
*/
|
|
48
|
+
listContext7Projects(): Array<{
|
|
49
|
+
projectId: string;
|
|
50
|
+
filesCount: number;
|
|
51
|
+
directory: string;
|
|
52
|
+
}>;
|
|
53
|
+
/**
|
|
54
|
+
* Get files for a specific context7 project
|
|
55
|
+
*/
|
|
56
|
+
getContext7ProjectFiles(projectId: string): string[];
|
|
57
|
+
/**
|
|
58
|
+
* Remove a context7 project
|
|
59
|
+
*/
|
|
60
|
+
removeContext7Project(projectId: string): {
|
|
61
|
+
success: boolean;
|
|
62
|
+
message: string;
|
|
63
|
+
};
|
|
40
64
|
}
|
|
41
65
|
//# sourceMappingURL=contentManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contentManager.d.ts","sourceRoot":"","sources":["../../src/core/contentManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE;QACZ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;KAClE,CAAA;IACD,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"contentManager.d.ts","sourceRoot":"","sources":["../../src/core/contentManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAcH,OAAO,KAAK,EACV,YAAY,EACZ,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,mBAAmB,CAAA;AAE1B,MAAM,WAAW,qBAAqB;IACpC,YAAY,EAAE;QACZ,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAA;KAClE,CAAA;IACD,aAAa,EAAE,MAAM,CAAA;CACtB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,eAAe,CAAQ;IAC/B,OAAO,CAAC,EAAE,CAAY;gBAEV,OAAO,EAAE,qBAAqB;IAO1C;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAIvB,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,oBAAoB,CAAC;IAsD1B,cAAc,CAAC,OAAO,EAAE;QAC5B,KAAK,EAAE,MAAM,CAAA;QACb,OAAO,EAAE,MAAM,CAAA;QACf,KAAK,CAAC,EAAE,OAAO,CAAA;QACf,WAAW,CAAC,EAAE,OAAO,CAAA;QACrB,UAAU,CAAC,EAAE,OAAO,CAAA;KACrB,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+G7B,eAAe,IAAI,YAAY;IA+B/B,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,EAAE;YAiF1C,mBAAmB;YAWnB,aAAa;IAkB3B,OAAO,CAAC,eAAe;IAkDvB,OAAO,CAAC,kBAAkB;IA8B1B,OAAO,CAAC,cAAc;IAqBtB,OAAO,CAAC,oBAAoB;IA2B5B,OAAO,CAAC,mBAAmB;IAe3B,OAAO,CAAC,oBAAoB;YAmBd,kBAAkB;IAShC,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,WAAW;YAaL,cAAc;IAO5B;;OAEG;IACH,oBAAoB,IAAI,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC;IA0B3F;;OAEG;IACH,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE;IAUpD;;OAEG;IACH,qBAAqB,CAAC,SAAS,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE;CAkChF"}
|
|
@@ -8,14 +8,20 @@ import MarkdownIt from 'markdown-it';
|
|
|
8
8
|
export class ContentManager {
|
|
9
9
|
options;
|
|
10
10
|
userDir;
|
|
11
|
-
|
|
11
|
+
context7BaseDir;
|
|
12
12
|
md;
|
|
13
13
|
constructor(options) {
|
|
14
14
|
this.options = options;
|
|
15
15
|
this.userDir = join(options.referencesDir, 'user');
|
|
16
|
-
this.
|
|
16
|
+
this.context7BaseDir = join(options.referencesDir, 'context7');
|
|
17
17
|
this.md = new MarkdownIt();
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Get the directory path for a specific context7 project
|
|
21
|
+
*/
|
|
22
|
+
getContext7ProjectDir(projectId) {
|
|
23
|
+
return join(this.context7BaseDir, projectId);
|
|
24
|
+
}
|
|
19
25
|
async updateFromContext7(libraryId, force = false) {
|
|
20
26
|
const result = {
|
|
21
27
|
updated: false,
|
|
@@ -26,32 +32,34 @@ export class ContentManager {
|
|
|
26
32
|
try {
|
|
27
33
|
// Download content
|
|
28
34
|
const content = await this.downloadContext7Doc(libraryId);
|
|
35
|
+
// Get project-specific directory
|
|
36
|
+
const projectDir = this.getContext7ProjectDir(libraryId);
|
|
29
37
|
// Check if update needed
|
|
30
|
-
if (!force && !this.needsUpdate(content)) {
|
|
38
|
+
if (!force && !this.needsUpdate(content, libraryId)) {
|
|
31
39
|
result.skipped = true;
|
|
32
40
|
result.message = 'Context7 documentation is up to date';
|
|
33
41
|
return result;
|
|
34
42
|
}
|
|
35
|
-
// Clear existing context7 docs
|
|
36
|
-
if (existsSync(
|
|
37
|
-
const files = readdirSync(
|
|
43
|
+
// Clear existing context7 docs for this project
|
|
44
|
+
if (existsSync(projectDir)) {
|
|
45
|
+
const files = readdirSync(projectDir);
|
|
38
46
|
for (const file of files) {
|
|
39
47
|
if (file.endsWith('.md')) {
|
|
40
|
-
rmSync(join(
|
|
48
|
+
rmSync(join(projectDir, file));
|
|
41
49
|
}
|
|
42
50
|
}
|
|
43
51
|
}
|
|
44
52
|
// Ensure directory exists
|
|
45
|
-
mkdirSync(
|
|
53
|
+
mkdirSync(projectDir, { recursive: true });
|
|
46
54
|
// Slice and save
|
|
47
|
-
const savedFiles = await this.sliceDocument(content,
|
|
55
|
+
const savedFiles = await this.sliceDocument(content, projectDir);
|
|
48
56
|
result.filesCreated = savedFiles.length;
|
|
49
|
-
// Save hash
|
|
50
|
-
this.saveContentHash(content);
|
|
57
|
+
// Save hash for this project
|
|
58
|
+
this.saveContentHash(content, libraryId);
|
|
51
59
|
// Trigger reindex
|
|
52
60
|
this.triggerReindex();
|
|
53
61
|
result.updated = true;
|
|
54
|
-
result.message = `Updated ${savedFiles.length} documentation slices`;
|
|
62
|
+
result.message = `Updated ${savedFiles.length} documentation slices for project ${libraryId}`;
|
|
55
63
|
}
|
|
56
64
|
catch (error) {
|
|
57
65
|
result.message = `Failed to update Context7 docs: ${error}`;
|
|
@@ -167,31 +175,36 @@ export class ContentManager {
|
|
|
167
175
|
context7Files: 0,
|
|
168
176
|
totalFiles: 0,
|
|
169
177
|
userDirExists: existsSync(this.userDir),
|
|
170
|
-
context7DirExists: existsSync(this.
|
|
178
|
+
context7DirExists: existsSync(this.context7BaseDir),
|
|
171
179
|
};
|
|
172
180
|
if (stats.userDirExists) {
|
|
173
181
|
stats.userFiles = readdirSync(this.userDir).filter((f) => f.endsWith('.md')).length;
|
|
174
182
|
}
|
|
175
183
|
if (stats.context7DirExists) {
|
|
176
|
-
|
|
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
|
+
}
|
|
177
194
|
}
|
|
178
195
|
stats.totalFiles = stats.userFiles + stats.context7Files;
|
|
179
196
|
return stats;
|
|
180
197
|
}
|
|
181
198
|
listContent(source) {
|
|
182
199
|
const contentList = [];
|
|
183
|
-
|
|
184
|
-
if (source === 'user' || !source)
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
dirsToSearch.push(['context7', this.context7Dir]);
|
|
188
|
-
for (const [sourceName, dirPath] of dirsToSearch) {
|
|
189
|
-
if (existsSync(dirPath)) {
|
|
190
|
-
const files = readdirSync(dirPath);
|
|
200
|
+
// List user content
|
|
201
|
+
if (source === 'user' || !source) {
|
|
202
|
+
if (existsSync(this.userDir)) {
|
|
203
|
+
const files = readdirSync(this.userDir);
|
|
191
204
|
for (const file of files) {
|
|
192
205
|
if (!file.endsWith('.md'))
|
|
193
206
|
continue;
|
|
194
|
-
const filePath = join(
|
|
207
|
+
const filePath = join(this.userDir, file);
|
|
195
208
|
const stat = statSync(filePath);
|
|
196
209
|
let title = file.replace('.md', '');
|
|
197
210
|
try {
|
|
@@ -207,7 +220,7 @@ export class ContentManager {
|
|
|
207
220
|
contentList.push({
|
|
208
221
|
title,
|
|
209
222
|
filename: file,
|
|
210
|
-
source:
|
|
223
|
+
source: 'user',
|
|
211
224
|
path: filePath,
|
|
212
225
|
size: stat.size,
|
|
213
226
|
modified: stat.mtime || new Date(),
|
|
@@ -215,6 +228,45 @@ export class ContentManager {
|
|
|
215
228
|
}
|
|
216
229
|
}
|
|
217
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
|
+
}
|
|
218
270
|
return contentList.sort((a, b) => b.modified.getTime() - a.modified.getTime());
|
|
219
271
|
}
|
|
220
272
|
async downloadContext7Doc(libraryId) {
|
|
@@ -385,13 +437,18 @@ export class ContentManager {
|
|
|
385
437
|
const newWords = newContent.split(/\s+/).length;
|
|
386
438
|
return newWords > existingWords * 1.3;
|
|
387
439
|
}
|
|
388
|
-
|
|
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) {
|
|
389
446
|
const hash = createHash('md5').update(content).digest('hex');
|
|
390
|
-
const hashFile =
|
|
447
|
+
const hashFile = this.getHashFilePath(projectId);
|
|
391
448
|
writeFileSync(hashFile, hash);
|
|
392
449
|
}
|
|
393
|
-
needsUpdate(content) {
|
|
394
|
-
const hashFile =
|
|
450
|
+
needsUpdate(content, projectId) {
|
|
451
|
+
const hashFile = this.getHashFilePath(projectId);
|
|
395
452
|
if (!existsSync(hashFile)) {
|
|
396
453
|
return true;
|
|
397
454
|
}
|
|
@@ -405,5 +462,72 @@ export class ContentManager {
|
|
|
405
462
|
rmSync(hashFile);
|
|
406
463
|
}
|
|
407
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
|
+
}
|
|
408
532
|
}
|
|
409
533
|
//# sourceMappingURL=contentManager.js.map
|