codingbuddy 1.3.1 → 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.
Files changed (173) hide show
  1. package/dist/src/agent/agent-prompt.builder.d.ts +5 -0
  2. package/dist/src/agent/agent-prompt.builder.js +84 -0
  3. package/dist/src/agent/agent-prompt.builder.js.map +1 -0
  4. package/dist/src/agent/agent.module.d.ts +2 -0
  5. package/dist/src/agent/agent.module.js +23 -0
  6. package/dist/src/agent/agent.module.js.map +1 -0
  7. package/dist/src/agent/agent.service.d.ts +15 -0
  8. package/dist/src/agent/agent.service.js +103 -0
  9. package/dist/src/agent/agent.service.js.map +1 -0
  10. package/dist/src/agent/agent.types.d.ts +29 -0
  11. package/dist/src/agent/agent.types.js +31 -0
  12. package/dist/src/agent/agent.types.js.map +1 -0
  13. package/dist/src/agent/index.d.ts +4 -0
  14. package/dist/src/agent/index.js +21 -0
  15. package/dist/src/agent/index.js.map +1 -0
  16. package/dist/src/app.module.js +12 -1
  17. package/dist/src/app.module.js.map +1 -1
  18. package/dist/src/checklist/checklist.module.d.ts +2 -0
  19. package/dist/src/checklist/checklist.module.js +29 -0
  20. package/dist/src/checklist/checklist.module.js.map +1 -0
  21. package/dist/src/checklist/checklist.schema.d.ts +14 -0
  22. package/dist/src/checklist/checklist.schema.js +189 -0
  23. package/dist/src/checklist/checklist.schema.js.map +1 -0
  24. package/dist/src/checklist/checklist.service.d.ts +21 -0
  25. package/dist/src/checklist/checklist.service.js +258 -0
  26. package/dist/src/checklist/checklist.service.js.map +1 -0
  27. package/dist/src/checklist/checklist.types.d.ts +56 -0
  28. package/dist/src/checklist/checklist.types.js +24 -0
  29. package/dist/src/checklist/checklist.types.js.map +1 -0
  30. package/dist/src/checklist/index.d.ts +3 -0
  31. package/dist/src/checklist/index.js +20 -0
  32. package/dist/src/checklist/index.js.map +1 -0
  33. package/dist/src/cli/cli.types.d.ts +1 -6
  34. package/dist/src/cli/index.d.ts +1 -1
  35. package/dist/src/cli/index.js.map +1 -1
  36. package/dist/src/cli/init/config.generator.d.ts +1 -0
  37. package/dist/src/cli/init/config.generator.js +10 -2
  38. package/dist/src/cli/init/config.generator.js.map +1 -1
  39. package/dist/src/cli/init/init.command.js +19 -1
  40. package/dist/src/cli/init/init.command.js.map +1 -1
  41. package/dist/src/cli/init/prompts/agent-prompt.d.ts +9 -0
  42. package/dist/src/cli/init/prompts/agent-prompt.js +28 -0
  43. package/dist/src/cli/init/prompts/agent-prompt.js.map +1 -0
  44. package/dist/src/cli/init/prompts/index.d.ts +7 -0
  45. package/dist/src/cli/init/prompts/index.js +16 -0
  46. package/dist/src/cli/init/prompts/index.js.map +1 -0
  47. package/dist/src/cli/init/prompts/language-prompt.d.ts +8 -0
  48. package/dist/src/cli/init/prompts/language-prompt.js +30 -0
  49. package/dist/src/cli/init/prompts/language-prompt.js.map +1 -0
  50. package/dist/src/cli/init/prompts/model-prompt.d.ts +8 -0
  51. package/dist/src/cli/init/prompts/model-prompt.js +36 -0
  52. package/dist/src/cli/init/prompts/model-prompt.js.map +1 -0
  53. package/dist/src/cli/init/templates/template.renderer.js +21 -1
  54. package/dist/src/cli/init/templates/template.renderer.js.map +1 -1
  55. package/dist/src/cli/init/templates/template.types.d.ts +2 -0
  56. package/dist/src/config/config.schema.d.ts +9 -0
  57. package/dist/src/config/config.schema.js +6 -1
  58. package/dist/src/config/config.schema.js.map +1 -1
  59. package/dist/src/context/context.module.d.ts +2 -0
  60. package/dist/src/context/context.module.js +23 -0
  61. package/dist/src/context/context.module.js.map +1 -0
  62. package/dist/src/context/context.service.d.ts +21 -0
  63. package/dist/src/context/context.service.js +286 -0
  64. package/dist/src/context/context.service.js.map +1 -0
  65. package/dist/src/context/context.types.d.ts +50 -0
  66. package/dist/src/context/context.types.js +42 -0
  67. package/dist/src/context/context.types.js.map +1 -0
  68. package/dist/src/context/index.d.ts +3 -0
  69. package/dist/src/context/index.js +20 -0
  70. package/dist/src/context/index.js.map +1 -0
  71. package/dist/src/context/intent-patterns.d.ts +7 -0
  72. package/dist/src/context/intent-patterns.js +50 -0
  73. package/dist/src/context/intent-patterns.js.map +1 -0
  74. package/dist/src/keyword/activation-message.builder.d.ts +14 -0
  75. package/dist/src/keyword/activation-message.builder.js +80 -0
  76. package/dist/src/keyword/activation-message.builder.js.map +1 -0
  77. package/dist/src/keyword/keyword.module.js +39 -4
  78. package/dist/src/keyword/keyword.module.js.map +1 -1
  79. package/dist/src/keyword/keyword.service.d.ts +18 -3
  80. package/dist/src/keyword/keyword.service.js +146 -53
  81. package/dist/src/keyword/keyword.service.js.map +1 -1
  82. package/dist/src/keyword/keyword.types.d.ts +61 -0
  83. package/dist/src/keyword/keyword.types.js +83 -1
  84. package/dist/src/keyword/keyword.types.js.map +1 -1
  85. package/dist/src/keyword/primary-agent-resolver.d.ts +30 -0
  86. package/dist/src/keyword/primary-agent-resolver.js +376 -0
  87. package/dist/src/keyword/primary-agent-resolver.js.map +1 -0
  88. package/dist/src/keyword/rule-filter.d.ts +3 -0
  89. package/dist/src/keyword/rule-filter.js +64 -0
  90. package/dist/src/keyword/rule-filter.js.map +1 -0
  91. package/dist/src/mcp/handlers/agent.handler.d.ts +11 -0
  92. package/dist/src/mcp/handlers/agent.handler.js +167 -0
  93. package/dist/src/mcp/handlers/agent.handler.js.map +1 -0
  94. package/dist/src/mcp/handlers/base.handler.d.ts +15 -0
  95. package/dist/src/mcp/handlers/base.handler.js +3 -0
  96. package/dist/src/mcp/handlers/base.handler.js.map +1 -0
  97. package/dist/src/mcp/handlers/checklist-context.handler.d.ts +13 -0
  98. package/dist/src/mcp/handlers/checklist-context.handler.js +141 -0
  99. package/dist/src/mcp/handlers/checklist-context.handler.js.map +1 -0
  100. package/dist/src/mcp/handlers/config.handler.d.ts +15 -0
  101. package/dist/src/mcp/handlers/config.handler.js +104 -0
  102. package/dist/src/mcp/handlers/config.handler.js.map +1 -0
  103. package/dist/src/mcp/handlers/index.d.ts +8 -0
  104. package/dist/src/mcp/handlers/index.js +17 -0
  105. package/dist/src/mcp/handlers/index.js.map +1 -0
  106. package/dist/src/mcp/handlers/mode.handler.d.ts +16 -0
  107. package/dist/src/mcp/handlers/mode.handler.js +100 -0
  108. package/dist/src/mcp/handlers/mode.handler.js.map +1 -0
  109. package/dist/src/mcp/handlers/rules.handler.d.ts +11 -0
  110. package/dist/src/mcp/handlers/rules.handler.js +99 -0
  111. package/dist/src/mcp/handlers/rules.handler.js.map +1 -0
  112. package/dist/src/mcp/handlers/skill.handler.d.ts +11 -0
  113. package/dist/src/mcp/handlers/skill.handler.js +111 -0
  114. package/dist/src/mcp/handlers/skill.handler.js.map +1 -0
  115. package/dist/src/mcp/mcp-serverless.d.ts +0 -2
  116. package/dist/src/mcp/mcp-serverless.js +19 -29
  117. package/dist/src/mcp/mcp-serverless.js.map +1 -1
  118. package/dist/src/mcp/mcp.module.js +29 -1
  119. package/dist/src/mcp/mcp.module.js.map +1 -1
  120. package/dist/src/mcp/mcp.service.d.ts +3 -18
  121. package/dist/src/mcp/mcp.service.js +13 -216
  122. package/dist/src/mcp/mcp.service.js.map +1 -1
  123. package/dist/src/mcp/response.utils.d.ts +10 -0
  124. package/dist/src/mcp/response.utils.js +16 -0
  125. package/dist/src/mcp/response.utils.js.map +1 -0
  126. package/dist/src/model/index.d.ts +4 -0
  127. package/dist/src/model/index.js +23 -0
  128. package/dist/src/model/index.js.map +1 -0
  129. package/dist/src/model/model-resolver.service.d.ts +13 -0
  130. package/dist/src/model/model-resolver.service.js +63 -0
  131. package/dist/src/model/model-resolver.service.js.map +1 -0
  132. package/dist/src/model/model.constants.d.ts +4 -0
  133. package/dist/src/model/model.constants.js +8 -0
  134. package/dist/src/model/model.constants.js.map +1 -0
  135. package/dist/src/model/model.resolver.d.ts +7 -0
  136. package/dist/src/model/model.resolver.js +56 -0
  137. package/dist/src/model/model.resolver.js.map +1 -0
  138. package/dist/src/model/model.types.d.ts +17 -0
  139. package/dist/src/model/model.types.js +11 -0
  140. package/dist/src/model/model.types.js.map +1 -0
  141. package/dist/src/rules/agent.schema.d.ts +15 -0
  142. package/dist/src/rules/agent.schema.js +9 -0
  143. package/dist/src/rules/agent.schema.js.map +1 -1
  144. package/dist/src/shared/agent.utils.d.ts +1 -0
  145. package/dist/src/shared/agent.utils.js +14 -0
  146. package/dist/src/shared/agent.utils.js.map +1 -0
  147. package/dist/src/shared/filesystem.interface.d.ts +15 -0
  148. package/dist/src/shared/filesystem.interface.js +14 -0
  149. package/dist/src/shared/filesystem.interface.js.map +1 -0
  150. package/dist/src/shared/language.service.d.ts +9 -0
  151. package/dist/src/shared/language.service.js +108 -0
  152. package/dist/src/shared/language.service.js.map +1 -0
  153. package/dist/src/shared/language.types.d.ts +12 -0
  154. package/dist/src/shared/language.types.js +3 -0
  155. package/dist/src/shared/language.types.js.map +1 -0
  156. package/dist/src/shared/node-filesystem.service.d.ts +5 -0
  157. package/dist/src/shared/node-filesystem.service.js +25 -0
  158. package/dist/src/shared/node-filesystem.service.js.map +1 -0
  159. package/dist/src/shared/path.utils.js.map +1 -1
  160. package/dist/src/shared/pattern-matcher.d.ts +11 -0
  161. package/dist/src/shared/pattern-matcher.js +39 -0
  162. package/dist/src/shared/pattern-matcher.js.map +1 -0
  163. package/dist/src/shared/security.utils.d.ts +17 -0
  164. package/dist/src/shared/security.utils.js +63 -0
  165. package/dist/src/shared/security.utils.js.map +1 -1
  166. package/dist/src/shared/validation.constants.d.ts +10 -0
  167. package/dist/src/shared/validation.constants.js +42 -1
  168. package/dist/src/shared/validation.constants.js.map +1 -1
  169. package/dist/tsconfig.build.tsbuildinfo +1 -1
  170. package/package.json +4 -2
  171. package/dist/src/config/config.types.d.ts +0 -2
  172. package/dist/src/config/config.types.js +0 -6
  173. package/dist/src/config/config.types.js.map +0 -1
