codingbuddy 2.0.0 → 2.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/dist/src/app.module.js +4 -0
- package/dist/src/app.module.js.map +1 -1
- package/dist/src/checklist/checklist.module.d.ts +2 -0
- package/dist/src/checklist/checklist.module.js +29 -0
- package/dist/src/checklist/checklist.module.js.map +1 -0
- package/dist/src/checklist/checklist.schema.d.ts +14 -0
- package/dist/src/checklist/checklist.schema.js +189 -0
- package/dist/src/checklist/checklist.schema.js.map +1 -0
- package/dist/src/checklist/checklist.service.d.ts +21 -0
- package/dist/src/checklist/checklist.service.js +258 -0
- package/dist/src/checklist/checklist.service.js.map +1 -0
- package/dist/src/checklist/checklist.types.d.ts +56 -0
- package/dist/src/checklist/checklist.types.js +24 -0
- package/dist/src/checklist/checklist.types.js.map +1 -0
- package/dist/src/checklist/index.d.ts +3 -0
- package/dist/src/checklist/index.js +20 -0
- package/dist/src/checklist/index.js.map +1 -0
- package/dist/src/cli/cli.types.d.ts +0 -6
- package/dist/src/cli/index.d.ts +1 -1
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/init/init.command.js +10 -1
- package/dist/src/cli/init/init.command.js.map +1 -1
- package/dist/src/cli/init/prompts/agent-prompt.d.ts +9 -0
- package/dist/src/cli/init/prompts/agent-prompt.js +28 -0
- package/dist/src/cli/init/prompts/agent-prompt.js.map +1 -0
- package/dist/src/cli/init/prompts/index.d.ts +5 -0
- package/dist/src/cli/init/prompts/index.js +9 -1
- package/dist/src/cli/init/prompts/index.js.map +1 -1
- package/dist/src/cli/init/prompts/language-prompt.d.ts +8 -0
- package/dist/src/cli/init/prompts/language-prompt.js +30 -0
- package/dist/src/cli/init/prompts/language-prompt.js.map +1 -0
- package/dist/src/cli/init/templates/template.renderer.js +16 -6
- package/dist/src/cli/init/templates/template.renderer.js.map +1 -1
- package/dist/src/cli/init/templates/template.types.d.ts +1 -0
- package/dist/src/context/context.module.d.ts +2 -0
- package/dist/src/context/context.module.js +23 -0
- package/dist/src/context/context.module.js.map +1 -0
- package/dist/src/context/context.service.d.ts +21 -0
- package/dist/src/context/context.service.js +286 -0
- package/dist/src/context/context.service.js.map +1 -0
- package/dist/src/context/context.types.d.ts +50 -0
- package/dist/src/context/context.types.js +42 -0
- package/dist/src/context/context.types.js.map +1 -0
- package/dist/src/context/index.d.ts +3 -0
- package/dist/src/context/index.js +20 -0
- package/dist/src/context/index.js.map +1 -0
- package/dist/src/context/intent-patterns.d.ts +7 -0
- package/dist/src/context/intent-patterns.js +50 -0
- package/dist/src/context/intent-patterns.js.map +1 -0
- package/dist/src/keyword/keyword.service.d.ts +6 -2
- package/dist/src/keyword/keyword.service.js +7 -6
- package/dist/src/keyword/keyword.service.js.map +1 -1
- package/dist/src/keyword/keyword.types.d.ts +15 -2
- package/dist/src/keyword/keyword.types.js +63 -1
- package/dist/src/keyword/keyword.types.js.map +1 -1
- package/dist/src/keyword/primary-agent-resolver.d.ts +6 -0
- package/dist/src/keyword/primary-agent-resolver.js +211 -0
- package/dist/src/keyword/primary-agent-resolver.js.map +1 -1
- package/dist/src/mcp/handlers/agent.handler.d.ts +11 -0
- package/dist/src/mcp/handlers/agent.handler.js +167 -0
- package/dist/src/mcp/handlers/agent.handler.js.map +1 -0
- package/dist/src/mcp/handlers/base.handler.d.ts +15 -0
- package/dist/src/mcp/handlers/base.handler.js +3 -0
- package/dist/src/mcp/handlers/base.handler.js.map +1 -0
- package/dist/src/mcp/handlers/checklist-context.handler.d.ts +13 -0
- package/dist/src/mcp/handlers/checklist-context.handler.js +141 -0
- package/dist/src/mcp/handlers/checklist-context.handler.js.map +1 -0
- package/dist/src/mcp/handlers/config.handler.d.ts +15 -0
- package/dist/src/mcp/handlers/config.handler.js +104 -0
- package/dist/src/mcp/handlers/config.handler.js.map +1 -0
- package/dist/src/mcp/handlers/index.d.ts +8 -0
- package/dist/src/mcp/handlers/index.js +17 -0
- package/dist/src/mcp/handlers/index.js.map +1 -0
- package/dist/src/mcp/handlers/mode.handler.d.ts +16 -0
- package/dist/src/mcp/handlers/mode.handler.js +100 -0
- package/dist/src/mcp/handlers/mode.handler.js.map +1 -0
- package/dist/src/mcp/handlers/rules.handler.d.ts +11 -0
- package/dist/src/mcp/handlers/rules.handler.js +99 -0
- package/dist/src/mcp/handlers/rules.handler.js.map +1 -0
- package/dist/src/mcp/handlers/skill.handler.d.ts +11 -0
- package/dist/src/mcp/handlers/skill.handler.js +111 -0
- package/dist/src/mcp/handlers/skill.handler.js.map +1 -0
- package/dist/src/mcp/mcp.module.js +26 -1
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/mcp/mcp.service.d.ts +3 -25
- package/dist/src/mcp/mcp.service.js +13 -366
- package/dist/src/mcp/mcp.service.js.map +1 -1
- package/dist/src/model/index.d.ts +1 -0
- package/dist/src/model/index.js +3 -0
- package/dist/src/model/index.js.map +1 -1
- package/dist/src/model/model-resolver.service.d.ts +13 -0
- package/dist/src/model/model-resolver.service.js +63 -0
- package/dist/src/model/model-resolver.service.js.map +1 -0
- package/dist/src/model/model.resolver.js +2 -1
- package/dist/src/model/model.resolver.js.map +1 -1
- package/dist/src/shared/filesystem.interface.d.ts +15 -0
- package/dist/src/shared/filesystem.interface.js +14 -0
- package/dist/src/shared/filesystem.interface.js.map +1 -0
- package/dist/src/shared/node-filesystem.service.d.ts +5 -0
- package/dist/src/shared/node-filesystem.service.js +25 -0
- package/dist/src/shared/node-filesystem.service.js.map +1 -0
- package/dist/src/shared/path.utils.js.map +1 -1
- package/dist/src/shared/pattern-matcher.d.ts +11 -0
- package/dist/src/shared/pattern-matcher.js +39 -0
- package/dist/src/shared/pattern-matcher.js.map +1 -0
- package/dist/src/shared/security.utils.d.ts +17 -0
- package/dist/src/shared/security.utils.js +63 -0
- package/dist/src/shared/security.utils.js.map +1 -1
- package/dist/src/shared/validation.constants.d.ts +10 -0
- package/dist/src/shared/validation.constants.js +42 -1
- package/dist/src/shared/validation.constants.js.map +1 -1
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/dist/src/config/config.types.d.ts +0 -2
- package/dist/src/config/config.types.js +0 -6
- package/dist/src/config/config.types.js.map +0 -1
|
@@ -0,0 +1,111 @@
|
|
|
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
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.SkillHandler = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const skill_recommendation_service_1 = require("../../skill/skill-recommendation.service");
|
|
15
|
+
const response_utils_1 = require("../response.utils");
|
|
16
|
+
const security_utils_1 = require("../../shared/security.utils");
|
|
17
|
+
const validation_constants_1 = require("../../shared/validation.constants");
|
|
18
|
+
let SkillHandler = class SkillHandler {
|
|
19
|
+
constructor(skillRecommendationService) {
|
|
20
|
+
this.skillRecommendationService = skillRecommendationService;
|
|
21
|
+
this.handledTools = ['recommend_skills', 'list_skills'];
|
|
22
|
+
}
|
|
23
|
+
async handle(toolName, args) {
|
|
24
|
+
if (!this.handledTools.includes(toolName)) {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
const validation = (0, security_utils_1.sanitizeHandlerArgs)(args);
|
|
28
|
+
if (!validation.safe) {
|
|
29
|
+
return (0, response_utils_1.createErrorResponse)(validation.error);
|
|
30
|
+
}
|
|
31
|
+
switch (toolName) {
|
|
32
|
+
case 'recommend_skills':
|
|
33
|
+
return this.handleRecommendSkills(args);
|
|
34
|
+
case 'list_skills':
|
|
35
|
+
return this.handleListSkills(args);
|
|
36
|
+
default:
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
getToolDefinitions() {
|
|
41
|
+
return [
|
|
42
|
+
{
|
|
43
|
+
name: 'recommend_skills',
|
|
44
|
+
description: 'Recommend skills based on user prompt with multi-language support',
|
|
45
|
+
inputSchema: {
|
|
46
|
+
type: 'object',
|
|
47
|
+
properties: {
|
|
48
|
+
prompt: {
|
|
49
|
+
type: 'string',
|
|
50
|
+
description: 'User prompt to analyze for skill recommendations',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
required: ['prompt'],
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
name: 'list_skills',
|
|
58
|
+
description: 'List all available skills with optional filtering',
|
|
59
|
+
inputSchema: {
|
|
60
|
+
type: 'object',
|
|
61
|
+
properties: {
|
|
62
|
+
minPriority: {
|
|
63
|
+
type: 'number',
|
|
64
|
+
description: 'Minimum priority threshold (inclusive)',
|
|
65
|
+
},
|
|
66
|
+
maxPriority: {
|
|
67
|
+
type: 'number',
|
|
68
|
+
description: 'Maximum priority threshold (inclusive)',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
required: [],
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
];
|
|
75
|
+
}
|
|
76
|
+
handleRecommendSkills(args) {
|
|
77
|
+
const prompt = (0, validation_constants_1.extractRequiredString)(args, 'prompt');
|
|
78
|
+
if (prompt === null) {
|
|
79
|
+
return (0, response_utils_1.createErrorResponse)('Missing required parameter: prompt');
|
|
80
|
+
}
|
|
81
|
+
try {
|
|
82
|
+
const result = this.skillRecommendationService.recommendSkills(prompt);
|
|
83
|
+
return (0, response_utils_1.createJsonResponse)(result);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
return (0, response_utils_1.createErrorResponse)(`Failed to recommend skills: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
handleListSkills(args) {
|
|
90
|
+
try {
|
|
91
|
+
const options = {};
|
|
92
|
+
if (typeof args?.minPriority === 'number') {
|
|
93
|
+
options.minPriority = args.minPriority;
|
|
94
|
+
}
|
|
95
|
+
if (typeof args?.maxPriority === 'number') {
|
|
96
|
+
options.maxPriority = args.maxPriority;
|
|
97
|
+
}
|
|
98
|
+
const result = this.skillRecommendationService.listSkills(options);
|
|
99
|
+
return (0, response_utils_1.createJsonResponse)(result);
|
|
100
|
+
}
|
|
101
|
+
catch (error) {
|
|
102
|
+
return (0, response_utils_1.createErrorResponse)(`Failed to list skills: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
exports.SkillHandler = SkillHandler;
|
|
107
|
+
exports.SkillHandler = SkillHandler = __decorate([
|
|
108
|
+
(0, common_1.Injectable)(),
|
|
109
|
+
__metadata("design:paramtypes", [skill_recommendation_service_1.SkillRecommendationService])
|
|
110
|
+
], SkillHandler);
|
|
111
|
+
//# sourceMappingURL=skill.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.handler.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/skill.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -15,8 +15,20 @@ const keyword_module_1 = require("../keyword/keyword.module");
|
|
|
15
15
|
const config_module_1 = require("../config/config.module");
|
|
16
16
|
const analyzer_module_1 = require("../analyzer/analyzer.module");
|
|
17
17
|
const agent_module_1 = require("../agent/agent.module");
|
|
18
|
+
const checklist_module_1 = require("../checklist/checklist.module");
|
|
19
|
+
const context_module_1 = require("../context/context.module");
|
|
18
20
|
const skill_recommendation_service_1 = require("../skill/skill-recommendation.service");
|
|
19
21
|
const language_service_1 = require("../shared/language.service");
|
|
22
|
+
const model_1 = require("../model");
|
|
23
|
+
const handlers_1 = require("./handlers");
|
|
24
|
+
const handlers = [
|
|
25
|
+
handlers_1.RulesHandler,
|
|
26
|
+
handlers_1.ConfigHandler,
|
|
27
|
+
handlers_1.SkillHandler,
|
|
28
|
+
handlers_1.AgentHandler,
|
|
29
|
+
handlers_1.ModeHandler,
|
|
30
|
+
handlers_1.ChecklistContextHandler,
|
|
31
|
+
];
|
|
20
32
|
let McpModule = class McpModule {
|
|
21
33
|
};
|
|
22
34
|
exports.McpModule = McpModule;
|
|
@@ -28,9 +40,22 @@ exports.McpModule = McpModule = __decorate([
|
|
|
28
40
|
config_module_1.CodingBuddyConfigModule,
|
|
29
41
|
analyzer_module_1.AnalyzerModule,
|
|
30
42
|
agent_module_1.AgentModule,
|
|
43
|
+
checklist_module_1.ChecklistModule,
|
|
44
|
+
context_module_1.ContextModule,
|
|
31
45
|
],
|
|
32
46
|
controllers: [mcp_controller_1.McpController],
|
|
33
|
-
providers: [
|
|
47
|
+
providers: [
|
|
48
|
+
mcp_service_1.McpService,
|
|
49
|
+
skill_recommendation_service_1.SkillRecommendationService,
|
|
50
|
+
language_service_1.LanguageService,
|
|
51
|
+
model_1.ModelResolverService,
|
|
52
|
+
...handlers,
|
|
53
|
+
{
|
|
54
|
+
provide: handlers_1.TOOL_HANDLERS,
|
|
55
|
+
useFactory: (...handlerInstances) => handlerInstances,
|
|
56
|
+
inject: handlers,
|
|
57
|
+
},
|
|
58
|
+
],
|
|
34
59
|
exports: [mcp_service_1.McpService],
|
|
35
60
|
})
|
|
36
61
|
], McpModule);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../../src/mcp/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+CAA2C;AAC3C,qDAAiD;AACjD,wDAAoD;AACpD,8DAA0D;AAC1D,2DAAkE;AAClE,iEAA6D;AAC7D,wDAAoD;AACpD,wFAAmF;AACnF,iEAA6D;
|
|
1
|
+
{"version":3,"file":"mcp.module.js","sourceRoot":"","sources":["../../../src/mcp/mcp.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,+CAA2C;AAC3C,qDAAiD;AACjD,wDAAoD;AACpD,8DAA0D;AAC1D,2DAAkE;AAClE,iEAA6D;AAC7D,wDAAoD;AACpD,oEAAgE;AAChE,8DAA0D;AAC1D,wFAAmF;AACnF,iEAA6D;AAC7D,oCAAgD;AAGhD,yCAQoB;AAEpB,MAAM,QAAQ,GAAG;IACf,uBAAY;IACZ,wBAAa;IACb,uBAAY;IACZ,uBAAY;IACZ,sBAAW;IACX,kCAAuB;CACxB,CAAC;AA6BK,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IA3BrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,0BAAW;YACX,8BAAa;YACb,uCAAuB;YACvB,gCAAc;YACd,0BAAW;YACX,kCAAe;YACf,8BAAa;SACd;QACD,WAAW,EAAE,CAAC,8BAAa,CAAC;QAC5B,SAAS,EAAE;YACT,wBAAU;YACV,yDAA0B;YAC1B,kCAAe;YACf,4BAAoB;YACpB,GAAG,QAAQ;YACX;gBACE,OAAO,EAAE,wBAAa;gBACtB,UAAU,EAAE,CACV,GAAG,gBAA2D,EAC9D,EAAE,CAAC,gBAAgB;gBACrB,MAAM,EAAE,QAAQ;aACjB;SACF;QACD,OAAO,EAAE,CAAC,wBAAU,CAAC;KACtB,CAAC;GACW,SAAS,CAAG"}
|
|
@@ -1,25 +1,15 @@
|
|
|
1
1
|
import { OnModuleInit } from '@nestjs/common';
|
|
2
2
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
3
3
|
import { RulesService } from '../rules/rules.service';
|
|
4
|
-
import { KeywordService } from '../keyword/keyword.service';
|
|
5
4
|
import { ConfigService } from '../config/config.service';
|
|
6
|
-
import {
|
|
7
|
-
import { AnalyzerService } from '../analyzer/analyzer.service';
|
|
8
|
-
import { SkillRecommendationService } from '../skill/skill-recommendation.service';
|
|
9
|
-
import { LanguageService } from '../shared/language.service';
|
|
10
|
-
import { AgentService } from '../agent/agent.service';
|
|
5
|
+
import type { ToolHandler } from './handlers';
|
|
11
6
|
export declare class McpService implements OnModuleInit {
|
|
12
7
|
private rulesService;
|
|
13
|
-
private keywordService;
|
|
14
8
|
private configService;
|
|
15
|
-
private
|
|
16
|
-
private analyzerService;
|
|
17
|
-
private skillRecommendationService;
|
|
18
|
-
private languageService;
|
|
19
|
-
private agentService;
|
|
9
|
+
private toolHandlers;
|
|
20
10
|
private server;
|
|
21
11
|
private readonly logger;
|
|
22
|
-
constructor(rulesService: RulesService,
|
|
12
|
+
constructor(rulesService: RulesService, configService: ConfigService, toolHandlers: ToolHandler[]);
|
|
23
13
|
onModuleInit(): void;
|
|
24
14
|
startStdio(): Promise<void>;
|
|
25
15
|
getServer(): Server<{
|
|
@@ -59,17 +49,5 @@ export declare class McpService implements OnModuleInit {
|
|
|
59
49
|
private registerResources;
|
|
60
50
|
private registerTools;
|
|
61
51
|
private registerPrompts;
|
|
62
|
-
private handleSearchRules;
|
|
63
|
-
private handleGetAgentDetails;
|
|
64
|
-
private handleParseMode;
|
|
65
|
-
private resolveModelForMode;
|
|
66
|
-
private loadGlobalDefaultModel;
|
|
67
|
-
private loadModeModel;
|
|
68
|
-
private handleGetProjectConfig;
|
|
69
|
-
private handleSuggestConfigUpdates;
|
|
70
|
-
private handleRecommendSkills;
|
|
71
|
-
private handleListSkills;
|
|
72
|
-
private handleGetAgentSystemPrompt;
|
|
73
|
-
private handlePrepareParallelAgents;
|
|
74
52
|
private formatProjectContext;
|
|
75
53
|
}
|
|
@@ -19,26 +19,13 @@ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
|
|
|
19
19
|
const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
|
|
20
20
|
const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
|
|
21
21
|
const rules_service_1 = require("../rules/rules.service");
|
|
22
|
-
const keyword_service_1 = require("../keyword/keyword.service");
|
|
23
|
-
const keyword_module_1 = require("../keyword/keyword.module");
|
|
24
22
|
const config_service_1 = require("../config/config.service");
|
|
25
|
-
const
|
|
26
|
-
const analyzer_service_1 = require("../analyzer/analyzer.service");
|
|
27
|
-
const skill_recommendation_service_1 = require("../skill/skill-recommendation.service");
|
|
28
|
-
const language_service_1 = require("../shared/language.service");
|
|
29
|
-
const agent_service_1 = require("../agent/agent.service");
|
|
30
|
-
const response_utils_1 = require("./response.utils");
|
|
31
|
-
const model_1 = require("../model");
|
|
23
|
+
const handlers_1 = require("./handlers");
|
|
32
24
|
let McpService = McpService_1 = class McpService {
|
|
33
|
-
constructor(rulesService,
|
|
25
|
+
constructor(rulesService, configService, toolHandlers) {
|
|
34
26
|
this.rulesService = rulesService;
|
|
35
|
-
this.keywordService = keywordService;
|
|
36
27
|
this.configService = configService;
|
|
37
|
-
this.
|
|
38
|
-
this.analyzerService = analyzerService;
|
|
39
|
-
this.skillRecommendationService = skillRecommendationService;
|
|
40
|
-
this.languageService = languageService;
|
|
41
|
-
this.agentService = agentService;
|
|
28
|
+
this.toolHandlers = toolHandlers;
|
|
42
29
|
this.logger = new common_1.Logger(McpService_1.name);
|
|
43
30
|
this.server = new index_js_1.Server({
|
|
44
31
|
name: 'codingbuddy-rules-server',
|
|
@@ -139,190 +126,18 @@ let McpService = McpService_1 = class McpService {
|
|
|
139
126
|
}
|
|
140
127
|
registerTools() {
|
|
141
128
|
this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
{
|
|
145
|
-
name: 'search_rules',
|
|
146
|
-
description: 'Search for rules and guidelines',
|
|
147
|
-
inputSchema: {
|
|
148
|
-
type: 'object',
|
|
149
|
-
properties: {
|
|
150
|
-
query: { type: 'string', description: 'Search query' },
|
|
151
|
-
},
|
|
152
|
-
required: ['query'],
|
|
153
|
-
},
|
|
154
|
-
},
|
|
155
|
-
{
|
|
156
|
-
name: 'get_agent_details',
|
|
157
|
-
description: 'Get detailed profile of a specific AI agent',
|
|
158
|
-
inputSchema: {
|
|
159
|
-
type: 'object',
|
|
160
|
-
properties: {
|
|
161
|
-
agentName: { type: 'string', description: 'Name of the agent' },
|
|
162
|
-
},
|
|
163
|
-
required: ['agentName'],
|
|
164
|
-
},
|
|
165
|
-
},
|
|
166
|
-
{
|
|
167
|
-
name: 'parse_mode',
|
|
168
|
-
description: 'MANDATORY: When user message starts with PLAN, ACT, or EVAL keyword (or localized equivalents: Korean 계획/실행/평가, Japanese 計画/実行/評価, Chinese 计划/执行/评估, Spanish PLANIFICAR/ACTUAR/EVALUAR), you MUST call this tool FIRST before any other action. This tool parses the workflow mode and returns critical rules that MUST be followed. Failure to call this tool when these keywords are present is a protocol violation.',
|
|
169
|
-
inputSchema: {
|
|
170
|
-
type: 'object',
|
|
171
|
-
properties: {
|
|
172
|
-
prompt: {
|
|
173
|
-
type: 'string',
|
|
174
|
-
description: 'User prompt that may start with PLAN/ACT/EVAL keyword',
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
required: ['prompt'],
|
|
178
|
-
},
|
|
179
|
-
},
|
|
180
|
-
{
|
|
181
|
-
name: 'get_project_config',
|
|
182
|
-
description: 'Get project configuration including tech stack, architecture, conventions, and language settings',
|
|
183
|
-
inputSchema: {
|
|
184
|
-
type: 'object',
|
|
185
|
-
properties: {},
|
|
186
|
-
required: [],
|
|
187
|
-
},
|
|
188
|
-
},
|
|
189
|
-
{
|
|
190
|
-
name: 'suggest_config_updates',
|
|
191
|
-
description: 'Analyze the project and suggest config updates based on detected changes (new frameworks, dependencies, patterns)',
|
|
192
|
-
inputSchema: {
|
|
193
|
-
type: 'object',
|
|
194
|
-
properties: {
|
|
195
|
-
projectRoot: {
|
|
196
|
-
type: 'string',
|
|
197
|
-
description: 'Project root directory (defaults to current working directory)',
|
|
198
|
-
},
|
|
199
|
-
},
|
|
200
|
-
required: [],
|
|
201
|
-
},
|
|
202
|
-
},
|
|
203
|
-
{
|
|
204
|
-
name: 'recommend_skills',
|
|
205
|
-
description: 'Recommend skills based on user prompt with multi-language support',
|
|
206
|
-
inputSchema: {
|
|
207
|
-
type: 'object',
|
|
208
|
-
properties: {
|
|
209
|
-
prompt: {
|
|
210
|
-
type: 'string',
|
|
211
|
-
description: 'User prompt to analyze for skill recommendations',
|
|
212
|
-
},
|
|
213
|
-
},
|
|
214
|
-
required: ['prompt'],
|
|
215
|
-
},
|
|
216
|
-
},
|
|
217
|
-
{
|
|
218
|
-
name: 'list_skills',
|
|
219
|
-
description: 'List all available skills with optional filtering',
|
|
220
|
-
inputSchema: {
|
|
221
|
-
type: 'object',
|
|
222
|
-
properties: {
|
|
223
|
-
minPriority: {
|
|
224
|
-
type: 'number',
|
|
225
|
-
description: 'Minimum priority threshold (inclusive)',
|
|
226
|
-
},
|
|
227
|
-
maxPriority: {
|
|
228
|
-
type: 'number',
|
|
229
|
-
description: 'Maximum priority threshold (inclusive)',
|
|
230
|
-
},
|
|
231
|
-
},
|
|
232
|
-
required: [],
|
|
233
|
-
},
|
|
234
|
-
},
|
|
235
|
-
{
|
|
236
|
-
name: 'get_agent_system_prompt',
|
|
237
|
-
description: 'Get complete system prompt for a specialist agent to be executed as a Claude Code subagent. Use this to prepare an agent for parallel execution via Task tool.',
|
|
238
|
-
inputSchema: {
|
|
239
|
-
type: 'object',
|
|
240
|
-
properties: {
|
|
241
|
-
agentName: {
|
|
242
|
-
type: 'string',
|
|
243
|
-
description: 'Name of the specialist agent (e.g., security-specialist, accessibility-specialist)',
|
|
244
|
-
},
|
|
245
|
-
context: {
|
|
246
|
-
type: 'object',
|
|
247
|
-
description: 'Context for the agent',
|
|
248
|
-
properties: {
|
|
249
|
-
mode: {
|
|
250
|
-
type: 'string',
|
|
251
|
-
enum: ['PLAN', 'ACT', 'EVAL'],
|
|
252
|
-
description: 'Current workflow mode',
|
|
253
|
-
},
|
|
254
|
-
targetFiles: {
|
|
255
|
-
type: 'array',
|
|
256
|
-
items: { type: 'string' },
|
|
257
|
-
description: 'Files to analyze or review',
|
|
258
|
-
},
|
|
259
|
-
taskDescription: {
|
|
260
|
-
type: 'string',
|
|
261
|
-
description: 'Description of the task',
|
|
262
|
-
},
|
|
263
|
-
},
|
|
264
|
-
required: ['mode'],
|
|
265
|
-
},
|
|
266
|
-
},
|
|
267
|
-
required: ['agentName', 'context'],
|
|
268
|
-
},
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
name: 'prepare_parallel_agents',
|
|
272
|
-
description: 'Prepare multiple specialist agents for parallel execution via Claude Code Task tool. Returns prompts and hints for launching agents concurrently.',
|
|
273
|
-
inputSchema: {
|
|
274
|
-
type: 'object',
|
|
275
|
-
properties: {
|
|
276
|
-
mode: {
|
|
277
|
-
type: 'string',
|
|
278
|
-
enum: ['PLAN', 'ACT', 'EVAL'],
|
|
279
|
-
description: 'Current workflow mode',
|
|
280
|
-
},
|
|
281
|
-
specialists: {
|
|
282
|
-
type: 'array',
|
|
283
|
-
items: { type: 'string' },
|
|
284
|
-
description: 'List of specialist agent names (e.g., ["security-specialist", "accessibility-specialist"])',
|
|
285
|
-
},
|
|
286
|
-
targetFiles: {
|
|
287
|
-
type: 'array',
|
|
288
|
-
items: { type: 'string' },
|
|
289
|
-
description: 'Files to analyze or review',
|
|
290
|
-
},
|
|
291
|
-
sharedContext: {
|
|
292
|
-
type: 'string',
|
|
293
|
-
description: 'Shared context or task description for all agents',
|
|
294
|
-
},
|
|
295
|
-
},
|
|
296
|
-
required: ['mode', 'specialists'],
|
|
297
|
-
},
|
|
298
|
-
},
|
|
299
|
-
],
|
|
300
|
-
};
|
|
129
|
+
const tools = this.toolHandlers.flatMap(handler => handler.getToolDefinitions());
|
|
130
|
+
return { tools };
|
|
301
131
|
});
|
|
302
132
|
this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
|
|
303
133
|
const { name, arguments: args } = request.params;
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
case 'parse_mode':
|
|
310
|
-
return this.handleParseMode(args);
|
|
311
|
-
case 'get_project_config':
|
|
312
|
-
return this.handleGetProjectConfig();
|
|
313
|
-
case 'suggest_config_updates':
|
|
314
|
-
return this.handleSuggestConfigUpdates(args);
|
|
315
|
-
case 'recommend_skills':
|
|
316
|
-
return this.handleRecommendSkills(args);
|
|
317
|
-
case 'list_skills':
|
|
318
|
-
return this.handleListSkills(args);
|
|
319
|
-
case 'get_agent_system_prompt':
|
|
320
|
-
return this.handleGetAgentSystemPrompt(args);
|
|
321
|
-
case 'prepare_parallel_agents':
|
|
322
|
-
return this.handlePrepareParallelAgents(args);
|
|
323
|
-
default:
|
|
324
|
-
throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Tool not found: ${name}`);
|
|
134
|
+
for (const handler of this.toolHandlers) {
|
|
135
|
+
const result = await handler.handle(name, args);
|
|
136
|
+
if (result !== null) {
|
|
137
|
+
return result;
|
|
138
|
+
}
|
|
325
139
|
}
|
|
140
|
+
throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, `Tool not found: ${name}`);
|
|
326
141
|
});
|
|
327
142
|
}
|
|
328
143
|
registerPrompts() {
|
|
@@ -372,168 +187,6 @@ let McpService = McpService_1 = class McpService {
|
|
|
372
187
|
throw new types_js_1.McpError(types_js_1.ErrorCode.MethodNotFound, 'Prompt not found');
|
|
373
188
|
});
|
|
374
189
|
}
|
|
375
|
-
async handleSearchRules(args) {
|
|
376
|
-
const query = String(args?.query);
|
|
377
|
-
const results = await this.rulesService.searchRules(query);
|
|
378
|
-
return (0, response_utils_1.createJsonResponse)(results);
|
|
379
|
-
}
|
|
380
|
-
async handleGetAgentDetails(args) {
|
|
381
|
-
const agentName = String(args?.agentName);
|
|
382
|
-
try {
|
|
383
|
-
const agent = await this.rulesService.getAgent(agentName);
|
|
384
|
-
const agentModel = agent.model;
|
|
385
|
-
const resolvedModel = (0, model_1.resolveModel)({ agentModel });
|
|
386
|
-
return (0, response_utils_1.createJsonResponse)({
|
|
387
|
-
...agent,
|
|
388
|
-
resolvedModel,
|
|
389
|
-
});
|
|
390
|
-
}
|
|
391
|
-
catch {
|
|
392
|
-
return (0, response_utils_1.createErrorResponse)(`Agent '${agentName}' not found.`);
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
async handleParseMode(args) {
|
|
396
|
-
const prompt = String(args?.prompt ?? '');
|
|
397
|
-
try {
|
|
398
|
-
const result = await this.keywordService.parseMode(prompt);
|
|
399
|
-
const language = await this.configService.getLanguage();
|
|
400
|
-
const languageInstructionResult = this.languageService.getLanguageInstruction(language || 'en');
|
|
401
|
-
const resolvedModel = await this.resolveModelForMode(result.agent);
|
|
402
|
-
return (0, response_utils_1.createJsonResponse)({
|
|
403
|
-
...result,
|
|
404
|
-
language,
|
|
405
|
-
languageInstruction: languageInstructionResult.instruction,
|
|
406
|
-
resolvedModel,
|
|
407
|
-
});
|
|
408
|
-
}
|
|
409
|
-
catch (error) {
|
|
410
|
-
return (0, response_utils_1.createErrorResponse)(`Failed to parse mode: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
async resolveModelForMode(modeAgentName) {
|
|
414
|
-
const globalDefaultModel = await this.loadGlobalDefaultModel();
|
|
415
|
-
const modeModel = await this.loadModeModel(modeAgentName);
|
|
416
|
-
return (0, model_1.resolveModel)({ modeModel, globalDefaultModel });
|
|
417
|
-
}
|
|
418
|
-
async loadGlobalDefaultModel() {
|
|
419
|
-
try {
|
|
420
|
-
const globalConfig = await this.configService.getSettings();
|
|
421
|
-
return globalConfig?.ai?.defaultModel;
|
|
422
|
-
}
|
|
423
|
-
catch (error) {
|
|
424
|
-
this.logger.warn(`Failed to load global config for model resolution: ${error instanceof Error ? error.message : 'Unknown error'}. Using system default.`);
|
|
425
|
-
return undefined;
|
|
426
|
-
}
|
|
427
|
-
}
|
|
428
|
-
async loadModeModel(agentName) {
|
|
429
|
-
if (!agentName)
|
|
430
|
-
return undefined;
|
|
431
|
-
try {
|
|
432
|
-
const modeAgent = await this.rulesService.getAgent(agentName);
|
|
433
|
-
return (0, model_1.isModelConfig)(modeAgent.model) ? modeAgent.model : undefined;
|
|
434
|
-
}
|
|
435
|
-
catch (error) {
|
|
436
|
-
this.logger.warn(`Failed to load mode agent '${agentName}' for model resolution: ${error instanceof Error ? error.message : 'Unknown error'}. Using fallback.`);
|
|
437
|
-
return undefined;
|
|
438
|
-
}
|
|
439
|
-
}
|
|
440
|
-
async handleGetProjectConfig() {
|
|
441
|
-
try {
|
|
442
|
-
const settings = await this.configService.getSettings();
|
|
443
|
-
return (0, response_utils_1.createJsonResponse)(settings);
|
|
444
|
-
}
|
|
445
|
-
catch (error) {
|
|
446
|
-
return (0, response_utils_1.createErrorResponse)(`Failed to get project config: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
async handleSuggestConfigUpdates(args) {
|
|
450
|
-
try {
|
|
451
|
-
const projectRoot = String(args?.projectRoot ?? process.cwd());
|
|
452
|
-
const analysis = await this.analyzerService.analyzeProject(projectRoot);
|
|
453
|
-
await this.configService.reload();
|
|
454
|
-
const currentConfig = await this.configService.getSettings();
|
|
455
|
-
const result = this.configDiffService.compareConfig(analysis, currentConfig);
|
|
456
|
-
return (0, response_utils_1.createJsonResponse)(result);
|
|
457
|
-
}
|
|
458
|
-
catch (error) {
|
|
459
|
-
return (0, response_utils_1.createErrorResponse)(`Failed to suggest config updates: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
460
|
-
}
|
|
461
|
-
}
|
|
462
|
-
handleRecommendSkills(args) {
|
|
463
|
-
const prompt = args?.prompt;
|
|
464
|
-
if (typeof prompt !== 'string') {
|
|
465
|
-
return (0, response_utils_1.createErrorResponse)('Missing required parameter: prompt');
|
|
466
|
-
}
|
|
467
|
-
try {
|
|
468
|
-
const result = this.skillRecommendationService.recommendSkills(prompt);
|
|
469
|
-
return (0, response_utils_1.createJsonResponse)(result);
|
|
470
|
-
}
|
|
471
|
-
catch (error) {
|
|
472
|
-
return (0, response_utils_1.createErrorResponse)(`Failed to recommend skills: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
handleListSkills(args) {
|
|
476
|
-
try {
|
|
477
|
-
const options = {};
|
|
478
|
-
if (typeof args?.minPriority === 'number') {
|
|
479
|
-
options.minPriority = args.minPriority;
|
|
480
|
-
}
|
|
481
|
-
if (typeof args?.maxPriority === 'number') {
|
|
482
|
-
options.maxPriority = args.maxPriority;
|
|
483
|
-
}
|
|
484
|
-
const result = this.skillRecommendationService.listSkills(options);
|
|
485
|
-
return (0, response_utils_1.createJsonResponse)(result);
|
|
486
|
-
}
|
|
487
|
-
catch (error) {
|
|
488
|
-
return (0, response_utils_1.createErrorResponse)(`Failed to list skills: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
489
|
-
}
|
|
490
|
-
}
|
|
491
|
-
async handleGetAgentSystemPrompt(args) {
|
|
492
|
-
const agentName = args?.agentName;
|
|
493
|
-
const context = args?.context;
|
|
494
|
-
if (typeof agentName !== 'string') {
|
|
495
|
-
return (0, response_utils_1.createErrorResponse)('Missing required parameter: agentName');
|
|
496
|
-
}
|
|
497
|
-
if (!context || typeof context.mode !== 'string') {
|
|
498
|
-
return (0, response_utils_1.createErrorResponse)('Missing required parameter: context.mode (PLAN, ACT, or EVAL)');
|
|
499
|
-
}
|
|
500
|
-
if (!['PLAN', 'ACT', 'EVAL'].includes(context.mode)) {
|
|
501
|
-
return (0, response_utils_1.createErrorResponse)(`Invalid mode: ${context.mode}. Must be PLAN, ACT, or EVAL`);
|
|
502
|
-
}
|
|
503
|
-
try {
|
|
504
|
-
const result = await this.agentService.getAgentSystemPrompt(agentName, {
|
|
505
|
-
mode: context.mode,
|
|
506
|
-
targetFiles: context.targetFiles,
|
|
507
|
-
taskDescription: context.taskDescription,
|
|
508
|
-
});
|
|
509
|
-
return (0, response_utils_1.createJsonResponse)(result);
|
|
510
|
-
}
|
|
511
|
-
catch (error) {
|
|
512
|
-
return (0, response_utils_1.createErrorResponse)(`Failed to get agent system prompt: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
513
|
-
}
|
|
514
|
-
}
|
|
515
|
-
async handlePrepareParallelAgents(args) {
|
|
516
|
-
const mode = args?.mode;
|
|
517
|
-
const specialists = args?.specialists;
|
|
518
|
-
const targetFiles = args?.targetFiles;
|
|
519
|
-
const sharedContext = args?.sharedContext;
|
|
520
|
-
if (typeof mode !== 'string') {
|
|
521
|
-
return (0, response_utils_1.createErrorResponse)('Missing required parameter: mode (PLAN, ACT, or EVAL)');
|
|
522
|
-
}
|
|
523
|
-
if (!['PLAN', 'ACT', 'EVAL'].includes(mode)) {
|
|
524
|
-
return (0, response_utils_1.createErrorResponse)(`Invalid mode: ${mode}. Must be PLAN, ACT, or EVAL`);
|
|
525
|
-
}
|
|
526
|
-
if (!Array.isArray(specialists) || specialists.length === 0) {
|
|
527
|
-
return (0, response_utils_1.createErrorResponse)('Missing required parameter: specialists (array of agent names)');
|
|
528
|
-
}
|
|
529
|
-
try {
|
|
530
|
-
const result = await this.agentService.prepareParallelAgents(mode, specialists, targetFiles, sharedContext);
|
|
531
|
-
return (0, response_utils_1.createJsonResponse)(result);
|
|
532
|
-
}
|
|
533
|
-
catch (error) {
|
|
534
|
-
return (0, response_utils_1.createErrorResponse)(`Failed to prepare parallel agents: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
535
|
-
}
|
|
536
|
-
}
|
|
537
190
|
formatProjectContext(settings) {
|
|
538
191
|
const sections = ['Project Context:'];
|
|
539
192
|
if (settings.projectName) {
|
|
@@ -578,14 +231,8 @@ let McpService = McpService_1 = class McpService {
|
|
|
578
231
|
exports.McpService = McpService;
|
|
579
232
|
exports.McpService = McpService = McpService_1 = __decorate([
|
|
580
233
|
(0, common_1.Injectable)(),
|
|
581
|
-
__param(
|
|
234
|
+
__param(2, (0, common_1.Inject)(handlers_1.TOOL_HANDLERS)),
|
|
582
235
|
__metadata("design:paramtypes", [rules_service_1.RulesService,
|
|
583
|
-
|
|
584
|
-
config_service_1.ConfigService,
|
|
585
|
-
config_diff_service_1.ConfigDiffService,
|
|
586
|
-
analyzer_service_1.AnalyzerService,
|
|
587
|
-
skill_recommendation_service_1.SkillRecommendationService,
|
|
588
|
-
language_service_1.LanguageService,
|
|
589
|
-
agent_service_1.AgentService])
|
|
236
|
+
config_service_1.ConfigService, Array])
|
|
590
237
|
], McpService);
|
|
591
238
|
//# sourceMappingURL=mcp.service.js.map
|