codingbuddy 1.1.0 → 1.1.1
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/README.md +1 -0
- package/dist/src/mcp/mcp.module.js +2 -1
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/mcp/mcp.service.d.ts +4 -1
- package/dist/src/mcp/mcp.service.js +34 -2
- package/dist/src/mcp/mcp.service.js.map +1 -1
- package/dist/src/skill/i18n/index.d.ts +2 -0
- package/dist/src/skill/i18n/index.js +21 -0
- package/dist/src/skill/i18n/index.js.map +1 -0
- package/dist/src/skill/i18n/keywords.d.ts +2 -0
- package/dist/src/skill/i18n/keywords.js +322 -0
- package/dist/src/skill/i18n/keywords.js.map +1 -0
- package/dist/src/skill/i18n/keywords.types.d.ts +14 -0
- package/dist/src/skill/i18n/keywords.types.js +11 -0
- package/dist/src/skill/i18n/keywords.types.js.map +1 -0
- package/dist/src/skill/index.d.ts +4 -0
- package/dist/src/skill/index.js +25 -0
- package/dist/src/skill/index.js.map +1 -0
- package/dist/src/skill/skill-recommendation.service.d.ts +5 -0
- package/dist/src/skill/skill-recommendation.service.js +79 -0
- package/dist/src/skill/skill-recommendation.service.js.map +1 -0
- package/dist/src/skill/skill-recommendation.types.d.ts +15 -0
- package/dist/src/skill/skill-recommendation.types.js +3 -0
- package/dist/src/skill/skill-recommendation.types.js.map +1 -0
- package/dist/src/skill/skill-triggers.d.ts +7 -0
- package/dist/src/skill/skill-triggers.js +50 -0
- package/dist/src/skill/skill-triggers.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.SkillRecommendationService = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const skill_triggers_1 = require("./skill-triggers");
|
|
12
|
+
const SKILL_DESCRIPTIONS = {
|
|
13
|
+
'systematic-debugging': 'Systematic approach to debugging',
|
|
14
|
+
'test-driven-development': 'Test-driven development workflow',
|
|
15
|
+
brainstorming: 'Explore requirements before implementation',
|
|
16
|
+
'executing-plans': 'Execute implementation plans with checkpoints',
|
|
17
|
+
'writing-plans': 'Create implementation plans',
|
|
18
|
+
'frontend-design': 'Build production-grade UI components',
|
|
19
|
+
'subagent-driven-development': 'Execute plans in current session',
|
|
20
|
+
'dispatching-parallel-agents': 'Handle parallel independent tasks',
|
|
21
|
+
};
|
|
22
|
+
let SkillRecommendationService = class SkillRecommendationService {
|
|
23
|
+
recommendSkills(prompt) {
|
|
24
|
+
const trimmedPrompt = prompt.trim();
|
|
25
|
+
if (trimmedPrompt.length === 0) {
|
|
26
|
+
return {
|
|
27
|
+
recommendations: [],
|
|
28
|
+
originalPrompt: prompt,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
const triggers = (0, skill_triggers_1.getSortedTriggers)();
|
|
32
|
+
const skillMatches = new Map();
|
|
33
|
+
for (const trigger of triggers) {
|
|
34
|
+
const matchedPatterns = [];
|
|
35
|
+
for (const pattern of trigger.patterns) {
|
|
36
|
+
if (pattern.test(trimmedPrompt)) {
|
|
37
|
+
const patternSource = pattern.source;
|
|
38
|
+
matchedPatterns.push(patternSource);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (matchedPatterns.length > 0 && !skillMatches.has(trigger.skillName)) {
|
|
42
|
+
skillMatches.set(trigger.skillName, {
|
|
43
|
+
matchedPatterns,
|
|
44
|
+
priority: trigger.priority,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const recommendations = [];
|
|
49
|
+
for (const [skillName, { matchedPatterns }] of skillMatches) {
|
|
50
|
+
const confidence = this.determineConfidence(matchedPatterns.length);
|
|
51
|
+
recommendations.push({
|
|
52
|
+
skillName,
|
|
53
|
+
confidence,
|
|
54
|
+
matchedPatterns,
|
|
55
|
+
description: SKILL_DESCRIPTIONS[skillName] || `Skill: ${skillName}`,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
recommendations.sort((a, b) => {
|
|
59
|
+
const aPriority = skillMatches.get(a.skillName)?.priority ?? 0;
|
|
60
|
+
const bPriority = skillMatches.get(b.skillName)?.priority ?? 0;
|
|
61
|
+
return bPriority - aPriority;
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
recommendations,
|
|
65
|
+
originalPrompt: prompt,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
determineConfidence(matchCount) {
|
|
69
|
+
if (matchCount >= 3) {
|
|
70
|
+
return 'high';
|
|
71
|
+
}
|
|
72
|
+
return 'medium';
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
exports.SkillRecommendationService = SkillRecommendationService;
|
|
76
|
+
exports.SkillRecommendationService = SkillRecommendationService = __decorate([
|
|
77
|
+
(0, common_1.Injectable)()
|
|
78
|
+
], SkillRecommendationService);
|
|
79
|
+
//# sourceMappingURL=skill-recommendation.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-recommendation.service.js","sourceRoot":"","sources":["../../../src/skill/skill-recommendation.service.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAA4C;AAK5C,qDAAqD;AAKrD,MAAM,kBAAkB,GAA2B;IACjD,sBAAsB,EAAE,kCAAkC;IAC1D,yBAAyB,EAAE,kCAAkC;IAC7D,aAAa,EAAE,4CAA4C;IAC3D,iBAAiB,EAAE,+CAA+C;IAClE,eAAe,EAAE,6BAA6B;IAC9C,iBAAiB,EAAE,sCAAsC;IACzD,6BAA6B,EAAE,kCAAkC;IACjE,6BAA6B,EAAE,mCAAmC;CACnE,CAAC;AAMK,IAAM,0BAA0B,GAAhC,MAAM,0BAA0B;IAMrC,eAAe,CAAC,MAAc;QAC5B,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;QAGpC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,OAAO;gBACL,eAAe,EAAE,EAAE;gBACnB,cAAc,EAAE,MAAM;aACvB,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,kCAAiB,GAAE,CAAC;QACrC,MAAM,YAAY,GAAG,IAAI,GAAG,EAGzB,CAAC;QAGJ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,eAAe,GAAa,EAAE,CAAC;YAErC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACvC,IAAI,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;oBAEhC,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC;oBACrC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACtC,CAAC;YACH,CAAC;YAGD,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gBACvE,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE;oBAClC,eAAe;oBACf,QAAQ,EAAE,OAAO,CAAC,QAAQ;iBAC3B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAGD,MAAM,eAAe,GAA0B,EAAE,CAAC;QAElD,KAAK,MAAM,CAAC,SAAS,EAAE,EAAE,eAAe,EAAE,CAAC,IAAI,YAAY,EAAE,CAAC;YAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,mBAAmB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;YAEpE,eAAe,CAAC,IAAI,CAAC;gBACnB,SAAS;gBACT,UAAU;gBACV,eAAe;gBACf,WAAW,EAAE,kBAAkB,CAAC,SAAS,CAAC,IAAI,UAAU,SAAS,EAAE;aACpE,CAAC,CAAC;QACL,CAAC;QAGD,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5B,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC;YAC/D,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC;YAC/D,OAAO,SAAS,GAAG,SAAS,CAAC;QAC/B,CAAC,CAAC,CAAC;QAEH,OAAO;YACL,eAAe;YACf,cAAc,EAAE,MAAM;SACvB,CAAC;IACJ,CAAC;IAKO,mBAAmB,CAAC,UAAkB;QAC5C,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAA;AAhFY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,mBAAU,GAAE;GACA,0BAA0B,CAgFtC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface SkillTrigger {
|
|
2
|
+
skillName: string;
|
|
3
|
+
patterns: RegExp[];
|
|
4
|
+
priority: number;
|
|
5
|
+
}
|
|
6
|
+
export interface SkillRecommendation {
|
|
7
|
+
skillName: string;
|
|
8
|
+
confidence: 'high' | 'medium' | 'low';
|
|
9
|
+
matchedPatterns: string[];
|
|
10
|
+
description: string;
|
|
11
|
+
}
|
|
12
|
+
export interface RecommendSkillsResult {
|
|
13
|
+
recommendations: SkillRecommendation[];
|
|
14
|
+
originalPrompt: string;
|
|
15
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-recommendation.types.js","sourceRoot":"","sources":["../../../src/skill/skill-recommendation.types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SkillTrigger } from './skill-recommendation.types';
|
|
2
|
+
import { type SupportedLanguage, type SkillKeywordConfig } from './i18n/keywords.types';
|
|
3
|
+
export declare function buildPatternForLanguage(keywords: string[], language: SupportedLanguage): RegExp;
|
|
4
|
+
export declare function buildTriggersFromKeywords(config: SkillKeywordConfig[]): SkillTrigger[];
|
|
5
|
+
export declare function getSkillTriggers(): SkillTrigger[];
|
|
6
|
+
export declare function getSortedTriggers(): SkillTrigger[];
|
|
7
|
+
export declare function clearTriggerCache(): void;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildPatternForLanguage = buildPatternForLanguage;
|
|
4
|
+
exports.buildTriggersFromKeywords = buildTriggersFromKeywords;
|
|
5
|
+
exports.getSkillTriggers = getSkillTriggers;
|
|
6
|
+
exports.getSortedTriggers = getSortedTriggers;
|
|
7
|
+
exports.clearTriggerCache = clearTriggerCache;
|
|
8
|
+
const keywords_1 = require("./i18n/keywords");
|
|
9
|
+
const keywords_types_1 = require("./i18n/keywords.types");
|
|
10
|
+
function buildPatternForLanguage(keywords, language) {
|
|
11
|
+
const { useWordBoundary } = keywords_types_1.LANGUAGE_OPTIONS[language];
|
|
12
|
+
const escaped = keywords.map(kw => kw.replace(/[.*+?^${}()|[\]\\]/g, '\\$&').replace(/\s+/g, '\\s*'));
|
|
13
|
+
if (useWordBoundary) {
|
|
14
|
+
return new RegExp(`\\b(${escaped.join('|')})\\b`, 'i');
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
return new RegExp(`(${escaped.join('|')})`, 'i');
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function buildTriggersFromKeywords(config) {
|
|
21
|
+
return config.map(skill => {
|
|
22
|
+
const patterns = [];
|
|
23
|
+
for (const conceptKeywords of Object.values(skill.concepts)) {
|
|
24
|
+
for (const [lang, keywords] of Object.entries(conceptKeywords)) {
|
|
25
|
+
if (Array.isArray(keywords) && keywords.length > 0) {
|
|
26
|
+
patterns.push(buildPatternForLanguage(keywords, lang));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
skillName: skill.skillName,
|
|
32
|
+
patterns,
|
|
33
|
+
priority: skill.priority,
|
|
34
|
+
};
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
let cachedTriggers = null;
|
|
38
|
+
function getSkillTriggers() {
|
|
39
|
+
if (!cachedTriggers) {
|
|
40
|
+
cachedTriggers = buildTriggersFromKeywords(keywords_1.SKILL_KEYWORDS);
|
|
41
|
+
}
|
|
42
|
+
return cachedTriggers;
|
|
43
|
+
}
|
|
44
|
+
function getSortedTriggers() {
|
|
45
|
+
return [...getSkillTriggers()].sort((a, b) => b.priority - a.priority);
|
|
46
|
+
}
|
|
47
|
+
function clearTriggerCache() {
|
|
48
|
+
cachedTriggers = null;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=skill-triggers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-triggers.js","sourceRoot":"","sources":["../../../src/skill/skill-triggers.ts"],"names":[],"mappings":";;AAeA,0DAkBC;AAKD,8DAsBC;AAOD,4CAKC;AAKD,8CAEC;AAKD,8CAEC;AArFD,8CAAiD;AACjD,0DAI+B;AAS/B,SAAgB,uBAAuB,CACrC,QAAkB,EAClB,QAA2B;IAE3B,MAAM,EAAE,eAAe,EAAE,GAAG,iCAAgB,CAAC,QAAQ,CAAC,CAAC;IAGvD,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAC1B,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CACxE,CAAC;IAEF,IAAI,eAAe,EAAE,CAAC;QAEpB,OAAO,IAAI,MAAM,CAAC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QAEN,OAAO,IAAI,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACnD,CAAC;AACH,CAAC;AAKD,SAAgB,yBAAyB,CACvC,MAA4B;IAE5B,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;QACxB,MAAM,QAAQ,GAAa,EAAE,CAAC;QAE9B,KAAK,MAAM,eAAe,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,KAAK,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnD,QAAQ,CAAC,IAAI,CACX,uBAAuB,CAAC,QAAQ,EAAE,IAAyB,CAAC,CAC7D,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO;YACL,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,QAAQ;YACR,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,IAAI,cAAc,GAA0B,IAAI,CAAC;AAKjD,SAAgB,gBAAgB;IAC9B,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,cAAc,GAAG,yBAAyB,CAAC,yBAAc,CAAC,CAAC;IAC7D,CAAC;IACD,OAAO,cAAc,CAAC;AACxB,CAAC;AAKD,SAAgB,iBAAiB;IAC/B,OAAO,CAAC,GAAG,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;AACzE,CAAC;AAKD,SAAgB,iBAAiB;IAC/B,cAAc,GAAG,IAAI,CAAC;AACxB,CAAC"}
|