cc-recommender 0.2.2 → 0.3.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 +7 -0
- package/README.ja.md +3 -1
- package/README.md +3 -1
- package/data/mcp-servers.json +1 -1
- package/data/plugins.json +1 -1
- package/data/skills.json +26 -1
- package/dist/config/scoring-config.d.ts +2 -0
- package/dist/config/scoring-config.d.ts.map +1 -1
- package/dist/config/scoring-config.js +2 -0
- package/dist/config/scoring-config.js.map +1 -1
- package/dist/services/recommender/formatters.d.ts +2 -1
- package/dist/services/recommender/formatters.d.ts.map +1 -1
- package/dist/services/recommender/formatters.js +110 -3
- package/dist/services/recommender/formatters.js.map +1 -1
- package/dist/services/recommender/scoring/scorer.d.ts +1 -1
- package/dist/services/recommender/scoring/scorer.d.ts.map +1 -1
- package/dist/services/recommender/scoring/scorer.js +21 -5
- package/dist/services/recommender/scoring/scorer.js.map +1 -1
- package/dist/tools/handlers/recommend-skills.tool.d.ts.map +1 -1
- package/dist/tools/handlers/recommend-skills.tool.js +7 -1
- package/dist/tools/handlers/recommend-skills.tool.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.3.0](https://github.com/yuji0809/cc-recommender/compare/v0.2.2...v0.3.0) (2026-01-30)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Features
|
|
12
|
+
|
|
13
|
+
* enhance scoring system and add bonus recommendations ([16646df](https://github.com/yuji0809/cc-recommender/commit/16646df64860d939a6302e33193678ee603d375c))
|
|
14
|
+
|
|
8
15
|
## [0.2.2](https://github.com/yuji0809/cc-recommender/compare/v0.2.1...v0.2.2) (2026-01-30)
|
|
9
16
|
|
|
10
17
|
|
package/README.ja.md
CHANGED
|
@@ -44,11 +44,13 @@ pnpm run build
|
|
|
44
44
|
|
|
45
45
|
## Claude Codeで使う
|
|
46
46
|
|
|
47
|
+
**Cursorユーザーの方へ:** `~/.claude/settings.json`の代わりに`~/.cursor/mcp.json`を使用してください
|
|
48
|
+
|
|
47
49
|
### 方法1: npx経由(推奨)
|
|
48
50
|
|
|
49
51
|
インストール不要。常に最新版を使用。
|
|
50
52
|
|
|
51
|
-
`~/.claude/settings.json
|
|
53
|
+
`~/.claude/settings.json`(Cursorの場合は`~/.cursor/mcp.json`)に追加:
|
|
52
54
|
|
|
53
55
|
```json
|
|
54
56
|
{
|
package/README.md
CHANGED
|
@@ -44,11 +44,13 @@ pnpm run build
|
|
|
44
44
|
|
|
45
45
|
## Usage with Claude Code
|
|
46
46
|
|
|
47
|
+
**For Cursor users:** Use `~/.cursor/mcp.json` instead of `~/.claude/settings.json`
|
|
48
|
+
|
|
47
49
|
### Option 1: Using npx (Recommended)
|
|
48
50
|
|
|
49
51
|
No installation required. Always uses the latest version.
|
|
50
52
|
|
|
51
|
-
Add to `~/.claude/settings.json
|
|
53
|
+
Add to `~/.claude/settings.json` (or `~/.cursor/mcp.json` for Cursor):
|
|
52
54
|
|
|
53
55
|
```json
|
|
54
56
|
{
|
package/data/mcp-servers.json
CHANGED
package/data/plugins.json
CHANGED
package/data/skills.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "0.1.0",
|
|
3
|
-
"lastUpdated": "2026-01-
|
|
3
|
+
"lastUpdated": "2026-01-30T15:29:40.779Z",
|
|
4
4
|
"items": [
|
|
5
5
|
{
|
|
6
6
|
"id": "skill-ai-agent-ai-spy",
|
|
@@ -25,6 +25,31 @@
|
|
|
25
25
|
"method": "manual"
|
|
26
26
|
}
|
|
27
27
|
},
|
|
28
|
+
{
|
|
29
|
+
"id": "skill-cc-devops-skills",
|
|
30
|
+
"name": "cc-devops-skills",
|
|
31
|
+
"type": "skill",
|
|
32
|
+
"url": "https://github.com/akin-ozer/cc-devops-skills",
|
|
33
|
+
"description": "Immensely detailed set of skills for DevOps Engineers (or anyone who has to deploy code, really). Works with validations, generators, shell scripts and CLI tools to create high quality IaC code for about any platform you've ever struggled painfully to work with. Worth downloading even just as a source of documentation.",
|
|
34
|
+
"author": {
|
|
35
|
+
"name": "akin-ozer",
|
|
36
|
+
"url": "https://github.com/akin-ozer"
|
|
37
|
+
},
|
|
38
|
+
"category": "Agent Skills",
|
|
39
|
+
"tags": ["agent skills", "skill", "apache-2.0"],
|
|
40
|
+
"detection": {
|
|
41
|
+
"keywords": ["devops", "ai"]
|
|
42
|
+
},
|
|
43
|
+
"metrics": {
|
|
44
|
+
"source": "awesome-list",
|
|
45
|
+
"isOfficial": false,
|
|
46
|
+
"securityScore": 100
|
|
47
|
+
},
|
|
48
|
+
"install": {
|
|
49
|
+
"method": "manual",
|
|
50
|
+
"command": "git clone https://github.com/akin-ozer/cc-devops-skills"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
28
53
|
{
|
|
29
54
|
"id": "skill-claude-codex-settings",
|
|
30
55
|
"name": "Claude Codex Settings",
|
|
@@ -23,5 +23,7 @@ export declare const SCORING_THRESHOLDS: {
|
|
|
23
23
|
readonly maxResults: 20;
|
|
24
24
|
readonly highSecurityThreshold: 80;
|
|
25
25
|
readonly lowSecurityThreshold: 50;
|
|
26
|
+
/** Expected maximum raw score for normalization (empirical value) */
|
|
27
|
+
readonly maxRawScore: 50;
|
|
26
28
|
};
|
|
27
29
|
//# sourceMappingURL=scoring-config.d.ts.map
|
|
@@ -1 +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;;;;;
|
|
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;;;;;IAK7B,qEAAqE;;CAE7D,CAAC"}
|
|
@@ -1 +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;
|
|
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;IACxB,qEAAqE;IACrE,WAAW,EAAE,EAAE;CACP,CAAC"}
|
|
@@ -16,7 +16,8 @@ export declare function groupByType(recommendations: ScoredRecommendation[]): Ma
|
|
|
16
16
|
* Format recommendations for display
|
|
17
17
|
*
|
|
18
18
|
* @param recommendations - List of scored recommendations
|
|
19
|
+
* @param allRecommendations - All available recommendations for bonus section
|
|
19
20
|
* @returns Formatted string for display
|
|
20
21
|
*/
|
|
21
|
-
export declare function formatRecommendations(recommendations: ScoredRecommendation[]): string;
|
|
22
|
+
export declare function formatRecommendations(recommendations: ScoredRecommendation[], allRecommendations?: ScoredRecommendation[]): string;
|
|
22
23
|
//# sourceMappingURL=formatters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../../src/services/recommender/formatters.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"formatters.d.ts","sourceRoot":"","sources":["../../../src/services/recommender/formatters.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAiBzE;;;;;GAKG;AACH,wBAAgB,WAAW,CACzB,eAAe,EAAE,oBAAoB,EAAE,GACtC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAYrD;AA2ED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,eAAe,EAAE,oBAAoB,EAAE,EACvC,kBAAkB,CAAC,EAAE,oBAAoB,EAAE,GAC1C,MAAM,CA8GR"}
|
|
@@ -5,6 +5,21 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { getSecurityBadge } from "../security-scanner.service.js";
|
|
7
7
|
import { getScoreIndicator } from "./scoring/scorer.js";
|
|
8
|
+
/**
|
|
9
|
+
* Get score explanation
|
|
10
|
+
*
|
|
11
|
+
* @param score - The calculated score
|
|
12
|
+
* @returns Brief explanation of the score
|
|
13
|
+
*/
|
|
14
|
+
function getScoreExplanation(score) {
|
|
15
|
+
if (score >= 10)
|
|
16
|
+
return "プロジェクトに強く推薦";
|
|
17
|
+
if (score >= 5)
|
|
18
|
+
return "プロジェクトに適合";
|
|
19
|
+
if (score >= 2)
|
|
20
|
+
return "参考として有用";
|
|
21
|
+
return "低い適合度";
|
|
22
|
+
}
|
|
8
23
|
/**
|
|
9
24
|
* Group recommendations by type
|
|
10
25
|
*
|
|
@@ -22,13 +37,76 @@ export function groupByType(recommendations) {
|
|
|
22
37
|
}
|
|
23
38
|
return groups;
|
|
24
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Select bonus recommendations (popular/trending items)
|
|
42
|
+
*
|
|
43
|
+
* @param recommendations - List of all recommendations
|
|
44
|
+
* @param displayedIds - Set of IDs already displayed
|
|
45
|
+
* @returns 1-2 bonus recommendations
|
|
46
|
+
*/
|
|
47
|
+
function selectBonusRecommendations(recommendations, displayedIds) {
|
|
48
|
+
// Filter out already displayed items
|
|
49
|
+
const candidates = recommendations.filter((rec) => !displayedIds.has(rec.item.id));
|
|
50
|
+
if (candidates.length === 0)
|
|
51
|
+
return [];
|
|
52
|
+
// Score each candidate for "bonus worthiness"
|
|
53
|
+
const scored = candidates.map((rec) => {
|
|
54
|
+
let bonusScore = 0;
|
|
55
|
+
// Official items get priority
|
|
56
|
+
if (rec.item.metrics.isOfficial)
|
|
57
|
+
bonusScore += 100;
|
|
58
|
+
// High star count indicates popularity
|
|
59
|
+
if (rec.item.metrics.stars) {
|
|
60
|
+
bonusScore += Math.min(rec.item.metrics.stars / 10, 50); // Cap at 50 points
|
|
61
|
+
}
|
|
62
|
+
// High security score indicates quality
|
|
63
|
+
if (rec.item.metrics.securityScore && rec.item.metrics.securityScore >= 80) {
|
|
64
|
+
bonusScore += 30;
|
|
65
|
+
}
|
|
66
|
+
// Recently updated items (within last 6 months)
|
|
67
|
+
if (rec.item.metrics.lastUpdated) {
|
|
68
|
+
const sixMonthsAgo = new Date();
|
|
69
|
+
sixMonthsAgo.setMonth(sixMonthsAgo.getMonth() - 6);
|
|
70
|
+
const lastUpdated = new Date(rec.item.metrics.lastUpdated);
|
|
71
|
+
if (lastUpdated > sixMonthsAgo) {
|
|
72
|
+
bonusScore += 20;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return { rec, bonusScore };
|
|
76
|
+
});
|
|
77
|
+
// Sort by bonus score
|
|
78
|
+
scored.sort((a, b) => b.bonusScore - a.bonusScore);
|
|
79
|
+
// Return top 1-2 items
|
|
80
|
+
return scored.slice(0, 2).map((s) => s.rec);
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get bonus recommendation label
|
|
84
|
+
*
|
|
85
|
+
* @param item - The recommendation item
|
|
86
|
+
* @returns Label explaining why it's recommended
|
|
87
|
+
*/
|
|
88
|
+
function getBonusLabel(item) {
|
|
89
|
+
if (item.metrics.isOfficial)
|
|
90
|
+
return "公式推奨";
|
|
91
|
+
if (item.metrics.stars && item.metrics.stars >= 100)
|
|
92
|
+
return "人気のツール";
|
|
93
|
+
if (item.metrics.securityScore && item.metrics.securityScore >= 80)
|
|
94
|
+
return "高品質";
|
|
95
|
+
const sixMonthsAgo = new Date();
|
|
96
|
+
sixMonthsAgo.setMonth(sixMonthsAgo.getMonth() - 6);
|
|
97
|
+
if (item.metrics.lastUpdated && new Date(item.metrics.lastUpdated) > sixMonthsAgo) {
|
|
98
|
+
return "最近話題";
|
|
99
|
+
}
|
|
100
|
+
return "おすすめ";
|
|
101
|
+
}
|
|
25
102
|
/**
|
|
26
103
|
* Format recommendations for display
|
|
27
104
|
*
|
|
28
105
|
* @param recommendations - List of scored recommendations
|
|
106
|
+
* @param allRecommendations - All available recommendations for bonus section
|
|
29
107
|
* @returns Formatted string for display
|
|
30
108
|
*/
|
|
31
|
-
export function formatRecommendations(recommendations) {
|
|
109
|
+
export function formatRecommendations(recommendations, allRecommendations) {
|
|
32
110
|
if (recommendations.length === 0) {
|
|
33
111
|
return "プロジェクトに適した推薦が見つかりませんでした。";
|
|
34
112
|
}
|
|
@@ -54,6 +132,8 @@ export function formatRecommendations(recommendations) {
|
|
|
54
132
|
"command",
|
|
55
133
|
"agent",
|
|
56
134
|
];
|
|
135
|
+
// Track displayed IDs
|
|
136
|
+
const displayedIds = new Set();
|
|
57
137
|
for (const type of typeOrder) {
|
|
58
138
|
const items = grouped.get(type);
|
|
59
139
|
if (!items || items.length === 0)
|
|
@@ -62,16 +142,19 @@ export function formatRecommendations(recommendations) {
|
|
|
62
142
|
lines.push("━".repeat(40));
|
|
63
143
|
for (let i = 0; i < Math.min(items.length, 5); i++) {
|
|
64
144
|
const { item, score, reasons } = items[i];
|
|
145
|
+
displayedIds.add(item.id);
|
|
65
146
|
lines.push(`${i + 1}. ${item.name}${item.metrics.isOfficial ? " (公式)" : ""}`);
|
|
66
147
|
lines.push(` ├─ 用途: ${item.description.slice(0, 60)}${item.description.length > 60 ? "..." : ""}`);
|
|
67
|
-
|
|
148
|
+
// スコア表示(説明付き)
|
|
149
|
+
const scoreExplanation = getScoreExplanation(score);
|
|
150
|
+
lines.push(` ├─ スコア: ${score}${getScoreIndicator(score)} - ${scoreExplanation}`);
|
|
68
151
|
// セキュリティスコア表示
|
|
69
152
|
if (item.metrics.securityScore !== undefined) {
|
|
70
153
|
const securityBadge = getSecurityBadge(item.metrics.securityScore);
|
|
71
154
|
lines.push(` ├─ セキュリティ: ${securityBadge} (${item.metrics.securityScore}/100)`);
|
|
72
155
|
}
|
|
73
156
|
if (reasons.length > 0) {
|
|
74
|
-
lines.push(` ├─
|
|
157
|
+
lines.push(` ├─ マッチ内容: ${reasons.join(", ")}`);
|
|
75
158
|
}
|
|
76
159
|
if (item.install.command) {
|
|
77
160
|
lines.push(` └─ インストール: ${item.install.command}`);
|
|
@@ -85,6 +168,30 @@ export function formatRecommendations(recommendations) {
|
|
|
85
168
|
lines.push(` ... 他 ${items.length - 5} 件`);
|
|
86
169
|
}
|
|
87
170
|
}
|
|
171
|
+
// Add bonus recommendations section
|
|
172
|
+
if (allRecommendations && allRecommendations.length > 0) {
|
|
173
|
+
const bonusItems = selectBonusRecommendations(allRecommendations, displayedIds);
|
|
174
|
+
if (bonusItems.length > 0) {
|
|
175
|
+
lines.push("\n🔥 人気・トレンド");
|
|
176
|
+
lines.push("━".repeat(40));
|
|
177
|
+
for (let i = 0; i < bonusItems.length; i++) {
|
|
178
|
+
const { item } = bonusItems[i];
|
|
179
|
+
const bonusLabel = getBonusLabel(item);
|
|
180
|
+
lines.push(`${i + 1}. ${item.name} (${bonusLabel})`);
|
|
181
|
+
lines.push(` ├─ 用途: ${item.description.slice(0, 60)}${item.description.length > 60 ? "..." : ""}`);
|
|
182
|
+
if (item.metrics.stars) {
|
|
183
|
+
lines.push(` ├─ GitHub Stars: ⭐ ${item.metrics.stars}`);
|
|
184
|
+
}
|
|
185
|
+
if (item.install.command) {
|
|
186
|
+
lines.push(` └─ インストール: ${item.install.command}`);
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
lines.push(` └─ URL: ${item.url}`);
|
|
190
|
+
}
|
|
191
|
+
lines.push("");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
88
195
|
return lines.join("\n");
|
|
89
196
|
}
|
|
90
197
|
//# sourceMappingURL=formatters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../src/services/recommender/formatters.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CACzB,eAAuC;IAEvC,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkD,CAAC;IAEzE,KAAK,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../../src/services/recommender/formatters.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,7 +20,7 @@ export declare function calculateScore(item: Recommendation, project: ProjectInf
|
|
|
20
20
|
/**
|
|
21
21
|
* Get score indicator emoji and text
|
|
22
22
|
*
|
|
23
|
-
* @param score - The calculated score
|
|
23
|
+
* @param score - The calculated score (1-100)
|
|
24
24
|
* @returns Indicator string with emoji
|
|
25
25
|
*/
|
|
26
26
|
export declare function getScoreIndicator(score: number): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../../../../src/services/recommender/scoring/scorer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAGnE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,
|
|
1
|
+
{"version":3,"file":"scorer.d.ts","sourceRoot":"","sources":["../../../../src/services/recommender/scoring/scorer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iCAAiC,CAAC;AAGnE;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,cAAc,EACpB,OAAO,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,MAAM,GACjB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAA;CAAE,CA0FtC;AAkBD;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAKvD"}
|
|
@@ -80,20 +80,36 @@ export function calculateScore(item, project, userQuery) {
|
|
|
80
80
|
score *= SCORING_MULTIPLIERS.lowSecurity;
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
-
|
|
83
|
+
// Normalize score to 1-100 range
|
|
84
|
+
const normalizedScore = normalizeScore(score);
|
|
85
|
+
return { score: normalizedScore, reasons };
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Normalize raw score to 1-100 range
|
|
89
|
+
*
|
|
90
|
+
* @param rawScore - The raw calculated score
|
|
91
|
+
* @returns Normalized score between 1 and 100
|
|
92
|
+
*/
|
|
93
|
+
function normalizeScore(rawScore) {
|
|
94
|
+
if (rawScore <= 0)
|
|
95
|
+
return 1;
|
|
96
|
+
// Convert to 1-100 scale based on expected max raw score
|
|
97
|
+
const normalized = (rawScore / SCORING_THRESHOLDS.maxRawScore) * 100;
|
|
98
|
+
// Clamp to 1-100 range
|
|
99
|
+
return Math.round(Math.min(100, Math.max(1, normalized)));
|
|
84
100
|
}
|
|
85
101
|
/**
|
|
86
102
|
* Get score indicator emoji and text
|
|
87
103
|
*
|
|
88
|
-
* @param score - The calculated score
|
|
104
|
+
* @param score - The calculated score (1-100)
|
|
89
105
|
* @returns Indicator string with emoji
|
|
90
106
|
*/
|
|
91
107
|
export function getScoreIndicator(score) {
|
|
92
|
-
if (score >=
|
|
108
|
+
if (score >= 80)
|
|
93
109
|
return " ✅ 高適合";
|
|
94
|
-
if (score >=
|
|
110
|
+
if (score >= 50)
|
|
95
111
|
return " 👍 適合";
|
|
96
|
-
if (score >=
|
|
112
|
+
if (score >= 20)
|
|
97
113
|
return " 📝 参考";
|
|
98
114
|
return "";
|
|
99
115
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scorer.js","sourceRoot":"","sources":["../../../../src/services/recommender/scoring/scorer.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"scorer.js","sourceRoot":"","sources":["../../../../src/services/recommender/scoring/scorer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend-skills.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/recommend-skills.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAI1E,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAE1F,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,eAAe,EAAE,KAAK,CAAC;QACrB,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;KACtB,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"recommend-skills.tool.d.ts","sourceRoot":"","sources":["../../../src/tools/handlers/recommend-skills.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAI1E,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAE1F,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,SAAS,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;IACF,eAAe,EAAE,KAAK,CAAC;QACrB,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;KACtB,CAAC,CAAC;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,oBAAoB,EAC3B,QAAQ,EAAE,sBAAsB,GAC/B,OAAO,CAAC,qBAAqB,CAAC,CAwChC"}
|
|
@@ -17,8 +17,14 @@ export async function recommendSkills(input, database) {
|
|
|
17
17
|
maxResults: input.max_results,
|
|
18
18
|
types: input.types,
|
|
19
19
|
});
|
|
20
|
+
// Get all recommendations (for bonus section)
|
|
21
|
+
const allRecommendations = recommend(database, projectInfo, input.description, {
|
|
22
|
+
maxResults: 100, // Get more items for bonus selection
|
|
23
|
+
minScore: 0, // Include all items even with score 0
|
|
24
|
+
types: input.types,
|
|
25
|
+
});
|
|
20
26
|
// Format for display
|
|
21
|
-
const formatted = formatRecommendations(recommendations);
|
|
27
|
+
const formatted = formatRecommendations(recommendations, allRecommendations);
|
|
22
28
|
return {
|
|
23
29
|
project: {
|
|
24
30
|
path: projectInfo.path,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"recommend-skills.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/recommend-skills.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,sDAAsD,CAAC;AAwBjF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA2B,EAC3B,QAAgC;IAEhC,sBAAsB;IACtB,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE7D,sBAAsB;IACtB,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;QAC1E,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,SAAS,GAAG,qBAAqB,CAAC,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"recommend-skills.tool.js","sourceRoot":"","sources":["../../../src/tools/handlers/recommend-skills.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,qDAAqD,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,0CAA0C,CAAC;AACjF,OAAO,EAAE,SAAS,EAAE,MAAM,sDAAsD,CAAC;AAwBjF;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAA2B,EAC3B,QAAgC;IAEhC,sBAAsB;IACtB,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAE7D,sBAAsB;IACtB,MAAM,eAAe,GAAG,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;QAC1E,UAAU,EAAE,KAAK,CAAC,WAAW;QAC7B,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC,CAAC;IAEH,8CAA8C;IAC9C,MAAM,kBAAkB,GAAG,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE;QAC7E,UAAU,EAAE,GAAG,EAAE,qCAAqC;QACtD,QAAQ,EAAE,CAAC,EAAE,sCAAsC;QACnD,KAAK,EAAE,KAAK,CAAC,KAAK;KACnB,CAAC,CAAC;IAEH,qBAAqB;IACrB,MAAM,SAAS,GAAG,qBAAqB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAE7E,OAAO;QACL,OAAO,EAAE;YACP,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,SAAS,EAAE,WAAW,CAAC,SAAS;YAChC,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,eAAe,EAAE,WAAW,CAAC,YAAY,CAAC,MAAM;SACjD;QACD,eAAe,EAAE,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YAC3C,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;SACtC,CAAC,CAAC;QACH,SAAS;QACT,UAAU,EAAE,eAAe,CAAC,MAAM;KACnC,CAAC;AACJ,CAAC"}
|