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,7 @@
1
+ /**
2
+ * Analyzer Service Exports
3
+ *
4
+ * Central export point for project analysis functionality
5
+ */
6
+ export { analyzeProject } from "./project-analyzer.service.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/services/analyzer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Analyzer Service Exports
3
+ *
4
+ * Central export point for project analysis functionality
5
+ */
6
+ export { analyzeProject } from "./project-analyzer.service.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/services/analyzer/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Go.mod Parser
3
+ *
4
+ * Parses Go go.mod files for dependencies
5
+ */
6
+ import type { ProjectInfo } from "../../../types/service-types.js";
7
+ /**
8
+ * Parse go.mod and extract dependencies
9
+ */
10
+ export declare function parseGoMod(projectPath: string, info: ProjectInfo): Promise<void>;
11
+ //# sourceMappingURL=go-mod.parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-mod.parser.d.ts","sourceRoot":"","sources":["../../../../src/services/analyzer/parsers/go-mod.parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAEnE;;GAEG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAuBtF"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Go.mod Parser
3
+ *
4
+ * Parses Go go.mod files for dependencies
5
+ */
6
+ import { readFile } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ /**
9
+ * Parse go.mod and extract dependencies
10
+ */
11
+ export async function parseGoMod(projectPath, info) {
12
+ try {
13
+ const goModPath = join(projectPath, "go.mod");
14
+ const content = await readFile(goModPath, "utf-8");
15
+ // Extract require statements
16
+ const requireMatch = content.match(/require\s*\(([\s\S]*?)\)/);
17
+ if (requireMatch) {
18
+ const deps = requireMatch[1]
19
+ .split("\n")
20
+ .map((line) => line.trim())
21
+ .filter((line) => line && !line.startsWith("//"))
22
+ .map((line) => {
23
+ const match = line.match(/^([^\s]+)/);
24
+ return match ? match[1] : null;
25
+ })
26
+ .filter((dep) => dep !== null);
27
+ info.dependencies.push(...deps);
28
+ }
29
+ }
30
+ catch {
31
+ // No go.mod
32
+ }
33
+ }
34
+ //# sourceMappingURL=go-mod.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"go-mod.parser.js","sourceRoot":"","sources":["../../../../src/services/analyzer/parsers/go-mod.parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB,EAAE,IAAiB;IACrE,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAEnD,6BAA6B;QAC7B,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QAC/D,IAAI,YAAY,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;iBACzB,KAAK,CAAC,IAAI,CAAC;iBACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;iBAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;iBAChD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBACZ,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;gBACtC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACjC,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;YAEhD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parser Exports
3
+ *
4
+ * Central export point for all dependency parsers
5
+ */
6
+ export { parseGoMod } from "./go-mod.parser.js";
7
+ export { parsePackageJson } from "./package-json.parser.js";
8
+ export { parseRequirementsTxt } from "./requirements-txt.parser.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/services/analyzer/parsers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Parser Exports
3
+ *
4
+ * Central export point for all dependency parsers
5
+ */
6
+ export { parseGoMod } from "./go-mod.parser.js";
7
+ export { parsePackageJson } from "./package-json.parser.js";
8
+ export { parseRequirementsTxt } from "./requirements-txt.parser.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/services/analyzer/parsers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Package.json Parser
3
+ *
4
+ * Parses Node.js package.json files for dependencies and frameworks
5
+ */
6
+ import type { ProjectInfo } from "../../../types/service-types.js";
7
+ /**
8
+ * Parse package.json and extract dependencies and frameworks
9
+ */
10
+ export declare function parsePackageJson(projectPath: string, info: ProjectInfo): Promise<void>;
11
+ //# sourceMappingURL=package-json.parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.parser.d.ts","sourceRoot":"","sources":["../../../../src/services/analyzer/parsers/package-json.parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AA0BnE;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA6B5F"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Package.json Parser
3
+ *
4
+ * Parses Node.js package.json files for dependencies and frameworks
5
+ */
6
+ import { readFile } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ /** Framework detection mappings for Node.js dependencies */
9
+ const FRAMEWORK_MAPPINGS = {
10
+ next: "nextjs",
11
+ react: "react",
12
+ vue: "vue",
13
+ "@angular/core": "angular",
14
+ svelte: "svelte",
15
+ "@remix-run/react": "remix",
16
+ astro: "astro",
17
+ express: "express",
18
+ fastify: "fastify",
19
+ koa: "koa",
20
+ nestjs: "nestjs",
21
+ "@nestjs/core": "nestjs",
22
+ prisma: "prisma",
23
+ "@prisma/client": "prisma",
24
+ "drizzle-orm": "drizzle",
25
+ typeorm: "typeorm",
26
+ mongoose: "mongoose",
27
+ tailwindcss: "tailwind",
28
+ "@supabase/supabase-js": "supabase",
29
+ firebase: "firebase",
30
+ };
31
+ /**
32
+ * Parse package.json and extract dependencies and frameworks
33
+ */
34
+ export async function parsePackageJson(projectPath, info) {
35
+ try {
36
+ const packageJsonPath = join(projectPath, "package.json");
37
+ const content = await readFile(packageJsonPath, "utf-8");
38
+ const pkg = JSON.parse(content);
39
+ // Add name/description
40
+ if (pkg.description) {
41
+ info.description = pkg.description;
42
+ }
43
+ // Collect dependencies
44
+ const allDeps = [
45
+ ...Object.keys(pkg.dependencies || {}),
46
+ ...Object.keys(pkg.devDependencies || {}),
47
+ ...Object.keys(pkg.peerDependencies || {}),
48
+ ];
49
+ info.dependencies.push(...allDeps);
50
+ // Detect frameworks from dependencies
51
+ for (const [dep, framework] of Object.entries(FRAMEWORK_MAPPINGS)) {
52
+ if (allDeps.includes(dep)) {
53
+ info.frameworks.push(framework);
54
+ }
55
+ }
56
+ }
57
+ catch {
58
+ // No package.json or parse error
59
+ }
60
+ }
61
+ //# sourceMappingURL=package-json.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"package-json.parser.js","sourceRoot":"","sources":["../../../../src/services/analyzer/parsers/package-json.parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,4DAA4D;AAC5D,MAAM,kBAAkB,GAA2B;IACjD,IAAI,EAAE,QAAQ;IACd,KAAK,EAAE,OAAO;IACd,GAAG,EAAE,KAAK;IACV,eAAe,EAAE,SAAS;IAC1B,MAAM,EAAE,QAAQ;IAChB,kBAAkB,EAAE,OAAO;IAC3B,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,GAAG,EAAE,KAAK;IACV,MAAM,EAAE,QAAQ;IAChB,cAAc,EAAE,QAAQ;IACxB,MAAM,EAAE,QAAQ;IAChB,gBAAgB,EAAE,QAAQ;IAC1B,aAAa,EAAE,SAAS;IACxB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,UAAU;IACvB,uBAAuB,EAAE,UAAU;IACnC,QAAQ,EAAE,UAAU;CACrB,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,IAAiB;IAC3E,IAAI,CAAC;QACH,MAAM,eAAe,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QAC1D,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;QACzD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAEhC,uBAAuB;QACvB,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC;YACpB,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC,WAAW,CAAC;QACrC,CAAC;QAED,uBAAuB;QACvB,MAAM,OAAO,GAAG;YACd,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;YACtC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;YACzC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB,IAAI,EAAE,CAAC;SAC3C,CAAC;QAEF,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAEnC,sCAAsC;QACtC,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAClE,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,iCAAiC;IACnC,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Requirements.txt Parser
3
+ *
4
+ * Parses Python requirements.txt files for dependencies and frameworks
5
+ */
6
+ import type { ProjectInfo } from "../../../types/service-types.js";
7
+ /**
8
+ * Parse requirements.txt and extract dependencies and frameworks
9
+ */
10
+ export declare function parseRequirementsTxt(projectPath: string, info: ProjectInfo): Promise<void>;
11
+ //# sourceMappingURL=requirements-txt.parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements-txt.parser.d.ts","sourceRoot":"","sources":["../../../../src/services/analyzer/parsers/requirements-txt.parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAenE;;GAEG;AACH,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BhG"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Requirements.txt Parser
3
+ *
4
+ * Parses Python requirements.txt files for dependencies and frameworks
5
+ */
6
+ import { readFile } from "node:fs/promises";
7
+ import { join } from "node:path";
8
+ /** Framework detection mappings for Python dependencies */
9
+ const FRAMEWORK_MAPPINGS = {
10
+ django: "django",
11
+ flask: "flask",
12
+ fastapi: "fastapi",
13
+ pytorch: "pytorch",
14
+ torch: "pytorch",
15
+ tensorflow: "tensorflow",
16
+ pandas: "pandas",
17
+ numpy: "numpy",
18
+ "scikit-learn": "sklearn",
19
+ };
20
+ /**
21
+ * Parse requirements.txt and extract dependencies and frameworks
22
+ */
23
+ export async function parseRequirementsTxt(projectPath, info) {
24
+ try {
25
+ const reqPath = join(projectPath, "requirements.txt");
26
+ const content = await readFile(reqPath, "utf-8");
27
+ const deps = content
28
+ .split("\n")
29
+ .map((line) => line.trim())
30
+ .filter((line) => line && !line.startsWith("#"))
31
+ .map((line) => {
32
+ // Remove version specifiers
33
+ const match = line.match(/^([a-zA-Z0-9_-]+)/);
34
+ return match ? match[1].toLowerCase() : null;
35
+ })
36
+ .filter((dep) => dep !== null);
37
+ info.dependencies.push(...deps);
38
+ // Detect Python frameworks
39
+ for (const [dep, framework] of Object.entries(FRAMEWORK_MAPPINGS)) {
40
+ if (deps.includes(dep)) {
41
+ info.frameworks.push(framework);
42
+ }
43
+ }
44
+ }
45
+ catch {
46
+ // No requirements.txt
47
+ }
48
+ }
49
+ //# sourceMappingURL=requirements-txt.parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements-txt.parser.js","sourceRoot":"","sources":["../../../../src/services/analyzer/parsers/requirements-txt.parser.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,2DAA2D;AAC3D,MAAM,kBAAkB,GAA2B;IACjD,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,KAAK,EAAE,SAAS;IAChB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,OAAO;IACd,cAAc,EAAE,SAAS;CAC1B,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB,EAAE,IAAiB;IAC/E,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEjD,MAAM,IAAI,GAAG,OAAO;aACjB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC1B,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;aAC/C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,4BAA4B;YAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;YAC9C,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,CAAC,CAAC;aACD,MAAM,CAAC,CAAC,GAAG,EAAiB,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC;QAEhD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;QAEhC,2BAA2B;QAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,EAAE,CAAC;YAClE,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClC,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sBAAsB;IACxB,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Project Analyzer Service
3
+ *
4
+ * Main service for analyzing project structure and extracting information
5
+ */
6
+ import type { ProjectInfo } from "../../types/service-types.js";
7
+ /**
8
+ * Analyze a project directory and extract information
9
+ */
10
+ export declare function analyzeProject(projectPath: string): Promise<ProjectInfo>;
11
+ //# sourceMappingURL=project-analyzer.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-analyzer.service.d.ts","sourceRoot":"","sources":["../../../src/services/analyzer/project-analyzer.service.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAKhE;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA2B9E"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Project Analyzer Service
3
+ *
4
+ * Main service for analyzing project structure and extracting information
5
+ */
6
+ import { readdir } from "node:fs/promises";
7
+ import { extname, join } from "node:path";
8
+ import { FILE_SCAN_CONFIG, SKIP_DIRECTORIES } from "../../config/constants.js";
9
+ import { CONFIG_FILE_MAPPINGS, EXTENSION_TO_LANGUAGE } from "../../config/file-mappings.js";
10
+ import { parseGoMod } from "./parsers/go-mod.parser.js";
11
+ import { parsePackageJson } from "./parsers/package-json.parser.js";
12
+ import { parseRequirementsTxt } from "./parsers/requirements-txt.parser.js";
13
+ /**
14
+ * Analyze a project directory and extract information
15
+ */
16
+ export async function analyzeProject(projectPath) {
17
+ const info = {
18
+ path: projectPath,
19
+ languages: [],
20
+ dependencies: [],
21
+ files: [],
22
+ frameworks: [],
23
+ };
24
+ try {
25
+ // Scan files
26
+ await scanDirectory(projectPath, info, 0);
27
+ // Parse dependency files
28
+ await parsePackageJson(projectPath, info);
29
+ await parseRequirementsTxt(projectPath, info);
30
+ await parseGoMod(projectPath, info);
31
+ // Deduplicate
32
+ info.languages = [...new Set(info.languages)];
33
+ info.dependencies = [...new Set(info.dependencies)];
34
+ info.frameworks = [...new Set(info.frameworks)];
35
+ }
36
+ catch (error) {
37
+ console.error("Error analyzing project:", error);
38
+ }
39
+ return info;
40
+ }
41
+ /**
42
+ * Recursively scan directory for files and detect languages/frameworks
43
+ */
44
+ async function scanDirectory(dirPath, info, depth) {
45
+ // Limit recursion depth
46
+ if (depth > FILE_SCAN_CONFIG.maxDepth)
47
+ return;
48
+ try {
49
+ const entries = await readdir(dirPath, { withFileTypes: true });
50
+ for (const entry of entries) {
51
+ const fullPath = join(dirPath, entry.name);
52
+ const relativePath = fullPath.replace(`${info.path}/`, "");
53
+ // Skip common ignored directories
54
+ if (shouldSkipDirectory(entry.name))
55
+ continue;
56
+ if (entry.isDirectory()) {
57
+ // Check for config directories
58
+ const mapping = CONFIG_FILE_MAPPINGS[entry.name];
59
+ if (mapping) {
60
+ if (mapping.framework)
61
+ info.frameworks.push(mapping.framework);
62
+ if (mapping.language)
63
+ info.languages.push(mapping.language);
64
+ }
65
+ // Recurse
66
+ await scanDirectory(fullPath, info, depth + 1);
67
+ }
68
+ else {
69
+ // Add file to list (limit to max files)
70
+ if (info.files.length < FILE_SCAN_CONFIG.maxFiles) {
71
+ info.files.push(relativePath);
72
+ }
73
+ // Check config files
74
+ const configKey = Object.keys(CONFIG_FILE_MAPPINGS).find((key) => relativePath === key || relativePath.endsWith(`/${key}`));
75
+ if (configKey) {
76
+ const mapping = CONFIG_FILE_MAPPINGS[configKey];
77
+ if (mapping.framework)
78
+ info.frameworks.push(mapping.framework);
79
+ if (mapping.language)
80
+ info.languages.push(mapping.language);
81
+ }
82
+ // Detect language from extension
83
+ const ext = extname(entry.name).toLowerCase();
84
+ const lang = EXTENSION_TO_LANGUAGE[ext];
85
+ if (lang) {
86
+ info.languages.push(lang);
87
+ }
88
+ }
89
+ }
90
+ }
91
+ catch {
92
+ // Directory might not be readable
93
+ }
94
+ }
95
+ /**
96
+ * Check if directory should be skipped during scanning
97
+ */
98
+ function shouldSkipDirectory(name) {
99
+ return SKIP_DIRECTORIES.includes(name) || name.startsWith(".");
100
+ }
101
+ //# sourceMappingURL=project-analyzer.service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-analyzer.service.js","sourceRoot":"","sources":["../../../src/services/analyzer/project-analyzer.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Project Analyzer (Legacy Export)
3
+ *
4
+ * Re-exports from the new analyzer directory structure
5
+ * This file maintains backwards compatibility
6
+ */
7
+ export { analyzeProject } from "./analyzer/project-analyzer.service.js";
8
+ //# sourceMappingURL=analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/services/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Project Analyzer (Legacy Export)
3
+ *
4
+ * Re-exports from the new analyzer directory structure
5
+ * This file maintains backwards compatibility
6
+ */
7
+ export { analyzeProject } from "./analyzer/project-analyzer.service.js";
8
+ //# sourceMappingURL=analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/services/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * MCP Server Fetcher
3
+ *
4
+ * Fetches MCP servers from awesome-mcp-servers repository
5
+ * Source: https://github.com/punkpeye/awesome-mcp-servers
6
+ */
7
+ import type { Recommendation } from "../types/domain-types.js";
8
+ /**
9
+ * Fetch MCP servers from awesome-mcp-servers
10
+ */
11
+ export declare function fetchMCPServers(): Promise<Recommendation[]>;
12
+ //# sourceMappingURL=mcp-fetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-fetcher.d.ts","sourceRoot":"","sources":["../../src/services/mcp-fetcher.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AA+D/D;;GAEG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CAqBjE"}