cc-recommender 0.1.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 (184) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/LICENSE +21 -0
  3. package/README.ja.md +201 -0
  4. package/README.md +201 -0
  5. package/data/mcp-servers.json +34777 -0
  6. package/data/plugins.json +1571 -0
  7. package/data/skills.json +3233 -0
  8. package/dist/config/constants.d.ts +18 -0
  9. package/dist/config/constants.d.ts.map +1 -0
  10. package/dist/config/constants.js +34 -0
  11. package/dist/config/constants.js.map +1 -0
  12. package/dist/config/file-mappings.d.ts +13 -0
  13. package/dist/config/file-mappings.d.ts.map +1 -0
  14. package/dist/config/file-mappings.js +70 -0
  15. package/dist/config/file-mappings.js.map +1 -0
  16. package/dist/config/index.d.ts +9 -0
  17. package/dist/config/index.d.ts.map +1 -0
  18. package/dist/config/index.js +9 -0
  19. package/dist/config/index.js.map +1 -0
  20. package/dist/config/scoring-config.d.ts +27 -0
  21. package/dist/config/scoring-config.d.ts.map +1 -0
  22. package/dist/config/scoring-config.js +27 -0
  23. package/dist/config/scoring-config.js.map +1 -0
  24. package/dist/index.d.ts +9 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +25 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/repositories/index.d.ts +7 -0
  29. package/dist/repositories/index.d.ts.map +1 -0
  30. package/dist/repositories/index.js +7 -0
  31. package/dist/repositories/index.js.map +1 -0
  32. package/dist/repositories/recommendation.repository.d.ts +56 -0
  33. package/dist/repositories/recommendation.repository.d.ts.map +1 -0
  34. package/dist/repositories/recommendation.repository.js +142 -0
  35. package/dist/repositories/recommendation.repository.js.map +1 -0
  36. package/dist/repositories/remote-data.repository.d.ts +20 -0
  37. package/dist/repositories/remote-data.repository.d.ts.map +1 -0
  38. package/dist/repositories/remote-data.repository.js +307 -0
  39. package/dist/repositories/remote-data.repository.js.map +1 -0
  40. package/dist/schemas/index.d.ts +7 -0
  41. package/dist/schemas/index.d.ts.map +1 -0
  42. package/dist/schemas/index.js +7 -0
  43. package/dist/schemas/index.js.map +1 -0
  44. package/dist/schemas/tool-schemas.d.ts +55 -0
  45. package/dist/schemas/tool-schemas.d.ts.map +1 -0
  46. package/dist/schemas/tool-schemas.js +36 -0
  47. package/dist/schemas/tool-schemas.js.map +1 -0
  48. package/dist/server/index.d.ts +8 -0
  49. package/dist/server/index.d.ts.map +1 -0
  50. package/dist/server/index.js +8 -0
  51. package/dist/server/index.js.map +1 -0
  52. package/dist/server/mcp-server.d.ts +11 -0
  53. package/dist/server/mcp-server.d.ts.map +1 -0
  54. package/dist/server/mcp-server.js +27 -0
  55. package/dist/server/mcp-server.js.map +1 -0
  56. package/dist/server/tool-registry.d.ts +12 -0
  57. package/dist/server/tool-registry.d.ts.map +1 -0
  58. package/dist/server/tool-registry.js +114 -0
  59. package/dist/server/tool-registry.js.map +1 -0
  60. package/dist/services/analyzer/index.d.ts +7 -0
  61. package/dist/services/analyzer/index.d.ts.map +1 -0
  62. package/dist/services/analyzer/index.js +7 -0
  63. package/dist/services/analyzer/index.js.map +1 -0
  64. package/dist/services/analyzer/parsers/go-mod.parser.d.ts +11 -0
  65. package/dist/services/analyzer/parsers/go-mod.parser.d.ts.map +1 -0
  66. package/dist/services/analyzer/parsers/go-mod.parser.js +34 -0
  67. package/dist/services/analyzer/parsers/go-mod.parser.js.map +1 -0
  68. package/dist/services/analyzer/parsers/index.d.ts +9 -0
  69. package/dist/services/analyzer/parsers/index.d.ts.map +1 -0
  70. package/dist/services/analyzer/parsers/index.js +9 -0
  71. package/dist/services/analyzer/parsers/index.js.map +1 -0
  72. package/dist/services/analyzer/parsers/package-json.parser.d.ts +11 -0
  73. package/dist/services/analyzer/parsers/package-json.parser.d.ts.map +1 -0
  74. package/dist/services/analyzer/parsers/package-json.parser.js +61 -0
  75. package/dist/services/analyzer/parsers/package-json.parser.js.map +1 -0
  76. package/dist/services/analyzer/parsers/requirements-txt.parser.d.ts +11 -0
  77. package/dist/services/analyzer/parsers/requirements-txt.parser.d.ts.map +1 -0
  78. package/dist/services/analyzer/parsers/requirements-txt.parser.js +49 -0
  79. package/dist/services/analyzer/parsers/requirements-txt.parser.js.map +1 -0
  80. package/dist/services/analyzer/project-analyzer.service.d.ts +11 -0
  81. package/dist/services/analyzer/project-analyzer.service.d.ts.map +1 -0
  82. package/dist/services/analyzer/project-analyzer.service.js +101 -0
  83. package/dist/services/analyzer/project-analyzer.service.js.map +1 -0
  84. package/dist/services/analyzer.d.ts +8 -0
  85. package/dist/services/analyzer.d.ts.map +1 -0
  86. package/dist/services/analyzer.js +8 -0
  87. package/dist/services/analyzer.js.map +1 -0
  88. package/dist/services/mcp-fetcher.d.ts +12 -0
  89. package/dist/services/mcp-fetcher.d.ts.map +1 -0
  90. package/dist/services/mcp-fetcher.js +262 -0
  91. package/dist/services/mcp-fetcher.js.map +1 -0
  92. package/dist/services/plugin-fetcher.d.ts +12 -0
  93. package/dist/services/plugin-fetcher.d.ts.map +1 -0
  94. package/dist/services/plugin-fetcher.js +149 -0
  95. package/dist/services/plugin-fetcher.js.map +1 -0
  96. package/dist/services/recommender/formatters.d.ts +22 -0
  97. package/dist/services/recommender/formatters.d.ts.map +1 -0
  98. package/dist/services/recommender/formatters.js +90 -0
  99. package/dist/services/recommender/formatters.js.map +1 -0
  100. package/dist/services/recommender/index.d.ts +10 -0
  101. package/dist/services/recommender/index.d.ts.map +1 -0
  102. package/dist/services/recommender/index.js +10 -0
  103. package/dist/services/recommender/index.js.map +1 -0
  104. package/dist/services/recommender/recommendation.service.d.ts +27 -0
  105. package/dist/services/recommender/recommendation.service.d.ts.map +1 -0
  106. package/dist/services/recommender/recommendation.service.js +34 -0
  107. package/dist/services/recommender/recommendation.service.js.map +1 -0
  108. package/dist/services/recommender/scoring/index.d.ts +7 -0
  109. package/dist/services/recommender/scoring/index.d.ts.map +1 -0
  110. package/dist/services/recommender/scoring/index.js +7 -0
  111. package/dist/services/recommender/scoring/index.js.map +1 -0
  112. package/dist/services/recommender/scoring/scorer.d.ts +27 -0
  113. package/dist/services/recommender/scoring/scorer.d.ts.map +1 -0
  114. package/dist/services/recommender/scoring/scorer.js +100 -0
  115. package/dist/services/recommender/scoring/scorer.js.map +1 -0
  116. package/dist/services/recommender/search.service.d.ts +24 -0
  117. package/dist/services/recommender/search.service.d.ts.map +1 -0
  118. package/dist/services/recommender/search.service.js +57 -0
  119. package/dist/services/recommender/search.service.js.map +1 -0
  120. package/dist/services/recommender.d.ts +11 -0
  121. package/dist/services/recommender.d.ts.map +1 -0
  122. package/dist/services/recommender.js +11 -0
  123. package/dist/services/recommender.js.map +1 -0
  124. package/dist/services/security-scanner.service.d.ts +48 -0
  125. package/dist/services/security-scanner.service.d.ts.map +1 -0
  126. package/dist/services/security-scanner.service.js +98 -0
  127. package/dist/services/security-scanner.service.js.map +1 -0
  128. package/dist/services/skill-fetcher.d.ts +12 -0
  129. package/dist/services/skill-fetcher.d.ts.map +1 -0
  130. package/dist/services/skill-fetcher.js +307 -0
  131. package/dist/services/skill-fetcher.js.map +1 -0
  132. package/dist/tools/handlers/get-skill-details.tool.d.ts +25 -0
  133. package/dist/tools/handlers/get-skill-details.tool.d.ts.map +1 -0
  134. package/dist/tools/handlers/get-skill-details.tool.js +29 -0
  135. package/dist/tools/handlers/get-skill-details.tool.js.map +1 -0
  136. package/dist/tools/handlers/get-stats.tool.d.ts +19 -0
  137. package/dist/tools/handlers/get-stats.tool.d.ts.map +1 -0
  138. package/dist/tools/handlers/get-stats.tool.js +32 -0
  139. package/dist/tools/handlers/get-stats.tool.js.map +1 -0
  140. package/dist/tools/handlers/index.d.ts +11 -0
  141. package/dist/tools/handlers/index.d.ts.map +1 -0
  142. package/dist/tools/handlers/index.js +11 -0
  143. package/dist/tools/handlers/index.js.map +1 -0
  144. package/dist/tools/handlers/list-categories.tool.d.ts +19 -0
  145. package/dist/tools/handlers/list-categories.tool.d.ts.map +1 -0
  146. package/dist/tools/handlers/list-categories.tool.js +33 -0
  147. package/dist/tools/handlers/list-categories.tool.js.map +1 -0
  148. package/dist/tools/handlers/recommend-skills.tool.d.ts +32 -0
  149. package/dist/tools/handlers/recommend-skills.tool.d.ts.map +1 -0
  150. package/dist/tools/handlers/recommend-skills.tool.js +43 -0
  151. package/dist/tools/handlers/recommend-skills.tool.js.map +1 -0
  152. package/dist/tools/handlers/search-skills.tool.d.ts +27 -0
  153. package/dist/tools/handlers/search-skills.tool.d.ts.map +1 -0
  154. package/dist/tools/handlers/search-skills.tool.js +31 -0
  155. package/dist/tools/handlers/search-skills.tool.js.map +1 -0
  156. package/dist/tools/index.d.ts +9 -0
  157. package/dist/tools/index.d.ts.map +1 -0
  158. package/dist/tools/index.js +11 -0
  159. package/dist/tools/index.js.map +1 -0
  160. package/dist/types/domain-types.d.ts +102 -0
  161. package/dist/types/domain-types.d.ts.map +1 -0
  162. package/dist/types/domain-types.js +7 -0
  163. package/dist/types/domain-types.js.map +1 -0
  164. package/dist/types/index.d.ts +9 -0
  165. package/dist/types/index.d.ts.map +1 -0
  166. package/dist/types/index.js +7 -0
  167. package/dist/types/index.js.map +1 -0
  168. package/dist/types/raw-types.d.ts +46 -0
  169. package/dist/types/raw-types.d.ts.map +1 -0
  170. package/dist/types/raw-types.js +7 -0
  171. package/dist/types/raw-types.js.map +1 -0
  172. package/dist/types/service-types.d.ts +28 -0
  173. package/dist/types/service-types.d.ts.map +1 -0
  174. package/dist/types/service-types.js +7 -0
  175. package/dist/types/service-types.js.map +1 -0
  176. package/dist/utils/glob-matcher.d.ts +24 -0
  177. package/dist/utils/glob-matcher.d.ts.map +1 -0
  178. package/dist/utils/glob-matcher.js +34 -0
  179. package/dist/utils/glob-matcher.js.map +1 -0
  180. package/dist/utils/index.d.ts +7 -0
  181. package/dist/utils/index.d.ts.map +1 -0
  182. package/dist/utils/index.js +7 -0
  183. package/dist/utils/index.js.map +1 -0
  184. package/package.json +82 -0
