codingbuddy 1.1.0 → 1.1.2

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.
@@ -0,0 +1,4 @@
1
+ export * from './skill-recommendation.types';
2
+ export { SkillRecommendationService } from './skill-recommendation.service';
3
+ export { getSkillTriggers, getSortedTriggers } from './skill-triggers';
4
+ export * from './i18n';
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.getSortedTriggers = exports.getSkillTriggers = exports.SkillRecommendationService = void 0;
18
+ __exportStar(require("./skill-recommendation.types"), exports);
19
+ var skill_recommendation_service_1 = require("./skill-recommendation.service");
20
+ Object.defineProperty(exports, "SkillRecommendationService", { enumerable: true, get: function () { return skill_recommendation_service_1.SkillRecommendationService; } });
21
+ var skill_triggers_1 = require("./skill-triggers");
22
+ Object.defineProperty(exports, "getSkillTriggers", { enumerable: true, get: function () { return skill_triggers_1.getSkillTriggers; } });
23
+ Object.defineProperty(exports, "getSortedTriggers", { enumerable: true, get: function () { return skill_triggers_1.getSortedTriggers; } });
24
+ __exportStar(require("./i18n"), exports);
25
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/skill/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAQA,+DAA6C;AAG7C,+EAA4E;AAAnE,0IAAA,0BAA0B,OAAA;AAGnC,mDAAuE;AAA9D,kHAAA,gBAAgB,OAAA;AAAE,mHAAA,iBAAiB,OAAA;AAG5C,yCAAuB"}
@@ -0,0 +1,6 @@
1
+ import type { RecommendSkillsResult, ListSkillsResult, ListSkillsOptions } from './skill-recommendation.types';
2
+ export declare class SkillRecommendationService {
3
+ recommendSkills(prompt: string): RecommendSkillsResult;
4
+ private determineConfidence;
5
+ listSkills(options?: ListSkillsOptions): ListSkillsResult;
6
+ }
@@ -0,0 +1,93 @@
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 keywords_1 = require("./i18n/keywords");
13
+ function getSkillDescription(skillName) {
14
+ const skill = keywords_1.SKILL_KEYWORDS.find(s => s.skillName === skillName);
15
+ return skill?.description ?? `Skill: ${skillName}`;
16
+ }
17
+ let SkillRecommendationService = class SkillRecommendationService {
18
+ recommendSkills(prompt) {
19
+ const trimmedPrompt = prompt.trim();
20
+ if (trimmedPrompt.length === 0) {
21
+ return {
22
+ recommendations: [],
23
+ originalPrompt: prompt,
24
+ };
25
+ }
26
+ const triggers = (0, skill_triggers_1.getSortedTriggers)();
27
+ const skillMatches = new Map();
28
+ for (const trigger of triggers) {
29
+ const matchedPatterns = [];
30
+ for (const pattern of trigger.patterns) {
31
+ if (pattern.test(trimmedPrompt)) {
32
+ const patternSource = pattern.source;
33
+ matchedPatterns.push(patternSource);
34
+ }
35
+ }
36
+ if (matchedPatterns.length > 0 && !skillMatches.has(trigger.skillName)) {
37
+ skillMatches.set(trigger.skillName, {
38
+ matchedPatterns,
39
+ priority: trigger.priority,
40
+ });
41
+ }
42
+ }
43
+ const recommendations = [];
44
+ for (const [skillName, { matchedPatterns }] of skillMatches) {
45
+ const confidence = this.determineConfidence(matchedPatterns.length);
46
+ recommendations.push({
47
+ skillName,
48
+ confidence,
49
+ matchedPatterns,
50
+ description: getSkillDescription(skillName),
51
+ });
52
+ }
53
+ recommendations.sort((a, b) => {
54
+ const aPriority = skillMatches.get(a.skillName)?.priority ?? 0;
55
+ const bPriority = skillMatches.get(b.skillName)?.priority ?? 0;
56
+ return bPriority - aPriority;
57
+ });
58
+ return {
59
+ recommendations,
60
+ originalPrompt: prompt,
61
+ };
62
+ }
63
+ determineConfidence(matchCount) {
64
+ if (matchCount >= 3) {
65
+ return 'high';
66
+ }
67
+ return 'medium';
68
+ }
69
+ listSkills(options) {
70
+ let skills = keywords_1.SKILL_KEYWORDS.map(skill => ({
71
+ name: skill.skillName,
72
+ priority: skill.priority,
73
+ description: skill.description,
74
+ concepts: Object.keys(skill.concepts),
75
+ }));
76
+ if (options?.minPriority !== undefined) {
77
+ skills = skills.filter(s => s.priority >= options.minPriority);
78
+ }
79
+ if (options?.maxPriority !== undefined) {
80
+ skills = skills.filter(s => s.priority <= options.maxPriority);
81
+ }
82
+ skills.sort((a, b) => b.priority - a.priority);
83
+ return {
84
+ skills,
85
+ total: skills.length,
86
+ };
87
+ }
88
+ };
89
+ exports.SkillRecommendationService = SkillRecommendationService;
90
+ exports.SkillRecommendationService = SkillRecommendationService = __decorate([
91
+ (0, common_1.Injectable)()
92
+ ], SkillRecommendationService);
93
+ //# 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;AAQ5C,qDAAqD;AACrD,8CAAiD;AAKjD,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,MAAM,KAAK,GAAG,yBAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAClE,OAAO,KAAK,EAAE,WAAW,IAAI,UAAU,SAAS,EAAE,CAAC;AACrD,CAAC;AAMM,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,mBAAmB,CAAC,SAAS,CAAC;aAC5C,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;IAgBD,UAAU,CAAC,OAA2B;QACpC,IAAI,MAAM,GAAgB,yBAAc,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACrD,IAAI,EAAE,KAAK,CAAC,SAAS;YACrB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,WAAW,EAAE,KAAK,CAAC,WAAW;YAC9B,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;SACtC,CAAC,CAAC,CAAC;QAGJ,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAY,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;YACvC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,WAAY,CAAC,CAAC;QAClE,CAAC;QAGD,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO;YACL,MAAM;YACN,KAAK,EAAE,MAAM,CAAC,MAAM;SACrB,CAAC;IACJ,CAAC;CACF,CAAA;AAvHY,gEAA0B;qCAA1B,0BAA0B;IADtC,IAAA,mBAAU,GAAE;GACA,0BAA0B,CAuHtC"}
@@ -0,0 +1,29 @@
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
+ }
16
+ export interface SkillInfo {
17
+ name: string;
18
+ priority: number;
19
+ description: string;
20
+ concepts: string[];
21
+ }
22
+ export interface ListSkillsResult {
23
+ skills: SkillInfo[];
24
+ total: number;
25
+ }
26
+ export interface ListSkillsOptions {
27
+ minPriority?: number;
28
+ maxPriority?: number;
29
+ }
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=skill-recommendation.types.js.map
@@ -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"}