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 @@
1
+ {"version":3,"file":"search-skills.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/search-skills.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAE1F,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;QAC7B,WAAW,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,GAAG,EAAE,MAAM,CAAC;QACZ,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,CAAC;QACnC,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;IACH,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,iBAAiB,EACxB,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,kBAAkB,CAAC,CAqB7B"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Search Skills Tool
3
+ *
4
+ * Searches for skills, plugins, and MCP servers by keyword
5
+ */
6
+ import { search } from "../../services/recommender/search.service.js";
7
+ /**
8
+ * Search for skills by keyword
9
+ */
10
+ export async function searchSkills(input, database) {
11
+ const results = search(database, input.query, {
12
+ maxResults: input.max_results,
13
+ types: input.types,
14
+ });
15
+ return {
16
+ query: input.query,
17
+ results: results.map((r) => ({
18
+ name: r.item.name,
19
+ type: r.item.type,
20
+ description: r.item.description,
21
+ score: r.score,
22
+ reasons: r.reasons,
23
+ url: r.item.url,
24
+ install: r.item.install,
25
+ isOfficial: r.item.metrics.isOfficial,
26
+ category: r.item.category,
27
+ })),
28
+ totalFound: results.length,
29
+ };
30
+ }
31
+ //# sourceMappingURL=search-skills.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-skills.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/search-skills.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,8CAA8C,CAAC;AAmBtE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAwB,EACxB,QAAgC;IAEhC,MAAM,OAAO,GAAG,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,KAAK,EAAE;QAC5C,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3B,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;YACjB,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI;YACjB,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,WAAW;YAC/B,KAAK,EAAE,CAAC,CAAC,KAAK;YACd,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG;YACf,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO;YACvB,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU;YACrC,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;SAC1B,CAAC,CAAC;QACH,UAAU,EAAE,OAAO,CAAC,MAAM;KAC3B,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * MCP Tools (Legacy Export)
3
+ *
4
+ * Re-exports from the new tools directory structure
5
+ * This file maintains backwards compatibility
6
+ */
7
+ export { type GetSkillDetailsInput, getSkillDetailsSchema, type RecommendSkillsInput, recommendSkillsSchema, type SearchSkillsInput, searchSkillsSchema, } from "../schemas/index.js";
8
+ export { type GetSkillDetailsResult, type GetStatsResult, getSkillDetails, getStats, type ListCategoriesResult, listCategories, type RecommendSkillsResult, recommendSkills, type SearchSkillsResult, searchSkills, } from "./handlers/index.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,KAAK,oBAAoB,EACzB,qBAAqB,EACrB,KAAK,iBAAiB,EACtB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,eAAe,EACf,QAAQ,EACR,KAAK,oBAAoB,EACzB,cAAc,EACd,KAAK,qBAAqB,EAC1B,eAAe,EACf,KAAK,kBAAkB,EACvB,YAAY,GACb,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MCP Tools (Legacy Export)
3
+ *
4
+ * Re-exports from the new tools directory structure
5
+ * This file maintains backwards compatibility
6
+ */
7
+ // Export schemas
8
+ export { getSkillDetailsSchema, recommendSkillsSchema, searchSkillsSchema, } from "../schemas/index.js";
9
+ // Export tool handlers and result types
10
+ export { getSkillDetails, getStats, listCategories, recommendSkills, searchSkills, } from "./handlers/index.js";
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,iBAAiB;AACjB,OAAO,EAEL,qBAAqB,EAErB,qBAAqB,EAErB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,wCAAwC;AACxC,OAAO,EAGL,eAAe,EACf,QAAQ,EAER,cAAc,EAEd,eAAe,EAEf,YAAY,GACb,MAAM,qBAAqB,CAAC"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Domain Types
3
+ *
4
+ * Core business domain types for recommendations
5
+ */
6
+ /** レコメンドアイテムのタイプ */
7
+ export type RecommendationType = "plugin" | "mcp" | "skill" | "workflow" | "hook" | "command" | "agent";
8
+ /** データソースの種類 */
9
+ export type SourceType = "official" | "community" | "awesome-list";
10
+ /** インストール方法 */
11
+ export type InstallMethod = "plugin" | "mcp-add" | "manual";
12
+ /** 作者情報 */
13
+ export type Author = {
14
+ name: string;
15
+ url?: string;
16
+ email?: string;
17
+ };
18
+ /** 検出ルール */
19
+ export type DetectionRules = {
20
+ /** package.json の依存関係 */
21
+ dependencies?: string[];
22
+ /** ファイルパターン (glob) */
23
+ files?: string[];
24
+ /** 使用言語 */
25
+ languages?: string[];
26
+ /** フレームワーク */
27
+ frameworks?: string[];
28
+ /** 説明文キーワード */
29
+ keywords?: string[];
30
+ };
31
+ /** 品質指標 */
32
+ export type Metrics = {
33
+ /** データソース */
34
+ source: SourceType;
35
+ /** セキュリティスコア (0-100, cc-audit) */
36
+ securityScore?: number;
37
+ /** GitHub スター数 */
38
+ stars?: number;
39
+ /** 公式かどうか */
40
+ isOfficial?: boolean;
41
+ /** 最終更新日 */
42
+ lastUpdated?: string;
43
+ };
44
+ /** インストール情報 */
45
+ export type InstallInfo = {
46
+ /** インストール方法 */
47
+ method: InstallMethod;
48
+ /** インストールコマンド */
49
+ command?: string;
50
+ /** マーケットプレイス名 */
51
+ marketplace?: string;
52
+ };
53
+ /** 統一レコメンデーションアイテム */
54
+ export type Recommendation = {
55
+ /** 一意な識別子 */
56
+ id: string;
57
+ /** 表示名 */
58
+ name: string;
59
+ /** タイプ */
60
+ type: RecommendationType;
61
+ /** リポジトリ/ソースURL */
62
+ url: string;
63
+ /** 説明文 */
64
+ description: string;
65
+ /** 作者 */
66
+ author: Author;
67
+ /** カテゴリ */
68
+ category: string;
69
+ /** タグ */
70
+ tags: string[];
71
+ /** 検出ルール */
72
+ detection: DetectionRules;
73
+ /** 品質指標 */
74
+ metrics: Metrics;
75
+ /** インストール情報 */
76
+ install: InstallInfo;
77
+ };
78
+ /** データベース (全レコメンデーション) */
79
+ export type RecommendationDatabase = {
80
+ version: string;
81
+ lastUpdated: string;
82
+ items: Recommendation[];
83
+ };
84
+ /** プラグインデータベース */
85
+ export type PluginDatabase = {
86
+ version: string;
87
+ lastUpdated: string;
88
+ items: Recommendation[];
89
+ };
90
+ /** MCPサーバーデータベース */
91
+ export type MCPServerDatabase = {
92
+ version: string;
93
+ lastUpdated: string;
94
+ items: Recommendation[];
95
+ };
96
+ /** スキルデータベース */
97
+ export type SkillDatabase = {
98
+ version: string;
99
+ lastUpdated: string;
100
+ items: Recommendation[];
101
+ };
102
+ //# sourceMappingURL=domain-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-types.d.ts","sourceRoot":"","sources":["../../src/types/domain-types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Domain Types
3
+ *
4
+ * Core business domain types for recommendations
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=domain-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"domain-types.js","sourceRoot":"","sources":["../../src/types/domain-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Type Definitions (Public API)
3
+ *
4
+ * 型定義の公開 API
5
+ */
6
+ export type { Author, DetectionRules, InstallInfo, InstallMethod, MCPServerDatabase, Metrics, PluginDatabase, Recommendation, RecommendationDatabase, RecommendationType, SkillDatabase, SourceType, } from "./domain-types.js";
7
+ export type { RawMCPEntry, RawPluginEntry, RawSkillEntry } from "./raw-types.js";
8
+ export type { ProjectInfo, ScoredRecommendation } from "./service-types.js";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,YAAY,EACV,MAAM,EACN,cAAc,EACd,WAAW,EACX,aAAa,EACb,iBAAiB,EACjB,OAAO,EACP,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,UAAU,GACX,MAAM,mBAAmB,CAAC;AAE3B,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEjF,YAAY,EAAE,WAAW,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Type Definitions (Public API)
3
+ *
4
+ * 型定義の公開 API
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Raw Data Types
3
+ *
4
+ * Types for external data sources (marketplace, awesome lists, etc.)
5
+ */
6
+ /** プラグインマーケットプレイスのエントリ (生データ) */
7
+ export type RawPluginEntry = {
8
+ name: string;
9
+ description: string;
10
+ version?: string;
11
+ author: {
12
+ name: string;
13
+ email?: string;
14
+ };
15
+ source: string | {
16
+ url: string;
17
+ subPath?: string;
18
+ };
19
+ category: string;
20
+ homepage?: string;
21
+ tags?: string[];
22
+ lspServers?: Record<string, unknown>;
23
+ };
24
+ /** awesome-mcp-servers のエントリ (パース後) */
25
+ export type RawMCPEntry = {
26
+ owner: string;
27
+ repo: string;
28
+ url: string;
29
+ description: string;
30
+ language?: string;
31
+ scope?: "cloud" | "local";
32
+ platforms?: string[];
33
+ isOfficial?: boolean;
34
+ category: string;
35
+ };
36
+ /** awesome-claude-code CSV のエントリ */
37
+ export type RawSkillEntry = {
38
+ name: string;
39
+ url: string;
40
+ author: string;
41
+ authorUrl: string;
42
+ license?: string;
43
+ description: string;
44
+ category: string;
45
+ };
46
+ //# sourceMappingURL=raw-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-types.d.ts","sourceRoot":"","sources":["../../src/types/raw-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iCAAiC;AACjC,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,MAAM,EAAE,MAAM,GAAG;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,CAAC;AAEF,uCAAuC;AACvC,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,oCAAoC;AACpC,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Raw Data Types
3
+ *
4
+ * Types for external data sources (marketplace, awesome lists, etc.)
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=raw-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-types.js","sourceRoot":"","sources":["../../src/types/raw-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Service Types
3
+ *
4
+ * Types for service layer inputs and outputs
5
+ */
6
+ import type { Recommendation } from "./domain-types.js";
7
+ /** プロジェクト情報 (分析結果) */
8
+ export type ProjectInfo = {
9
+ /** プロジェクトパス */
10
+ path: string;
11
+ /** 使用言語 */
12
+ languages: string[];
13
+ /** 依存関係 (package.json, requirements.txt, etc.) */
14
+ dependencies: string[];
15
+ /** ファイル一覧 */
16
+ files: string[];
17
+ /** フレームワーク */
18
+ frameworks: string[];
19
+ /** プロジェクト説明 (README等から) */
20
+ description?: string;
21
+ };
22
+ /** スコア付きレコメンデーション */
23
+ export type ScoredRecommendation = {
24
+ item: Recommendation;
25
+ score: number;
26
+ reasons: string[];
27
+ };
28
+ //# sourceMappingURL=service-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-types.d.ts","sourceRoot":"","sources":["../../src/types/service-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExD,sBAAsB;AACtB,MAAM,MAAM,WAAW,GAAG;IACxB,eAAe;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW;IACX,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kDAAkD;IAClD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,cAAc;IACd,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qBAAqB;AACrB,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Service Types
3
+ *
4
+ * Types for service layer inputs and outputs
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=service-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-types.js","sourceRoot":"","sources":["../../src/types/service-types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Glob Pattern Matcher
3
+ *
4
+ * Utilities for matching file paths against glob patterns
5
+ */
6
+ /**
7
+ * Match a filepath against a glob pattern
8
+ *
9
+ * Supports wildcards:
10
+ * - `*` matches any characters except /
11
+ * - `**` matches any characters including /
12
+ * - `?` matches any single character
13
+ *
14
+ * @param filepath - The file path to test
15
+ * @param pattern - The glob pattern to match against
16
+ * @returns True if the filepath matches the pattern
17
+ *
18
+ * @example
19
+ * matchGlob("src/index.ts", "src/*.ts") // true
20
+ * matchGlob("src/utils/helper.ts", "src/**\/*.ts") // true
21
+ * matchGlob("test.js", "*.ts") // false
22
+ */
23
+ export declare function matchGlob(filepath: string, pattern: string): boolean;
24
+ //# sourceMappingURL=glob-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-matcher.d.ts","sourceRoot":"","sources":["../../src/utils/glob-matcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAWpE"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Glob Pattern Matcher
3
+ *
4
+ * Utilities for matching file paths against glob patterns
5
+ */
6
+ /**
7
+ * Match a filepath against a glob pattern
8
+ *
9
+ * Supports wildcards:
10
+ * - `*` matches any characters except /
11
+ * - `**` matches any characters including /
12
+ * - `?` matches any single character
13
+ *
14
+ * @param filepath - The file path to test
15
+ * @param pattern - The glob pattern to match against
16
+ * @returns True if the filepath matches the pattern
17
+ *
18
+ * @example
19
+ * matchGlob("src/index.ts", "src/*.ts") // true
20
+ * matchGlob("src/utils/helper.ts", "src/**\/*.ts") // true
21
+ * matchGlob("test.js", "*.ts") // false
22
+ */
23
+ export function matchGlob(filepath, pattern) {
24
+ // Convert glob pattern to regex
25
+ const regexPattern = pattern
26
+ .replace(/\./g, "\\.")
27
+ .replace(/\*\*/g, "{{GLOBSTAR}}")
28
+ .replace(/\*/g, "[^/]*")
29
+ .replace(/{{GLOBSTAR}}/g, ".*")
30
+ .replace(/\?/g, ".");
31
+ const regex = new RegExp(`^${regexPattern}$`, "i");
32
+ return regex.test(filepath);
33
+ }
34
+ //# sourceMappingURL=glob-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob-matcher.js","sourceRoot":"","sources":["../../src/utils/glob-matcher.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,SAAS,CAAC,QAAgB,EAAE,OAAe;IACzD,gCAAgC;IAChC,MAAM,YAAY,GAAG,OAAO;SACzB,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,cAAc,CAAC;SAChC,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC;SACvB,OAAO,CAAC,eAAe,EAAE,IAAI,CAAC;SAC9B,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IAEvB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,YAAY,GAAG,EAAE,GAAG,CAAC,CAAC;IACnD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Utility Exports
3
+ *
4
+ * Central export point for all utility functions
5
+ */
6
+ export { matchGlob } from "./glob-matcher.js";
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Utility Exports
3
+ *
4
+ * Central export point for all utility functions
5
+ */
6
+ export { matchGlob } from "./glob-matcher.js";
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,82 @@
1
+ {
2
+ "name": "cc-recommender",
3
+ "version": "0.1.0",
4
+ "description": "MCP server for recommending Claude Code skills, plugins, and MCP servers",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "bin": {
8
+ "cc-recommender": "./dist/index.js"
9
+ },
10
+ "keywords": [
11
+ "mcp",
12
+ "claude-code",
13
+ "skills",
14
+ "plugins",
15
+ "recommendations"
16
+ ],
17
+ "author": "Yuji",
18
+ "license": "MIT",
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "https://github.com/yuji0809/cc-recommender.git"
22
+ },
23
+ "bugs": {
24
+ "url": "https://github.com/yuji0809/cc-recommender/issues"
25
+ },
26
+ "homepage": "https://github.com/yuji0809/cc-recommender#readme",
27
+ "dependencies": {
28
+ "@modelcontextprotocol/sdk": "^1.25.3",
29
+ "zod": "^3.23.0"
30
+ },
31
+ "devDependencies": {
32
+ "@biomejs/biome": "^2.3.13",
33
+ "@cc-audit/cc-audit": "^3.2.7",
34
+ "@types/node": "^22.0.0",
35
+ "@vitest/coverage-v8": "^4.0.18",
36
+ "husky": "^9.1.7",
37
+ "lint-staged": "^16.2.7",
38
+ "tsx": "^4.0.0",
39
+ "typescript": "^5.5.0",
40
+ "vitest": "^4.0.18"
41
+ },
42
+ "lint-staged": {
43
+ "*.{js,ts,json}": [
44
+ "biome check --write --no-errors-on-unmatched"
45
+ ]
46
+ },
47
+ "engines": {
48
+ "node": ">=22.0.0"
49
+ },
50
+ "publishConfig": {
51
+ "access": "public"
52
+ },
53
+ "files": [
54
+ "dist",
55
+ "data",
56
+ "README.md",
57
+ "LICENSE",
58
+ "CHANGELOG.md"
59
+ ],
60
+ "scripts": {
61
+ "build": "tsc",
62
+ "dev": "tsc --watch",
63
+ "start": "node dist/index.js",
64
+ "fetch-data": "pnpm exec tsx scripts/fetch-data.ts",
65
+ "fetch-data:quick": "SKIP_SECURITY_SCAN=true pnpm exec tsx scripts/fetch-data.ts",
66
+ "fetch-data:full": "SKIP_SECURITY_SCAN=false pnpm exec tsx scripts/fetch-data.ts",
67
+ "test": "vitest run",
68
+ "test:watch": "vitest",
69
+ "test:coverage": "vitest run --coverage",
70
+ "lint": "biome check .",
71
+ "lint:fix": "biome check --write .",
72
+ "format": "biome format --write .",
73
+ "typecheck": "tsc --noEmit",
74
+ "audit": "npx @cc-audit/cc-audit check .",
75
+ "audit:baseline": "npx @cc-audit/cc-audit check . --save-baseline .cc-audit-baseline.json",
76
+ "audit:drift": "npx @cc-audit/cc-audit check . --check-drift .cc-audit-baseline.json",
77
+ "audit:watch": "npx @cc-audit/cc-audit check . --watch",
78
+ "license:check": "npx license-checker --summary --excludePrivatePackages --onlyAllow 'MIT;Apache-2.0;BSD-2-Clause;BSD-3-Clause;ISC;0BSD;CC0-1.0;Unlicense'",
79
+ "license:full": "npx license-checker --excludePrivatePackages",
80
+ "check": "pnpm run typecheck && pnpm run lint && pnpm run audit && pnpm run license:check"
81
+ }
82
+ }