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.
Files changed (78) hide show
  1. package/README.md +13 -10
  2. package/dist/cli.d.ts.map +1 -1
  3. package/dist/cli.js +127 -5
  4. package/dist/cli.js.map +1 -1
  5. package/dist/commands/addContent.d.ts.map +1 -1
  6. package/dist/commands/addContent.js +17 -3
  7. package/dist/commands/addContent.js.map +1 -1
  8. package/dist/commands/buildIndex.d.ts.map +1 -1
  9. package/dist/commands/buildIndex.js +2 -3
  10. package/dist/commands/buildIndex.js.map +1 -1
  11. package/dist/commands/downloadContext7.d.ts.map +1 -1
  12. package/dist/commands/downloadContext7.js +14 -7
  13. package/dist/commands/downloadContext7.js.map +1 -1
  14. package/dist/commands/listContent.d.ts.map +1 -1
  15. package/dist/commands/listContent.js +2 -3
  16. package/dist/commands/listContent.js.map +1 -1
  17. package/dist/commands/listContext7.d.ts +5 -0
  18. package/dist/commands/listContext7.d.ts.map +1 -0
  19. package/dist/commands/listContext7.js +26 -0
  20. package/dist/commands/listContext7.js.map +1 -0
  21. package/dist/commands/listSkills.d.ts +5 -0
  22. package/dist/commands/listSkills.d.ts.map +1 -0
  23. package/dist/commands/listSkills.js +34 -0
  24. package/dist/commands/listSkills.js.map +1 -0
  25. package/dist/commands/removeContext7.d.ts +5 -0
  26. package/dist/commands/removeContext7.d.ts.map +1 -0
  27. package/dist/commands/removeContext7.js +54 -0
  28. package/dist/commands/removeContext7.js.map +1 -0
  29. package/dist/commands/removeSkill.d.ts +5 -0
  30. package/dist/commands/removeSkill.d.ts.map +1 -0
  31. package/dist/commands/removeSkill.js +83 -0
  32. package/dist/commands/removeSkill.js.map +1 -0
  33. package/dist/commands/searchContent.d.ts.map +1 -1
  34. package/dist/commands/searchContent.js +5 -4
  35. package/dist/commands/searchContent.js.map +1 -1
  36. package/dist/commands/shared.d.ts +4 -10
  37. package/dist/commands/shared.d.ts.map +1 -1
  38. package/dist/commands/shared.js +3 -17
  39. package/dist/commands/shared.js.map +1 -1
  40. package/dist/core/contentManager.d.ts +25 -1
  41. package/dist/core/contentManager.d.ts.map +1 -1
  42. package/dist/core/contentManager.js +152 -28
  43. package/dist/core/contentManager.js.map +1 -1
  44. package/dist/core/runScript.d.ts.map +1 -1
  45. package/dist/core/runScript.js +5 -2
  46. package/dist/core/runScript.js.map +1 -1
  47. package/dist/core/skillCreator.d.ts.map +1 -1
  48. package/dist/core/skillCreator.js +6 -5
  49. package/dist/core/skillCreator.js.map +1 -1
  50. package/dist/core/templateManager.d.ts +28 -0
  51. package/dist/core/templateManager.d.ts.map +1 -0
  52. package/dist/core/templateManager.js +583 -0
  53. package/dist/core/templateManager.js.map +1 -0
  54. package/dist/search_format/index.d.ts +1 -1
  55. package/dist/search_format/index.d.ts.map +1 -1
  56. package/dist/search_format/listFormatter.d.ts.map +1 -1
  57. package/dist/search_format/listFormatter.js +1 -1
  58. package/dist/search_format/listFormatter.js.map +1 -1
  59. package/dist/utils/claudeCodeDetection.d.ts +27 -0
  60. package/dist/utils/claudeCodeDetection.d.ts.map +1 -0
  61. package/dist/utils/claudeCodeDetection.js +81 -0
  62. package/dist/utils/claudeCodeDetection.js.map +1 -0
  63. package/dist/utils/config.d.ts +9 -0
  64. package/dist/utils/config.d.ts.map +1 -1
  65. package/dist/utils/config.js +7 -0
  66. package/dist/utils/config.js.map +1 -1
  67. package/dist/utils/package.d.ts +14 -0
  68. package/dist/utils/package.d.ts.map +1 -1
  69. package/dist/utils/package.js +14 -0
  70. package/dist/utils/package.js.map +1 -1
  71. package/dist/utils/skillMdManager.d.ts +44 -0
  72. package/dist/utils/skillMdManager.d.ts.map +1 -0
  73. package/dist/utils/skillMdManager.js +157 -0
  74. package/dist/utils/skillMdManager.js.map +1 -0
  75. package/package.json +17 -13
  76. package/templates/SKILL.md +21 -232
  77. package/templates/SKILL.zh-CN.md +37 -3
  78. 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,5 @@
