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.
- package/CHANGELOG.md +41 -0
- package/LICENSE +21 -0
- package/README.ja.md +201 -0
- package/README.md +201 -0
- package/data/mcp-servers.json +34777 -0
- package/data/plugins.json +1571 -0
- package/data/skills.json +3233 -0
- package/dist/config/constants.d.ts +18 -0
- package/dist/config/constants.d.ts.map +1 -0
- package/dist/config/constants.js +34 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/file-mappings.d.ts +13 -0
- package/dist/config/file-mappings.d.ts.map +1 -0
- package/dist/config/file-mappings.js +70 -0
- package/dist/config/file-mappings.js.map +1 -0
- package/dist/config/index.d.ts +9 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +9 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/scoring-config.d.ts +27 -0
- package/dist/config/scoring-config.d.ts.map +1 -0
- package/dist/config/scoring-config.js +27 -0
- package/dist/config/scoring-config.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +25 -0
- package/dist/index.js.map +1 -0
- package/dist/repositories/index.d.ts +7 -0
- package/dist/repositories/index.d.ts.map +1 -0
- package/dist/repositories/index.js +7 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/recommendation.repository.d.ts +56 -0
- package/dist/repositories/recommendation.repository.d.ts.map +1 -0
- package/dist/repositories/recommendation.repository.js +142 -0
- package/dist/repositories/recommendation.repository.js.map +1 -0
- package/dist/repositories/remote-data.repository.d.ts +20 -0
- package/dist/repositories/remote-data.repository.d.ts.map +1 -0
- package/dist/repositories/remote-data.repository.js +307 -0
- package/dist/repositories/remote-data.repository.js.map +1 -0
- package/dist/schemas/index.d.ts +7 -0
- package/dist/schemas/index.d.ts.map +1 -0
- package/dist/schemas/index.js +7 -0
- package/dist/schemas/index.js.map +1 -0
- package/dist/schemas/tool-schemas.d.ts +55 -0
- package/dist/schemas/tool-schemas.d.ts.map +1 -0
- package/dist/schemas/tool-schemas.js +36 -0
- package/dist/schemas/tool-schemas.js.map +1 -0
- package/dist/server/index.d.ts +8 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +8 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/mcp-server.d.ts +11 -0
- package/dist/server/mcp-server.d.ts.map +1 -0
- package/dist/server/mcp-server.js +27 -0
- package/dist/server/mcp-server.js.map +1 -0
- package/dist/server/tool-registry.d.ts +12 -0
- package/dist/server/tool-registry.d.ts.map +1 -0
- package/dist/server/tool-registry.js +114 -0
- package/dist/server/tool-registry.js.map +1 -0
- package/dist/services/analyzer/index.d.ts +7 -0
- package/dist/services/analyzer/index.d.ts.map +1 -0
- package/dist/services/analyzer/index.js +7 -0
- package/dist/services/analyzer/index.js.map +1 -0
- package/dist/services/analyzer/parsers/go-mod.parser.d.ts +11 -0
- package/dist/services/analyzer/parsers/go-mod.parser.d.ts.map +1 -0
- package/dist/services/analyzer/parsers/go-mod.parser.js +34 -0
- package/dist/services/analyzer/parsers/go-mod.parser.js.map +1 -0
- package/dist/services/analyzer/parsers/index.d.ts +9 -0
- package/dist/services/analyzer/parsers/index.d.ts.map +1 -0
- package/dist/services/analyzer/parsers/index.js +9 -0
- package/dist/services/analyzer/parsers/index.js.map +1 -0
- package/dist/services/analyzer/parsers/package-json.parser.d.ts +11 -0
- package/dist/services/analyzer/parsers/package-json.parser.d.ts.map +1 -0
- package/dist/services/analyzer/parsers/package-json.parser.js +61 -0
- package/dist/services/analyzer/parsers/package-json.parser.js.map +1 -0
- package/dist/services/analyzer/parsers/requirements-txt.parser.d.ts +11 -0
- package/dist/services/analyzer/parsers/requirements-txt.parser.d.ts.map +1 -0
- package/dist/services/analyzer/parsers/requirements-txt.parser.js +49 -0
- package/dist/services/analyzer/parsers/requirements-txt.parser.js.map +1 -0
- package/dist/services/analyzer/project-analyzer.service.d.ts +11 -0
- package/dist/services/analyzer/project-analyzer.service.d.ts.map +1 -0
- package/dist/services/analyzer/project-analyzer.service.js +101 -0
- package/dist/services/analyzer/project-analyzer.service.js.map +1 -0
- package/dist/services/analyzer.d.ts +8 -0
- package/dist/services/analyzer.d.ts.map +1 -0
- package/dist/services/analyzer.js +8 -0
- package/dist/services/analyzer.js.map +1 -0
- package/dist/services/mcp-fetcher.d.ts +12 -0
- package/dist/services/mcp-fetcher.d.ts.map +1 -0
- package/dist/services/mcp-fetcher.js +262 -0
- package/dist/services/mcp-fetcher.js.map +1 -0
- package/dist/services/plugin-fetcher.d.ts +12 -0
- package/dist/services/plugin-fetcher.d.ts.map +1 -0
- package/dist/services/plugin-fetcher.js +149 -0
- package/dist/services/plugin-fetcher.js.map +1 -0
- package/dist/services/recommender/formatters.d.ts +22 -0
- package/dist/services/recommender/formatters.d.ts.map +1 -0
- package/dist/services/recommender/formatters.js +90 -0
- package/dist/services/recommender/formatters.js.map +1 -0
- package/dist/services/recommender/index.d.ts +10 -0
- package/dist/services/recommender/index.d.ts.map +1 -0
- package/dist/services/recommender/index.js +10 -0
- package/dist/services/recommender/index.js.map +1 -0
- package/dist/services/recommender/recommendation.service.d.ts +27 -0
- package/dist/services/recommender/recommendation.service.d.ts.map +1 -0
- package/dist/services/recommender/recommendation.service.js +34 -0
- package/dist/services/recommender/recommendation.service.js.map +1 -0
- package/dist/services/recommender/scoring/index.d.ts +7 -0
- package/dist/services/recommender/scoring/index.d.ts.map +1 -0
- package/dist/services/recommender/scoring/index.js +7 -0
- package/dist/services/recommender/scoring/index.js.map +1 -0
- package/dist/services/recommender/scoring/scorer.d.ts +27 -0
- package/dist/services/recommender/scoring/scorer.d.ts.map +1 -0
- package/dist/services/recommender/scoring/scorer.js +100 -0
- package/dist/services/recommender/scoring/scorer.js.map +1 -0
- package/dist/services/recommender/search.service.d.ts +24 -0
- package/dist/services/recommender/search.service.d.ts.map +1 -0
- package/dist/services/recommender/search.service.js +57 -0
- package/dist/services/recommender/search.service.js.map +1 -0
- package/dist/services/recommender.d.ts +11 -0
- package/dist/services/recommender.d.ts.map +1 -0
- package/dist/services/recommender.js +11 -0
- package/dist/services/recommender.js.map +1 -0
- package/dist/services/security-scanner.service.d.ts +48 -0
- package/dist/services/security-scanner.service.d.ts.map +1 -0
- package/dist/services/security-scanner.service.js +98 -0
- package/dist/services/security-scanner.service.js.map +1 -0
- package/dist/services/skill-fetcher.d.ts +12 -0
- package/dist/services/skill-fetcher.d.ts.map +1 -0
- package/dist/services/skill-fetcher.js +307 -0
- package/dist/services/skill-fetcher.js.map +1 -0
- package/dist/tools/handlers/get-skill-details.tool.d.ts +25 -0
- package/dist/tools/handlers/get-skill-details.tool.d.ts.map +1 -0
- package/dist/tools/handlers/get-skill-details.tool.js +29 -0
- package/dist/tools/handlers/get-skill-details.tool.js.map +1 -0
- package/dist/tools/handlers/get-stats.tool.d.ts +19 -0
- package/dist/tools/handlers/get-stats.tool.d.ts.map +1 -0
- package/dist/tools/handlers/get-stats.tool.js +32 -0
- package/dist/tools/handlers/get-stats.tool.js.map +1 -0
- package/dist/tools/handlers/index.d.ts +11 -0
- package/dist/tools/handlers/index.d.ts.map +1 -0
- package/dist/tools/handlers/index.js +11 -0
- package/dist/tools/handlers/index.js.map +1 -0
- package/dist/tools/handlers/list-categories.tool.d.ts +19 -0
- package/dist/tools/handlers/list-categories.tool.d.ts.map +1 -0
- package/dist/tools/handlers/list-categories.tool.js +33 -0
- package/dist/tools/handlers/list-categories.tool.js.map +1 -0
- package/dist/tools/handlers/recommend-skills.tool.d.ts +32 -0
- package/dist/tools/handlers/recommend-skills.tool.d.ts.map +1 -0
- package/dist/tools/handlers/recommend-skills.tool.js +43 -0
- package/dist/tools/handlers/recommend-skills.tool.js.map +1 -0
- package/dist/tools/handlers/search-skills.tool.d.ts +27 -0
- package/dist/tools/handlers/search-skills.tool.d.ts.map +1 -0
- package/dist/tools/handlers/search-skills.tool.js +31 -0
- package/dist/tools/handlers/search-skills.tool.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +11 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/types/domain-types.d.ts +102 -0
- package/dist/types/domain-types.d.ts.map +1 -0
- package/dist/types/domain-types.js +7 -0
- package/dist/types/domain-types.js.map +1 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/raw-types.d.ts +46 -0
- package/dist/types/raw-types.d.ts.map +1 -0
- package/dist/types/raw-types.js +7 -0
- package/dist/types/raw-types.js.map +1 -0
- package/dist/types/service-types.d.ts +28 -0
- package/dist/types/service-types.d.ts.map +1 -0
- package/dist/types/service-types.js +7 -0
- package/dist/types/service-types.js.map +1 -0
- package/dist/utils/glob-matcher.d.ts +24 -0
- package/dist/utils/glob-matcher.d.ts.map +1 -0
- package/dist/utils/glob-matcher.js +34 -0
- package/dist/utils/glob-matcher.js.map +1 -0
- package/dist/utils/index.d.ts +7 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +7 -0
- package/dist/utils/index.js.map +1 -0
- 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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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 @@
|
|
|
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 @@
|
|
|
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"}
|