@@ -0,0 +1,15 @@
1
+ import type { ToolResponse } from '../response.utils';
2
+ export interface ToolHandler {
3
+ handle(toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResponse | null>;
4
+ getToolDefinitions(): ToolDefinition[];
5
+ }
6
+ export interface ToolDefinition {
7
+ name: string;
8
+ description: string;
9
+ inputSchema: {
10
+ type: 'object';
11
+ properties: Record<string, unknown>;
12
+ required?: string[];
13
+ };
14
+ }
15
+ export type ToolResult = ToolResponse;
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=base.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.handler.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/base.handler.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { ToolHandler, ToolDefinition, ToolResult } from './base.handler';
2
+ import { ChecklistService } from '../../checklist/checklist.service';
3
+ import { ContextService } from '../../context/context.service';
4
+ export declare class ChecklistContextHandler implements ToolHandler {
5
+ private readonly checklistService;
6
+ private readonly contextService;
7
+ private readonly handledTools;
8
+ constructor(checklistService: ChecklistService, contextService: ContextService);
9
+ handle(toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResult | null>;
10
+ getToolDefinitions(): ToolDefinition[];
11
+ private handleGenerateChecklist;
12
+ private handleAnalyzeTask;
13
+ }
@@ -0,0 +1,141 @@
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.ChecklistContextHandler = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const checklist_service_1 = require("../../checklist/checklist.service");
15
+ const context_service_1 = require("../../context/context.service");
16
+ const response_utils_1 = require("../response.utils");
17
+ const security_utils_1 = require("../../shared/security.utils");
18
+ const validation_constants_1 = require("../../shared/validation.constants");
19
+ let ChecklistContextHandler = class ChecklistContextHandler {
20
+ constructor(checklistService, contextService) {
21
+ this.checklistService = checklistService;
22
+ this.contextService = contextService;
23
+ this.handledTools = ['generate_checklist', 'analyze_task'];
24
+ }
25
+ async handle(toolName, args) {
26
+ if (!this.handledTools.includes(toolName)) {
27
+ return null;
28
+ }
29
+ const validation = (0, security_utils_1.sanitizeHandlerArgs)(args);
30
+ if (!validation.safe) {
31
+ return (0, response_utils_1.createErrorResponse)(validation.error);
32
+ }
33
+ switch (toolName) {
34
+ case 'generate_checklist':
35
+ return this.handleGenerateChecklist(args);
36
+ case 'analyze_task':
37
+ return this.handleAnalyzeTask(args);
38
+ default:
39
+ return null;
40
+ }
41
+ }
42
+ getToolDefinitions() {
43
+ return [
44
+ {
45
+ name: 'generate_checklist',
46
+ description: 'Generate contextual checklists based on file patterns and domains. Automatically detects relevant checklist items from security, accessibility, performance, testing, code-quality, and SEO domains based on file patterns and import analysis.',
47
+ inputSchema: {
48
+ type: 'object',
49
+ properties: {
50
+ files: {
51
+ type: 'array',
52
+ items: { type: 'string' },
53
+ description: 'File paths to analyze for checklist generation (e.g., ["src/auth/login.ts", "src/api/users.ts"])',
54
+ },
55
+ domains: {
56
+ type: 'array',
57
+ items: {
58
+ type: 'string',
59
+ enum: [
60
+ 'security',
61
+ 'accessibility',
62
+ 'performance',
63
+ 'testing',
64
+ 'code-quality',
65
+ 'seo',
66
+ ],
67
+ },
68
+ description: 'Specific domains to generate checklists for. If not provided, domains are auto-detected from files.',
69
+ },
70
+ },
71
+ required: [],
72
+ },
73
+ },
74
+ {
75
+ name: 'analyze_task',
76
+ description: 'Analyze a task to provide contextual recommendations including risk assessment, relevant checklists, specialist recommendations, and workflow suggestions. Use this at the start of PLAN mode to get comprehensive task analysis.',
77
+ inputSchema: {
78
+ type: 'object',
79
+ properties: {
80
+ prompt: {
81
+ type: 'string',
82
+ description: "User's task description",
83
+ },
84
+ files: {
85
+ type: 'array',
86
+ items: { type: 'string' },
87
+ description: 'Optional file paths related to the task',
88
+ },
89
+ mode: {
90
+ type: 'string',
91
+ enum: ['PLAN', 'ACT', 'EVAL'],
92
+ description: 'Current workflow mode',
93
+ },
94
+ },
95
+ required: ['prompt'],
96
+ },
97
+ },
98
+ ];
99
+ }
100
+ async handleGenerateChecklist(args) {
101
+ const files = (0, validation_constants_1.extractStringArray)(args, 'files');
102
+ const domains = (0, validation_constants_1.extractStringArray)(args, 'domains');
103
+ try {
104
+ const result = await this.checklistService.generateChecklist({
105
+ files,
106
+ domains,
107
+ });
108
+ return (0, response_utils_1.createJsonResponse)(result);
109
+ }
110
+ catch (error) {
111
+ return (0, response_utils_1.createErrorResponse)(`Failed to generate checklist: ${error instanceof Error ? error.message : 'Unknown error'}`);
112
+ }
113
+ }
114
+ async handleAnalyzeTask(args) {
115
+ const prompt = (0, validation_constants_1.extractRequiredString)(args, 'prompt');
116
+ if (prompt === null) {
117
+ return (0, response_utils_1.createErrorResponse)('Missing required parameter: prompt');
118
+ }
119
+ const files = (0, validation_constants_1.extractStringArray)(args, 'files');
120
+ const rawMode = args?.mode;
121
+ const mode = (0, validation_constants_1.isValidMode)(rawMode) ? rawMode : undefined;
122
+ try {
123
+ const result = await this.contextService.analyzeTask({
124
+ prompt,
125
+ files,
126
+ mode,
127
+ });
128
+ return (0, response_utils_1.createJsonResponse)(result);
129
+ }
130
+ catch (error) {
131
+ return (0, response_utils_1.createErrorResponse)(`Failed to analyze task: ${error instanceof Error ? error.message : 'Unknown error'}`);
132
+ }
133
+ }
134
+ };
135
+ exports.ChecklistContextHandler = ChecklistContextHandler;
136
+ exports.ChecklistContextHandler = ChecklistContextHandler = __decorate([
137
+ (0, common_1.Injectable)(),
138
+ __metadata("design:paramtypes", [checklist_service_1.ChecklistService,
139
+ context_service_1.ContextService])
140
+ ], ChecklistContextHandler);
141
+ //# sourceMappingURL=checklist-context.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checklist-context.handler.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/checklist-context.handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ToolHandler, ToolDefinition, ToolResult } from './base.handler';
2
+ import { ConfigService } from '../../config/config.service';
3
+ import { ConfigDiffService } from '../../config/config-diff.service';
4
+ import { AnalyzerService } from '../../analyzer/analyzer.service';
5
+ export declare class ConfigHandler implements ToolHandler {
6
+ private readonly configService;
7
+ private readonly configDiffService;
8
+ private readonly analyzerService;
9
+ private readonly handledTools;
10
+ constructor(configService: ConfigService, configDiffService: ConfigDiffService, analyzerService: AnalyzerService);
11
+ handle(toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResult | null>;
12
+ getToolDefinitions(): ToolDefinition[];
13
+ private handleGetProjectConfig;
14
+ private handleSuggestConfigUpdates;
15
+ }
@@ -0,0 +1,104 @@
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.ConfigHandler = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const config_service_1 = require("../../config/config.service");
15
+ const config_diff_service_1 = require("../../config/config-diff.service");
16
+ const analyzer_service_1 = require("../../analyzer/analyzer.service");
17
+ const response_utils_1 = require("../response.utils");
18
+ const security_utils_1 = require("../../shared/security.utils");
19
+ const validation_constants_1 = require("../../shared/validation.constants");
20
+ let ConfigHandler = class ConfigHandler {
21
+ constructor(configService, configDiffService, analyzerService) {
22
+ this.configService = configService;
23
+ this.configDiffService = configDiffService;
24
+ this.analyzerService = analyzerService;
25
+ this.handledTools = [
26
+ 'get_project_config',
27
+ 'suggest_config_updates',
28
+ ];
29
+ }
30
+ async handle(toolName, args) {
31
+ if (!this.handledTools.includes(toolName)) {
32
+ return null;
33
+ }
34
+ const validation = (0, security_utils_1.sanitizeHandlerArgs)(args);
35
+ if (!validation.safe) {
36
+ return (0, response_utils_1.createErrorResponse)(validation.error);
37
+ }
38
+ switch (toolName) {
39
+ case 'get_project_config':
40
+ return this.handleGetProjectConfig();
41
+ case 'suggest_config_updates':
42
+ return this.handleSuggestConfigUpdates(args);
43
+ default:
44
+ return null;
45
+ }
46
+ }
47
+ getToolDefinitions() {
48
+ return [
49
+ {
50
+ name: 'get_project_config',
51
+ description: 'Get project configuration including tech stack, architecture, conventions, and language settings',
52
+ inputSchema: {
53
+ type: 'object',
54
+ properties: {},
55
+ required: [],
56
+ },
57
+ },
58
+ {
59
+ name: 'suggest_config_updates',
60
+ description: 'Analyze the project and suggest config updates based on detected changes (new frameworks, dependencies, patterns)',
61
+ inputSchema: {
62
+ type: 'object',
63
+ properties: {
64
+ projectRoot: {
65
+ type: 'string',
66
+ description: 'Project root directory (defaults to current working directory)',
67
+ },
68
+ },
69
+ required: [],
70
+ },
71
+ },
72
+ ];
73
+ }
74
+ async handleGetProjectConfig() {
75
+ try {
76
+ const settings = await this.configService.getSettings();
77
+ return (0, response_utils_1.createJsonResponse)(settings);
78
+ }
79
+ catch (error) {
80
+ return (0, response_utils_1.createErrorResponse)(`Failed to get project config: ${error instanceof Error ? error.message : 'Unknown error'}`);
81
+ }
82
+ }
83
+ async handleSuggestConfigUpdates(args) {
84
+ try {
85
+ const projectRoot = (0, validation_constants_1.extractOptionalString)(args, 'projectRoot') ?? process.cwd();
86
+ const analysis = await this.analyzerService.analyzeProject(projectRoot);
87
+ await this.configService.reload();
88
+ const currentConfig = await this.configService.getSettings();
89
+ const result = this.configDiffService.compareConfig(analysis, currentConfig);
90
+ return (0, response_utils_1.createJsonResponse)(result);
91
+ }
92
+ catch (error) {
93
+ return (0, response_utils_1.createErrorResponse)(`Failed to suggest config updates: ${error instanceof Error ? error.message : 'Unknown error'}`);
94
+ }
95
+ }
96
+ };
97
+ exports.ConfigHandler = ConfigHandler;
98
+ exports.ConfigHandler = ConfigHandler = __decorate([
99
+ (0, common_1.Injectable)(),
100
+ __metadata("design:paramtypes", [config_service_1.ConfigService,
101
+ config_diff_service_1.ConfigDiffService,
102
+ analyzer_service_1.AnalyzerService])
103
+ ], ConfigHandler);
104
+ //# sourceMappingURL=config.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.handler.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/config.handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export type { ToolHandler, ToolDefinition, ToolResult } from './base.handler';
2
+ export { RulesHandler } from './rules.handler';
3
+ export { ConfigHandler } from './config.handler';
4
+ export { SkillHandler } from './skill.handler';
5
+ export { AgentHandler } from './agent.handler';
6
+ export { ModeHandler } from './mode.handler';
7
+ export { ChecklistContextHandler } from './checklist-context.handler';
8
+ export declare const TOOL_HANDLERS = "TOOL_HANDLERS";
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TOOL_HANDLERS = exports.ChecklistContextHandler = exports.ModeHandler = exports.AgentHandler = exports.SkillHandler = exports.ConfigHandler = exports.RulesHandler = void 0;
4
+ var rules_handler_1 = require("./rules.handler");
5
+ Object.defineProperty(exports, "RulesHandler", { enumerable: true, get: function () { return rules_handler_1.RulesHandler; } });
6
+ var config_handler_1 = require("./config.handler");
7
+ Object.defineProperty(exports, "ConfigHandler", { enumerable: true, get: function () { return config_handler_1.ConfigHandler; } });
8
+ var skill_handler_1 = require("./skill.handler");
9
+ Object.defineProperty(exports, "SkillHandler", { enumerable: true, get: function () { return skill_handler_1.SkillHandler; } });
10
+ var agent_handler_1 = require("./agent.handler");
11
+ Object.defineProperty(exports, "AgentHandler", { enumerable: true, get: function () { return agent_handler_1.AgentHandler; } });
12
+ var mode_handler_1 = require("./mode.handler");
13
+ Object.defineProperty(exports, "ModeHandler", { enumerable: true, get: function () { return mode_handler_1.ModeHandler; } });
14
+ var checklist_context_handler_1 = require("./checklist-context.handler");
15
+ Object.defineProperty(exports, "ChecklistContextHandler", { enumerable: true, get: function () { return checklist_context_handler_1.ChecklistContextHandler; } });
16
+ exports.TOOL_HANDLERS = 'TOOL_HANDLERS';
17
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/index.ts"],"names":[],"mappings":";;;AAyCA,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAMrB,mDAAiD;AAAxC,+GAAA,aAAa,OAAA;AAMtB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAMrB,iDAA+C;AAAtC,6GAAA,YAAY,OAAA;AAMrB,+CAA6C;AAApC,2GAAA,WAAW,OAAA;AAMpB,yEAAsE;AAA7D,oIAAA,uBAAuB,OAAA;AA0BnB,QAAA,aAAa,GAAG,eAAe,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { ToolHandler, ToolDefinition, ToolResult } from './base.handler';
2
+ import { KeywordService } from '../../keyword/keyword.service';
3
+ import { ConfigService } from '../../config/config.service';
4
+ import { LanguageService } from '../../shared/language.service';
5
+ import { ModelResolverService } from '../../model';
6
+ export declare class ModeHandler implements ToolHandler {
7
+ private readonly keywordService;
8
+ private readonly configService;
9
+ private readonly languageService;
10
+ private readonly modelResolverService;
11
+ private readonly handledTools;
12
+ constructor(keywordService: KeywordService, configService: ConfigService, languageService: LanguageService, modelResolverService: ModelResolverService);
13
+ handle(toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResult | null>;
14
+ getToolDefinitions(): ToolDefinition[];
15
+ private handleParseMode;
16
+ }
@@ -0,0 +1,100 @@
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
+ var __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.ModeHandler = void 0;
16
+ const common_1 = require("@nestjs/common");
17
+ const keyword_service_1 = require("../../keyword/keyword.service");
18
+ const keyword_module_1 = require("../../keyword/keyword.module");
19
+ const config_service_1 = require("../../config/config.service");
20
+ const language_service_1 = require("../../shared/language.service");
21
+ const response_utils_1 = require("../response.utils");
22
+ const model_1 = require("../../model");
23
+ const security_utils_1 = require("../../shared/security.utils");
24
+ const validation_constants_1 = require("../../shared/validation.constants");
25
+ let ModeHandler = class ModeHandler {
26
+ constructor(keywordService, configService, languageService, modelResolverService) {
27
+ this.keywordService = keywordService;
28
+ this.configService = configService;
29
+ this.languageService = languageService;
30
+ this.modelResolverService = modelResolverService;
31
+ this.handledTools = ['parse_mode'];
32
+ }
33
+ async handle(toolName, args) {
34
+ if (!this.handledTools.includes(toolName)) {
35
+ return null;
36
+ }
37
+ const validation = (0, security_utils_1.sanitizeHandlerArgs)(args);
38
+ if (!validation.safe) {
39
+ return (0, response_utils_1.createErrorResponse)(validation.error);
40
+ }
41
+ return this.handleParseMode(args);
42
+ }
43
+ getToolDefinitions() {
44
+ return [
45
+ {
46
+ name: 'parse_mode',
47
+ 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.',
48
+ inputSchema: {
49
+ type: 'object',
50
+ properties: {
51
+ prompt: {
52
+ type: 'string',
53
+ description: 'User prompt that may start with PLAN/ACT/EVAL keyword',
54
+ },
55
+ recommended_agent: {
56
+ type: 'string',
57
+ description: 'ACT agent recommended from previous PLAN mode. Pass the agentName from recommended_act_agent field of PLAN mode response. Only applies to ACT mode.',
58
+ },
59
+ },
60
+ required: ['prompt'],
61
+ },
62
+ },
63
+ ];
64
+ }
65
+ async handleParseMode(args) {
66
+ const prompt = (0, validation_constants_1.extractRequiredString)(args, 'prompt');
67
+ if (prompt === null) {
68
+ return (0, response_utils_1.createErrorResponse)('Missing required parameter: prompt');
69
+ }
70
+ const recommendedAgent = (0, validation_constants_1.extractRequiredString)(args, 'recommended_agent') ?? undefined;
71
+ try {
72
+ const options = recommendedAgent
73
+ ? { recommendedActAgent: recommendedAgent }
74
+ : undefined;
75
+ const result = await this.keywordService.parseMode(prompt, options);
76
+ const language = await this.configService.getLanguage();
77
+ const languageInstructionResult = this.languageService.getLanguageInstruction(language || 'en');
78
+ const resolvedModel = await this.modelResolverService.resolveForMode(result.agent);
79
+ return (0, response_utils_1.createJsonResponse)({
80
+ ...result,
81
+ language,
82
+ languageInstruction: languageInstructionResult.instruction,
83
+ resolvedModel,
84
+ });
85
+ }
86
+ catch (error) {
87
+ return (0, response_utils_1.createErrorResponse)(`Failed to parse mode: ${error instanceof Error ? error.message : 'Unknown error'}`);
88
+ }
89
+ }
90
+ };
91
+ exports.ModeHandler = ModeHandler;
92
+ exports.ModeHandler = ModeHandler = __decorate([
93
+ (0, common_1.Injectable)(),
94
+ __param(0, (0, common_1.Inject)(keyword_module_1.KEYWORD_SERVICE)),
95
+ __metadata("design:paramtypes", [keyword_service_1.KeywordService,
96
+ config_service_1.ConfigService,
97
+ language_service_1.LanguageService,
98
+ model_1.ModelResolverService])
99
+ ], ModeHandler);
100
+ //# sourceMappingURL=mode.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mode.handler.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/mode.handler.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { ToolHandler, ToolDefinition, ToolResult } from './base.handler';
2
+ import { RulesService } from '../../rules/rules.service';
3
+ export declare class RulesHandler implements ToolHandler {
4
+ private readonly rulesService;
5
+ private readonly handledTools;
6
+ constructor(rulesService: RulesService);
7
+ handle(toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResult | null>;
8
+ getToolDefinitions(): ToolDefinition[];
9
+ private handleSearchRules;
10
+ private handleGetAgentDetails;
11
+ }
@@ -0,0 +1,99 @@
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.RulesHandler = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ const rules_service_1 = require("../../rules/rules.service");
15
+ const response_utils_1 = require("../response.utils");
16
+ const model_1 = require("../../model");
17
+ const security_utils_1 = require("../../shared/security.utils");
18
+ const validation_constants_1 = require("../../shared/validation.constants");
19
+ let RulesHandler = class RulesHandler {
20
+ constructor(rulesService) {
21
+ this.rulesService = rulesService;
22
+ this.handledTools = ['search_rules', 'get_agent_details'];
23
+ }
24
+ async handle(toolName, args) {
25
+ if (!this.handledTools.includes(toolName)) {
26
+ return null;
27
+ }
28
+ const validation = (0, security_utils_1.sanitizeHandlerArgs)(args);
29
+ if (!validation.safe) {
30
+ return (0, response_utils_1.createErrorResponse)(validation.error);
31
+ }
32
+ switch (toolName) {
33
+ case 'search_rules':
34
+ return this.handleSearchRules(args);
35
+ case 'get_agent_details':
36
+ return this.handleGetAgentDetails(args);
37
+ default:
38
+ return null;
39
+ }
40
+ }
41
+ getToolDefinitions() {
42
+ return [
43
+ {
44
+ name: 'search_rules',
45
+ description: 'Search for rules and guidelines',
46
+ inputSchema: {
47
+ type: 'object',
48
+ properties: {
49
+ query: { type: 'string', description: 'Search query' },
50
+ },
51
+ required: ['query'],
52
+ },
53
+ },
54
+ {
55
+ name: 'get_agent_details',
56
+ description: 'Get detailed profile of a specific AI agent',
57
+ inputSchema: {
58
+ type: 'object',
59
+ properties: {
60
+ agentName: { type: 'string', description: 'Name of the agent' },
61
+ },
62
+ required: ['agentName'],
63
+ },
64
+ },
65
+ ];
66
+ }
67
+ async handleSearchRules(args) {
68
+ const query = (0, validation_constants_1.extractRequiredString)(args, 'query');
69
+ if (query === null) {
70
+ return (0, response_utils_1.createErrorResponse)('Missing required parameter: query');
71
+ }
72
+ const results = await this.rulesService.searchRules(query);
73
+ return (0, response_utils_1.createJsonResponse)(results);
74
+ }
75
+ async handleGetAgentDetails(args) {
76
+ const agentName = (0, validation_constants_1.extractRequiredString)(args, 'agentName');
77
+ if (agentName === null) {
78
+ return (0, response_utils_1.createErrorResponse)('Missing required parameter: agentName');
79
+ }
80
+ try {
81
+ const agent = await this.rulesService.getAgent(agentName);
82
+ const agentModel = agent.model;
83
+ const resolvedModel = (0, model_1.resolveModel)({ agentModel });
84
+ return (0, response_utils_1.createJsonResponse)({
85
+ ...agent,
86
+ resolvedModel,
87
+ });
88
+ }
89
+ catch {
90
+ return (0, response_utils_1.createErrorResponse)(`Agent '${agentName}' not found.`);
91
+ }
92
+ }
93
+ };
94
+ exports.RulesHandler = RulesHandler;
95
+ exports.RulesHandler = RulesHandler = __decorate([
96
+ (0, common_1.Injectable)(),
97
+ __metadata("design:paramtypes", [rules_service_1.RulesService])
98
+ ], RulesHandler);
99
+ //# sourceMappingURL=rules.handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rules.handler.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/rules.handler.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAE5C,6DAAyD;AACzD,sDAA4E;AAC5E,uCAA2C;AAE3C,gEAAkE;AAClE,4EAA0E;AAQnE,IAAM,YAAY,GAAlB,MAAM,YAAY;IAGvB,YAA6B,YAA0B;QAA1B,iBAAY,GAAZ,YAAY,CAAc;QAFtC,iBAAY,GAAG,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;IAEZ,CAAC;IAE3D,KAAK,CAAC,MAAM,CACV,QAAgB,EAChB,IAAyC;QAEzC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;QAGD,MAAM,UAAU,GAAG,IAAA,oCAAmB,EAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACrB,OAAO,IAAA,oCAAmB,EAAC,UAAU,CAAC,KAAM,CAAC,CAAC;QAChD,CAAC;QAED,QAAQ,QAAQ,EAAE,CAAC;YACjB,KAAK,cAAc;gBACjB,OAAO,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACtC,KAAK,mBAAmB;gBACtB,OAAO,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;YAC1C;gBACE,OAAO,IAAI,CAAC;QAChB,CAAC;IACH,CAAC;IAED,kBAAkB;QAChB,OAAO;YACL;gBACE,IAAI,EAAE,cAAc;gBACpB,WAAW,EAAE,iCAAiC;gBAC9C,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;qBACvD;oBACD,QAAQ,EAAE,CAAC,OAAO,CAAC;iBACpB;aACF;YACD;gBACE,IAAI,EAAE,mBAAmB;gBACzB,WAAW,EAAE,6CAA6C;gBAC1D,WAAW,EAAE;oBACX,IAAI,EAAE,QAAQ;oBACd,UAAU,EAAE;wBACV,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE;qBAChE;oBACD,QAAQ,EAAE,CAAC,WAAW,CAAC;iBACxB;aACF;SACF,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAC7B,IAAyC;QAEzC,MAAM,KAAK,GAAG,IAAA,4CAAqB,EAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACnD,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YACnB,OAAO,IAAA,oCAAmB,EAAC,mCAAmC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO,IAAA,mCAAkB,EAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAEO,KAAK,CAAC,qBAAqB,CACjC,IAAyC;QAEzC,MAAM,SAAS,GAAG,IAAA,4CAAqB,EAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC3D,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC;YACvB,OAAO,IAAA,oCAAmB,EAAC,uCAAuC,CAAC,CAAC;QACtE,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAI1D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAgC,CAAC;YAC1D,MAAM,aAAa,GAAG,IAAA,oBAAY,EAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAEnD,OAAO,IAAA,mCAAkB,EAAC;gBACxB,GAAG,KAAK;gBACR,aAAa;aACd,CAAC,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAA,oCAAmB,EAAC,UAAU,SAAS,cAAc,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;CACF,CAAA;AA1FY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;qCAIgC,4BAAY;GAH5C,YAAY,CA0FxB"}
@@ -0,0 +1,11 @@
1
+ import type { ToolHandler, ToolDefinition, ToolResult } from './base.handler';
2
+ import { SkillRecommendationService } from '../../skill/skill-recommendation.service';
3
+ export declare class SkillHandler implements ToolHandler {
4
+ private readonly skillRecommendationService;
5
+ private readonly handledTools;
6
+ constructor(skillRecommendationService: SkillRecommendationService);
7
+ handle(toolName: string, args: Record<string, unknown> | undefined): Promise<ToolResult | null>;
8
+ getToolDefinitions(): ToolDefinition[];
9
+ private handleRecommendSkills;
10
+ private handleListSkills;
11
+ }