1
+ /**
2
+ * Remove skill file command
3
+ */
4
+ export declare function removeSkill(args: string[]): Promise<void>;
5
+ //# sourceMappingURL=removeSkill.d.ts.map
@@ -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,CAgHjE"}
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 { loadSkillConfig, parseArgs, createSearchEngine } from './shared.js';
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(config, options.mode, false // We'll handle formatting manually for now
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":"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"}
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(config: SkillConfig, searchMode?: 'chroma' | 'fuzzy' | 'auto', useFormatting?: boolean): Promise<import("../index.js").UnifiedSearchEngine>;
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;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,WAAW,CAGxE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,GAAG,GAAE,MAAsB,QAGhF;AAED;;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,MAAM,EAAE,WAAW,EACnB,UAAU,GAAE,QAAQ,GAAG,OAAO,GAAG,MAAe,EAChD,aAAa,GAAE,OAAc,sDAuB9B"}
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"}
@@ -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(config, searchMode = 'auto', useFormatting = true) {
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":"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"}
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 context7Dir;
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,WAAW,CAAQ;IAC3B,OAAO,CAAC,EAAE,CAAY;gBAEV,OAAO,EAAE,qBAAqB;IAOpC,kBAAkB,CACtB,SAAS,EAAE,MAAM,EACjB,KAAK,GAAE,OAAe,GACrB,OAAO,CAAC,oBAAoB,CAAC;IAmD1B,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;IAqB/B,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,EAAE;YA0C1C,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,WAAW;YAaL,cAAc;CAM7B"}
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
- context7Dir;
11
+ context7BaseDir;
12
12
  md;
13
13
  constructor(options) {
14
14
  this.options = options;
15
15
  this.userDir = join(options.referencesDir, 'user');
16
- this.context7Dir = join(options.referencesDir, 'context7');
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(this.context7Dir)) {
37
- const files = readdirSync(this.context7Dir);
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(this.context7Dir, file));
48
+ rmSync(join(projectDir, file));
41
49
  }
42
50
  }
43
51
  }
44
52
  // Ensure directory exists
45
- mkdirSync(this.context7Dir, { recursive: true });
53
+ mkdirSync(projectDir, { recursive: true });
46
54
  // Slice and save
47
- const savedFiles = await this.sliceDocument(content, this.context7Dir);
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.context7Dir),
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
- stats.context7Files = readdirSync(this.context7Dir).filter((f) => f.endsWith('.md')).length;
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
- const dirsToSearch = [];
184
- if (source === 'user' || !source)
185
- dirsToSearch.push(['user', this.userDir]);
186
- if (source === 'context7' || !source)
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(dirPath, file);
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: sourceName,
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
- saveContentHash(content) {
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 = join(this.options.referencesDir, '..', '.context7_hash');
447
+ const hashFile = this.getHashFilePath(projectId);
391
448
  writeFileSync(hashFile, hash);
392
449
  }
393
- needsUpdate(content) {
394
- const hashFile = join(this.options.referencesDir, '..', '.context7_hash');
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