@@ -0,0 +1,18 @@
1
+ /**
2
+ * General Constants
3
+ *
4
+ * Application-wide constants and configuration values
5
+ */
6
+ /** File scanning configuration */
7
+ export declare const FILE_SCAN_CONFIG: {
8
+ readonly maxDepth: 5;
9
+ readonly maxFiles: 1000;
10
+ };
11
+ /** Directories to skip during file scanning */
12
+ export declare const SKIP_DIRECTORIES: readonly ["node_modules", ".git", "dist", "build", ".next", ".nuxt", "coverage", ".cache", ".vscode", ".idea", "__pycache__", "venv", ".venv", "target", "vendor"];
13
+ /** Application metadata */
14
+ export declare const APP_METADATA: {
15
+ readonly name: "cc-recommender";
16
+ readonly version: "0.1.0";
17
+ };
18
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kCAAkC;AAClC,eAAO,MAAM,gBAAgB;;;CAGnB,CAAC;AAEX,+CAA+C;AAC/C,eAAO,MAAM,gBAAgB,oKAgBnB,CAAC;AAEX,2BAA2B;AAC3B,eAAO,MAAM,YAAY;;;CAGf,CAAC"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * General Constants
3
+ *
4
+ * Application-wide constants and configuration values
5
+ */
6
+ /** File scanning configuration */
7
+ export const FILE_SCAN_CONFIG = {
8
+ maxDepth: 5, // Maximum recursion depth for directory scanning
9
+ maxFiles: 1000, // Maximum number of files to scan
10
+ };
11
+ /** Directories to skip during file scanning */
12
+ export const SKIP_DIRECTORIES = [
13
+ "node_modules",
14
+ ".git",
15
+ "dist",
16
+ "build",
17
+ ".next",
18
+ ".nuxt",
19
+ "coverage",
20
+ ".cache",
21
+ ".vscode",
22
+ ".idea",
23
+ "__pycache__",
24
+ "venv",
25
+ ".venv",
26
+ "target", // Rust
27
+ "vendor", // PHP/Go
28
+ ];
29
+ /** Application metadata */
30
+ export const APP_METADATA = {
31
+ name: "cc-recommender",
32
+ version: "0.1.0",
33
+ };
34
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/config/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,QAAQ,EAAE,CAAC,EAAE,iDAAiD;IAC9D,QAAQ,EAAE,IAAI,EAAE,kCAAkC;CAC1C,CAAC;AAEX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,cAAc;IACd,MAAM;IACN,MAAM;IACN,OAAO;IACP,OAAO;IACP,OAAO;IACP,UAAU;IACV,QAAQ;IACR,SAAS;IACT,OAAO;IACP,aAAa;IACb,MAAM;IACN,OAAO;IACP,QAAQ,EAAE,OAAO;IACjB,QAAQ,EAAE,SAAS;CACX,CAAC;AAEX,2BAA2B;AAC3B,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,gBAAgB;IACtB,OAAO,EAAE,OAAO;CACR,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * File Mappings Configuration
3
+ *
4
+ * Mappings between files/extensions and their corresponding languages/frameworks
5
+ */
6
+ /** Common config files and their frameworks/languages */
7
+ export declare const CONFIG_FILE_MAPPINGS: Record<string, {
8
+ framework?: string;
9
+ language?: string;
10
+ }>;
11
+ /** Extension to language mappings */
12
+ export declare const EXTENSION_TO_LANGUAGE: Record<string, string>;
13
+ //# sourceMappingURL=file-mappings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-mappings.d.ts","sourceRoot":"","sources":["../../src/config/file-mappings.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,yDAAyD;AACzD,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAsC1F,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAsBxD,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * File Mappings Configuration
3
+ *
4
+ * Mappings between files/extensions and their corresponding languages/frameworks
5
+ */
6
+ /** Common config files and their frameworks/languages */
7
+ export const CONFIG_FILE_MAPPINGS = {
8
+ "package.json": { language: "javascript" },
9
+ "tsconfig.json": { language: "typescript" },
10
+ "next.config.js": { framework: "nextjs" },
11
+ "next.config.mjs": { framework: "nextjs" },
12
+ "next.config.ts": { framework: "nextjs" },
13
+ "nuxt.config.ts": { framework: "nuxt" },
14
+ "nuxt.config.js": { framework: "nuxt" },
15
+ "vite.config.ts": { framework: "vite" },
16
+ "vite.config.js": { framework: "vite" },
17
+ "svelte.config.js": { framework: "svelte" },
18
+ "angular.json": { framework: "angular" },
19
+ "vue.config.js": { framework: "vue" },
20
+ "remix.config.js": { framework: "remix" },
21
+ "astro.config.mjs": { framework: "astro" },
22
+ "requirements.txt": { language: "python" },
23
+ "pyproject.toml": { language: "python" },
24
+ "setup.py": { language: "python" },
25
+ "Cargo.toml": { language: "rust" },
26
+ "go.mod": { language: "go" },
27
+ Gemfile: { language: "ruby" },
28
+ "composer.json": { language: "php" },
29
+ "pom.xml": { language: "java" },
30
+ "build.gradle": { language: "java" },
31
+ "build.gradle.kts": { language: "kotlin" },
32
+ ".csproj": { language: "csharp" },
33
+ Dockerfile: { framework: "docker" },
34
+ "docker-compose.yml": { framework: "docker" },
35
+ "docker-compose.yaml": { framework: "docker" },
36
+ "kubernetes.yml": { framework: "kubernetes" },
37
+ "k8s.yml": { framework: "kubernetes" },
38
+ ".github/workflows": { framework: "github-actions" },
39
+ "vercel.json": { framework: "vercel" },
40
+ "netlify.toml": { framework: "netlify" },
41
+ "prisma/schema.prisma": { framework: "prisma" },
42
+ "drizzle.config.ts": { framework: "drizzle" },
43
+ "CLAUDE.md": { framework: "claude-code" },
44
+ ".claude": { framework: "claude-code" },
45
+ };
46
+ /** Extension to language mappings */
47
+ export const EXTENSION_TO_LANGUAGE = {
48
+ ".ts": "typescript",
49
+ ".tsx": "typescript",
50
+ ".js": "javascript",
51
+ ".jsx": "javascript",
52
+ ".mjs": "javascript",
53
+ ".cjs": "javascript",
54
+ ".py": "python",
55
+ ".rs": "rust",
56
+ ".go": "go",
57
+ ".rb": "ruby",
58
+ ".php": "php",
59
+ ".java": "java",
60
+ ".kt": "kotlin",
61
+ ".kts": "kotlin",
62
+ ".cs": "csharp",
63
+ ".swift": "swift",
64
+ ".lua": "lua",
65
+ ".c": "c",
66
+ ".cpp": "cpp",
67
+ ".h": "c",
68
+ ".hpp": "cpp",
69
+ };
70
+ //# sourceMappingURL=file-mappings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-mappings.js","sourceRoot":"","sources":["../../src/config/file-mappings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Configuration Exports
3
+ *
4
+ * Central export point for all configuration values
5
+ */
6
+ export { APP_METADATA, FILE_SCAN_CONFIG, SKIP_DIRECTORIES, } from "./constants.js";
7
+ export { CONFIG_FILE_MAPPINGS, EXTENSION_TO_LANGUAGE, } from "./file-mappings.js";
8
+ export { SCORING_MULTIPLIERS, SCORING_THRESHOLDS, SCORING_WEIGHTS, } from "./scoring-config.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Configuration Exports
3
+ *
4
+ * Central export point for all configuration values
5
+ */
6
+ export { APP_METADATA, FILE_SCAN_CONFIG, SKIP_DIRECTORIES, } from "./constants.js";
7
+ export { CONFIG_FILE_MAPPINGS, EXTENSION_TO_LANGUAGE, } from "./file-mappings.js";
8
+ export { SCORING_MULTIPLIERS, SCORING_THRESHOLDS, SCORING_WEIGHTS, } from "./scoring-config.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Scoring Configuration
3
+ *
4
+ * Weights and multipliers for recommendation scoring algorithm
5
+ */
6
+ /** Score weights for different match types */
7
+ export declare const SCORING_WEIGHTS: {
8
+ readonly language: 5;
9
+ readonly framework: 4;
10
+ readonly dependency: 3;
11
+ readonly file: 2;
12
+ readonly keyword: 1;
13
+ };
14
+ /** Score multipliers for quality indicators */
15
+ export declare const SCORING_MULTIPLIERS: {
16
+ readonly official: 1.3;
17
+ readonly highSecurity: 1.1;
18
+ readonly lowSecurity: 0.7;
19
+ };
20
+ /** Scoring thresholds */
21
+ export declare const SCORING_THRESHOLDS: {
22
+ readonly minScore: 1;
23
+ readonly maxResults: 20;
24
+ readonly highSecurityThreshold: 80;
25
+ readonly lowSecurityThreshold: 50;
26
+ };
27
+ //# sourceMappingURL=scoring-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring-config.d.ts","sourceRoot":"","sources":["../../src/config/scoring-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8CAA8C;AAC9C,eAAO,MAAM,eAAe;;;;;;CAMlB,CAAC;AAEX,+CAA+C;AAC/C,eAAO,MAAM,mBAAmB;;;;CAItB,CAAC;AAEX,yBAAyB;AACzB,eAAO,MAAM,kBAAkB;;;;;CAKrB,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Scoring Configuration
3
+ *
4
+ * Weights and multipliers for recommendation scoring algorithm
5
+ */
6
+ /** Score weights for different match types */
7
+ export const SCORING_WEIGHTS = {
8
+ language: 5, // Language match is very important
9
+ framework: 4, // Framework match is important
10
+ dependency: 3, // Direct dependency match
11
+ file: 2, // File pattern match
12
+ keyword: 1, // Keyword/tag match
13
+ };
14
+ /** Score multipliers for quality indicators */
15
+ export const SCORING_MULTIPLIERS = {
16
+ official: 1.3, // Official items get a boost
17
+ highSecurity: 1.1, // Security score > 80
18
+ lowSecurity: 0.7, // Security score < 50
19
+ };
20
+ /** Scoring thresholds */
21
+ export const SCORING_THRESHOLDS = {
22
+ minScore: 1,
23
+ maxResults: 20,
24
+ highSecurityThreshold: 80,
25
+ lowSecurityThreshold: 50,
26
+ };
27
+ //# sourceMappingURL=scoring-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scoring-config.js","sourceRoot":"","sources":["../../src/config/scoring-config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,QAAQ,EAAE,CAAC,EAAE,mCAAmC;IAChD,SAAS,EAAE,CAAC,EAAE,+BAA+B;IAC7C,UAAU,EAAE,CAAC,EAAE,0BAA0B;IACzC,IAAI,EAAE,CAAC,EAAE,qBAAqB;IAC9B,OAAO,EAAE,CAAC,EAAE,oBAAoB;CACxB,CAAC;AAEX,+CAA+C;AAC/C,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,QAAQ,EAAE,GAAG,EAAE,6BAA6B;IAC5C,YAAY,EAAE,GAAG,EAAE,sBAAsB;IACzC,WAAW,EAAE,GAAG,EAAE,sBAAsB;CAChC,CAAC;AAEX,yBAAyB;AACzB,MAAM,CAAC,MAAM,kBAAkB,GAAG;IAChC,QAAQ,EAAE,CAAC;IACX,UAAU,EAAE,EAAE;IACd,qBAAqB,EAAE,EAAE;IACzB,oBAAoB,EAAE,EAAE;CAChB,CAAC"}
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cc-recommender MCP Server
4
+ *
5
+ * Recommends Claude Code skills, plugins, and MCP servers
6
+ * based on project analysis
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
package/dist/index.js ADDED
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * cc-recommender MCP Server
4
+ *
5
+ * Recommends Claude Code skills, plugins, and MCP servers
6
+ * based on project analysis
7
+ */
8
+ import { recommendationRepository } from "./repositories/recommendation.repository.js";
9
+ import { createMcpServer } from "./server/mcp-server.js";
10
+ /**
11
+ * Main entry point
12
+ */
13
+ async function main() {
14
+ // Load database
15
+ const database = await recommendationRepository.load();
16
+ console.error(`Loaded ${database.items.length} recommendations`);
17
+ // Create and start MCP server
18
+ await createMcpServer(database);
19
+ }
20
+ // Run
21
+ main().catch((error) => {
22
+ console.error("Fatal error:", error);
23
+ process.exit(1);
24
+ });
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,6CAA6C,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAEzD;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,gBAAgB;IAChB,MAAM,QAAQ,GAAG,MAAM,wBAAwB,CAAC,IAAI,EAAE,CAAC;IACvD,OAAO,CAAC,KAAK,CAAC,UAAU,QAAQ,CAAC,KAAK,CAAC,MAAM,kBAAkB,CAAC,CAAC;IAEjE,8BAA8B;IAC9B,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAC;AAClC,CAAC;AAED,MAAM;AACN,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Repository Exports
3
+ *
4
+ * Central export point for all repository classes
5
+ */
6
+ export { RecommendationRepository, recommendationRepository, } from "./recommendation.repository.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Repository Exports
3
+ *
4
+ * Central export point for all repository classes
5
+ */
6
+ export { RecommendationRepository, recommendationRepository, } from "./recommendation.repository.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/repositories/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,wBAAwB,EACxB,wBAAwB,GACzB,MAAM,gCAAgC,CAAC"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Recommendation Repository
3
+ *
4
+ * Handles data access for recommendations database
5
+ */
6
+ import type { RecommendationDatabase } from "../types/domain-types.js";
7
+ /**
8
+ * Repository for managing recommendation data
9
+ */
10
+ export declare class RecommendationRepository {
11
+ private pluginsPath;
12
+ private mcpServersPath;
13
+ private skillsPath;
14
+ private cache;
15
+ private cacheTimestamp;
16
+ private readonly CACHE_TTL;
17
+ constructor(dataDir?: string);
18
+ /**
19
+ * Load the recommendations database
20
+ *
21
+ * Strategy:
22
+ * 1. Return cached database if available and not expired
23
+ * 2. Try to fetch from remote (GitHub) if enabled
24
+ * 3. Fallback to bundled data (load 3 files in parallel)
25
+ */
26
+ load(): Promise<RecommendationDatabase>;
27
+ /**
28
+ * Load plugins from bundled data
29
+ */
30
+ private loadPlugins;
31
+ /**
32
+ * Load MCP servers from bundled data
33
+ */
34
+ private loadMCPServers;
35
+ /**
36
+ * Load skills from bundled data
37
+ */
38
+ private loadSkills;
39
+ /**
40
+ * Reload the database (clears cache)
41
+ */
42
+ reload(): Promise<RecommendationDatabase>;
43
+ /**
44
+ * Get the current cached database without loading
45
+ */
46
+ getCached(): RecommendationDatabase | null;
47
+ /**
48
+ * Clear the cache
49
+ */
50
+ clearCache(): void;
51
+ }
52
+ /**
53
+ * Default repository instance
54
+ */
55
+ export declare const recommendationRepository: RecommendationRepository;
56
+ //# sourceMappingURL=recommendation.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendation.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/recommendation.repository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAGV,sBAAsB,EAEvB,MAAM,0BAA0B,CAAC;AAGlC;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,cAAc,CAAa;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;gBAEzB,OAAO,CAAC,EAAE,MAAM;IAgB5B;;;;;;;OAOG;IACG,IAAI,IAAI,OAAO,CAAC,sBAAsB,CAAC;IA+D7C;;OAEG;YACW,WAAW;IAKzB;;OAEG;YACW,cAAc;IAK5B;;OAEG;YACW,UAAU;IAKxB;;OAEG;IACG,MAAM,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAK/C;;OAEG;IACH,SAAS,IAAI,sBAAsB,GAAG,IAAI;IAI1C;;OAEG;IACH,UAAU,IAAI,IAAI;CAGnB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,0BAAiC,CAAC"}
@@ -0,0 +1,142 @@
1
+ /**
2
+ * Recommendation Repository
3
+ *
4
+ * Handles data access for recommendations database
5
+ */
6
+ import { readFile } from "node:fs/promises";
7
+ import { dirname, join } from "node:path";
8
+ import { fileURLToPath } from "node:url";
9
+ import { fetchRemoteData, isRemoteDataEnabled } from "./remote-data.repository.js";
10
+ /**
11
+ * Repository for managing recommendation data
12
+ */
13
+ export class RecommendationRepository {
14
+ pluginsPath;
15
+ mcpServersPath;
16
+ skillsPath;
17
+ cache = null;
18
+ cacheTimestamp = 0;
19
+ CACHE_TTL = 3600000; // 1 hour in milliseconds
20
+ constructor(dataDir) {
21
+ if (dataDir) {
22
+ this.pluginsPath = join(dataDir, "plugins.json");
23
+ this.mcpServersPath = join(dataDir, "mcp-servers.json");
24
+ this.skillsPath = join(dataDir, "skills.json");
25
+ }
26
+ else {
27
+ // Default paths: ../data/*.json relative to this file
28
+ const __filename = fileURLToPath(import.meta.url);
29
+ const __dirname = dirname(__filename);
30
+ const defaultDataDir = join(__dirname, "..", "..", "data");
31
+ this.pluginsPath = join(defaultDataDir, "plugins.json");
32
+ this.mcpServersPath = join(defaultDataDir, "mcp-servers.json");
33
+ this.skillsPath = join(defaultDataDir, "skills.json");
34
+ }
35
+ }
36
+ /**
37
+ * Load the recommendations database
38
+ *
39
+ * Strategy:
40
+ * 1. Return cached database if available and not expired
41
+ * 2. Try to fetch from remote (GitHub) if enabled
42
+ * 3. Fallback to bundled data (load 3 files in parallel)
43
+ */
44
+ async load() {
45
+ const now = Date.now();
46
+ // Return cached database if available and not expired
47
+ if (this.cache && now - this.cacheTimestamp < this.CACHE_TTL) {
48
+ return this.cache;
49
+ }
50
+ // Cache expired or not available - clear it
51
+ if (this.cache) {
52
+ console.error("🔄 Cache expired, refreshing data...");
53
+ this.cache = null;
54
+ }
55
+ // Try remote data first (if enabled)
56
+ if (isRemoteDataEnabled()) {
57
+ const remoteData = await fetchRemoteData();
58
+ if (remoteData) {
59
+ this.cache = remoteData;
60
+ this.cacheTimestamp = Date.now();
61
+ return remoteData;
62
+ }
63
+ console.error("⚠️ Falling back to bundled data");
64
+ }
65
+ // Fallback to bundled data (load 3 files in parallel)
66
+ try {
67
+ const [pluginsDb, mcpServersDb, skillsDb] = await Promise.all([
68
+ this.loadPlugins(),
69
+ this.loadMCPServers(),
70
+ this.loadSkills(),
71
+ ]);
72
+ // Merge databases
73
+ const database = {
74
+ version: pluginsDb.version,
75
+ lastUpdated: pluginsDb.lastUpdated,
76
+ items: [...pluginsDb.items, ...mcpServersDb.items, ...skillsDb.items],
77
+ };
78
+ this.cache = database;
79
+ this.cacheTimestamp = Date.now();
80
+ console.error(`📦 Loaded ${database.items.length} recommendations from bundled data (${database.version})`);
81
+ console.error(` - Plugins: ${pluginsDb.items.length}, MCP: ${mcpServersDb.items.length}, Skills: ${skillsDb.items.length}`);
82
+ return database;
83
+ }
84
+ catch (error) {
85
+ console.error("Failed to load database:", error);
86
+ // Return empty database
87
+ const emptyDatabase = {
88
+ version: "0.0.0",
89
+ lastUpdated: new Date().toISOString(),
90
+ items: [],
91
+ };
92
+ this.cache = emptyDatabase;
93
+ this.cacheTimestamp = Date.now();
94
+ return emptyDatabase;
95
+ }
96
+ }
97
+ /**
98
+ * Load plugins from bundled data
99
+ */
100
+ async loadPlugins() {
101
+ const content = await readFile(this.pluginsPath, "utf-8");
102
+ return JSON.parse(content);
103
+ }
104
+ /**
105
+ * Load MCP servers from bundled data
106
+ */
107
+ async loadMCPServers() {
108
+ const content = await readFile(this.mcpServersPath, "utf-8");
109
+ return JSON.parse(content);
110
+ }
111
+ /**
112
+ * Load skills from bundled data
113
+ */
114
+ async loadSkills() {
115
+ const content = await readFile(this.skillsPath, "utf-8");
116
+ return JSON.parse(content);
117
+ }
118
+ /**
119
+ * Reload the database (clears cache)
120
+ */
121
+ async reload() {
122
+ this.cache = null;
123
+ return this.load();
124
+ }
125
+ /**
126
+ * Get the current cached database without loading
127
+ */
128
+ getCached() {
129
+ return this.cache;
130
+ }
131
+ /**
132
+ * Clear the cache
133
+ */
134
+ clearCache() {
135
+ this.cache = null;
136
+ }
137
+ }
138
+ /**
139
+ * Default repository instance
140
+ */
141
+ export const recommendationRepository = new RecommendationRepository();
142
+ //# sourceMappingURL=recommendation.repository.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recommendation.repository.js","sourceRoot":"","sources":["../../src/repositories/recommendation.repository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Remote Data Repository
3
+ *
4
+ * Fetches latest recommendations data from CDN/GitHub
5
+ */
6
+ import type { RecommendationDatabase } from "../types/index.js";
7
+ /**
8
+ * リモートからレコメンデーションデータを取得
9
+ *
10
+ * @param remoteUrl - リモートデータのURL(省略時はデフォルト)
11
+ * @returns データベース or null(失敗時)
12
+ */
13
+ export declare function fetchRemoteData(remoteUrl?: string): Promise<RecommendationDatabase | null>;
14
+ /**
15
+ * リモートデータ取得が有効かチェック
16
+ *
17
+ * @returns 有効ならtrue
18
+ */
19
+ export declare function isRemoteDataEnabled(): boolean;
20
+ //# sourceMappingURL=remote-data.repository.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remote-data.repository.d.ts","sourceRoot":"","sources":["../../src/repositories/remote-data.repository.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAGV,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAyB3B;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CA2ChG;AAiSD;;;;GAIG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAG7C"}