codingbuddy 2.0.0 → 2.2.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/agent/agent-prompt.builder.js +6 -0
- package/dist/src/agent/agent-prompt.builder.js.map +1 -1
- 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.js +5 -0
- package/dist/src/cli/cli.js.map +1 -1
- package/dist/src/cli/cli.types.d.ts +1 -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 +29 -43
- package/dist/src/cli/init/init.command.js.map +1 -1
- package/dist/src/cli/init/init.wizard.d.ts +22 -0
- package/dist/src/cli/init/init.wizard.js +277 -0
- package/dist/src/cli/init/init.wizard.js.map +1 -0
- 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/architecture-prompt.d.ts +16 -0
- package/dist/src/cli/init/prompts/architecture-prompt.js +66 -0
- package/dist/src/cli/init/prompts/architecture-prompt.js.map +1 -0
- package/dist/src/cli/init/prompts/basic-prompt.d.ts +13 -0
- package/dist/src/cli/init/prompts/basic-prompt.js +53 -0
- package/dist/src/cli/init/prompts/basic-prompt.js.map +1 -0
- package/dist/src/cli/init/prompts/conventions-prompt.d.ts +19 -0
- package/dist/src/cli/init/prompts/conventions-prompt.js +74 -0
- package/dist/src/cli/init/prompts/conventions-prompt.js.map +1 -0
- package/dist/src/cli/init/prompts/index.d.ts +15 -0
- package/dist/src/cli/init/prompts/index.js +35 -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/prompts/model-prompt.js +2 -2
- package/dist/src/cli/init/prompts/model-prompt.js.map +1 -1
- package/dist/src/cli/init/prompts/tech-stack-prompt.d.ts +22 -0
- package/dist/src/cli/init/prompts/tech-stack-prompt.js +68 -0
- package/dist/src/cli/init/prompts/tech-stack-prompt.js.map +1 -0
- package/dist/src/cli/init/prompts/test-strategy-prompt.d.ts +19 -0
- package/dist/src/cli/init/prompts/test-strategy-prompt.js +75 -0
- package/dist/src/cli/init/prompts/test-strategy-prompt.js.map +1 -0
- package/dist/src/cli/init/summary/index.d.ts +2 -0
- package/dist/src/cli/init/summary/index.js +9 -0
- package/dist/src/cli/init/summary/index.js.map +1 -0
- package/dist/src/cli/init/summary/summary.prompt.d.ts +7 -0
- package/dist/src/cli/init/summary/summary.prompt.js +22 -0
- package/dist/src/cli/init/summary/summary.prompt.js.map +1 -0
- package/dist/src/cli/init/summary/summary.renderer.d.ts +32 -0
- package/dist/src/cli/init/summary/summary.renderer.js +41 -0
- package/dist/src/cli/init/summary/summary.renderer.js.map +1 -0
- package/dist/src/cli/init/templates/config-renderer.d.ts +42 -0
- package/dist/src/cli/init/templates/config-renderer.js +247 -0
- package/dist/src/cli/init/templates/config-renderer.js.map +1 -0
- package/dist/src/cli/init/templates/index.d.ts +1 -0
- package/dist/src/cli/init/templates/index.js +5 -1
- package/dist/src/cli/init/templates/index.js.map +1 -1
- 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/cli/utils/console.js +26 -7
- package/dist/src/cli/utils/console.js.map +1 -1
- package/dist/src/config/config.loader.d.ts +1 -0
- package/dist/src/config/config.loader.js +23 -0
- package/dist/src/config/config.loader.js.map +1 -1
- package/dist/src/config/config.schema.d.ts +7 -0
- package/dist/src/config/config.schema.js +5 -1
- package/dist/src/config/config.schema.js.map +1 -1
- package/dist/src/config/config.service.d.ts +1 -0
- package/dist/src/config/config.service.js +26 -1
- package/dist/src/config/config.service.js.map +1 -1
- 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/auto-executor.d.ts +17 -0
- package/dist/src/keyword/auto-executor.js +95 -0
- package/dist/src/keyword/auto-executor.js.map +1 -0
- package/dist/src/keyword/auto-executor.types.d.ts +44 -0
- package/dist/src/keyword/auto-executor.types.js +7 -0
- package/dist/src/keyword/auto-executor.types.js.map +1 -0
- package/dist/src/keyword/auto-formatter.d.ts +8 -0
- package/dist/src/keyword/auto-formatter.js +79 -0
- package/dist/src/keyword/auto-formatter.js.map +1 -0
- package/dist/src/keyword/index.d.ts +9 -0
- package/dist/src/keyword/index.js +28 -0
- package/dist/src/keyword/index.js.map +1 -0
- package/dist/src/keyword/keyword.service.d.ts +6 -2
- package/dist/src/keyword/keyword.service.js +24 -6
- package/dist/src/keyword/keyword.service.js.map +1 -1
- package/dist/src/keyword/keyword.types.d.ts +24 -5
- package/dist/src/keyword/keyword.types.js +78 -3
- 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/keyword/rule-filter.js +1 -0
- package/dist/src/keyword/rule-filter.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-serverless.js +5 -0
- package/dist/src/mcp/mcp-serverless.js.map +1 -1
- 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.constants.js.map +1 -1
- package/dist/src/model/model.resolver.js +10 -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,167 @@
|
|
|
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.AgentHandler = void 0;
|
|
13
|
+
const common_1 = require("@nestjs/common");
|
|
14
|
+
const agent_service_1 = require("../../agent/agent.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 AgentHandler = class AgentHandler {
|
|
19
|
+
constructor(agentService) {
|
|
20
|
+
this.agentService = agentService;
|
|
21
|
+
this.handledTools = [
|
|
22
|
+
'get_agent_system_prompt',
|
|
23
|
+
'prepare_parallel_agents',
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
async handle(toolName, args) {
|
|
27
|
+
if (!this.handledTools.includes(toolName)) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const validation = (0, security_utils_1.sanitizeHandlerArgs)(args);
|
|
31
|
+
if (!validation.safe) {
|
|
32
|
+
return (0, response_utils_1.createErrorResponse)(validation.error);
|
|
33
|
+
}
|
|
34
|
+
switch (toolName) {
|
|
35
|
+
case 'get_agent_system_prompt':
|
|
36
|
+
return this.handleGetAgentSystemPrompt(args);
|
|
37
|
+
case 'prepare_parallel_agents':
|
|
38
|
+
return this.handlePrepareParallelAgents(args);
|
|
39
|
+
default:
|
|
40
|
+
return null;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
getToolDefinitions() {
|
|
44
|
+
return [
|
|
45
|
+
{
|
|
46
|
+
name: 'get_agent_system_prompt',
|
|
47
|
+
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.',
|
|
48
|
+
inputSchema: {
|
|
49
|
+
type: 'object',
|
|
50
|
+
properties: {
|
|
51
|
+
agentName: {
|
|
52
|
+
type: 'string',
|
|
53
|
+
description: 'Name of the specialist agent (e.g., security-specialist, accessibility-specialist)',
|
|
54
|
+
},
|
|
55
|
+
context: {
|
|
56
|
+
type: 'object',
|
|
57
|
+
description: 'Context for the agent',
|
|
58
|
+
properties: {
|
|
59
|
+
mode: {
|
|
60
|
+
type: 'string',
|
|
61
|
+
enum: ['PLAN', 'ACT', 'EVAL'],
|
|
62
|
+
description: 'Current workflow mode',
|
|
63
|
+
},
|
|
64
|
+
targetFiles: {
|
|
65
|
+
type: 'array',
|
|
66
|
+
items: { type: 'string' },
|
|
67
|
+
description: 'Files to analyze or review',
|
|
68
|
+
},
|
|
69
|
+
taskDescription: {
|
|
70
|
+
type: 'string',
|
|
71
|
+
description: 'Description of the task',
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
required: ['mode'],
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
required: ['agentName', 'context'],
|
|
78
|
+
},
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
name: 'prepare_parallel_agents',
|
|
82
|
+
description: 'Prepare multiple specialist agents for parallel execution via Claude Code Task tool. Returns prompts and hints for launching agents concurrently.',
|
|
83
|
+
inputSchema: {
|
|
84
|
+
type: 'object',
|
|
85
|
+
properties: {
|
|
86
|
+
mode: {
|
|
87
|
+
type: 'string',
|
|
88
|
+
enum: ['PLAN', 'ACT', 'EVAL'],
|
|
89
|
+
description: 'Current workflow mode',
|
|
90
|
+
},
|
|
91
|
+
specialists: {
|
|
92
|
+
type: 'array',
|
|
93
|
+
items: { type: 'string' },
|
|
94
|
+
description: 'List of specialist agent names (e.g., ["security-specialist", "accessibility-specialist"])',
|
|
95
|
+
},
|
|
96
|
+
targetFiles: {
|
|
97
|
+
type: 'array',
|
|
98
|
+
items: { type: 'string' },
|
|
99
|
+
description: 'Files to analyze or review',
|
|
100
|
+
},
|
|
101
|
+
sharedContext: {
|
|
102
|
+
type: 'string',
|
|
103
|
+
description: 'Shared context or task description for all agents',
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
required: ['mode', 'specialists'],
|
|
107
|
+
},
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
}
|
|
111
|
+
async handleGetAgentSystemPrompt(args) {
|
|
112
|
+
const agentName = (0, validation_constants_1.extractRequiredString)(args, 'agentName');
|
|
113
|
+
if (agentName === null) {
|
|
114
|
+
return (0, response_utils_1.createErrorResponse)('Missing required parameter: agentName');
|
|
115
|
+
}
|
|
116
|
+
const context = args?.context;
|
|
117
|
+
if (!context) {
|
|
118
|
+
return (0, response_utils_1.createErrorResponse)('Missing required parameter: context.mode (PLAN, ACT, or EVAL)');
|
|
119
|
+
}
|
|
120
|
+
const mode = context.mode;
|
|
121
|
+
if (!(0, validation_constants_1.isValidMode)(mode)) {
|
|
122
|
+
return (0, response_utils_1.createErrorResponse)(mode === undefined || mode === null
|
|
123
|
+
? 'Missing required parameter: context.mode (PLAN, ACT, or EVAL)'
|
|
124
|
+
: `Invalid mode: ${mode}. Must be PLAN, ACT, or EVAL`);
|
|
125
|
+
}
|
|
126
|
+
const targetFiles = (0, validation_constants_1.extractStringArray)(context, 'targetFiles');
|
|
127
|
+
const taskDescription = (0, validation_constants_1.extractOptionalString)(context, 'taskDescription');
|
|
128
|
+
try {
|
|
129
|
+
const result = await this.agentService.getAgentSystemPrompt(agentName, {
|
|
130
|
+
mode: mode,
|
|
131
|
+
targetFiles,
|
|
132
|
+
taskDescription,
|
|
133
|
+
});
|
|
134
|
+
return (0, response_utils_1.createJsonResponse)(result);
|
|
135
|
+
}
|
|
136
|
+
catch (error) {
|
|
137
|
+
return (0, response_utils_1.createErrorResponse)(`Failed to get agent system prompt: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
async handlePrepareParallelAgents(args) {
|
|
141
|
+
const mode = args?.mode;
|
|
142
|
+
if (!(0, validation_constants_1.isValidMode)(mode)) {
|
|
143
|
+
return (0, response_utils_1.createErrorResponse)(mode === undefined || mode === null
|
|
144
|
+
? 'Missing required parameter: mode (PLAN, ACT, or EVAL)'
|
|
145
|
+
: `Invalid mode: ${mode}. Must be PLAN, ACT, or EVAL`);
|
|
146
|
+
}
|
|
147
|
+
const specialists = (0, validation_constants_1.extractStringArray)(args, 'specialists');
|
|
148
|
+
if (!specialists || specialists.length === 0) {
|
|
149
|
+
return (0, response_utils_1.createErrorResponse)('Missing required parameter: specialists (array of agent names)');
|
|
150
|
+
}
|
|
151
|
+
const targetFiles = (0, validation_constants_1.extractStringArray)(args, 'targetFiles');
|
|
152
|
+
const sharedContext = (0, validation_constants_1.extractOptionalString)(args, 'sharedContext');
|
|
153
|
+
try {
|
|
154
|
+
const result = await this.agentService.prepareParallelAgents(mode, specialists, targetFiles, sharedContext);
|
|
155
|
+
return (0, response_utils_1.createJsonResponse)(result);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
return (0, response_utils_1.createErrorResponse)(`Failed to prepare parallel agents: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
exports.AgentHandler = AgentHandler;
|
|
163
|
+
exports.AgentHandler = AgentHandler = __decorate([
|
|
164
|
+
(0, common_1.Injectable)(),
|
|
165
|
+
__metadata("design:paramtypes", [agent_service_1.AgentService])
|
|
166
|
+
], AgentHandler);
|
|
167
|
+
//# sourceMappingURL=agent.handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.handler.js","sourceRoot":"","sources":["../../../../src/mcp/handlers/agent.handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -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 @@
|
|
|
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
|