codingbuddy 0.0.0-canary.20260105062817.7f479d1 → 0.0.0-canary.20260106010103.2ea8cb3
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.d.ts +5 -0
- package/dist/src/agent/agent-prompt.builder.js +84 -0
- package/dist/src/agent/agent-prompt.builder.js.map +1 -0
- package/dist/src/agent/agent.module.d.ts +2 -0
- package/dist/src/agent/agent.module.js +23 -0
- package/dist/src/agent/agent.module.js.map +1 -0
- package/dist/src/agent/agent.service.d.ts +15 -0
- package/dist/src/agent/agent.service.js +103 -0
- package/dist/src/agent/agent.service.js.map +1 -0
- package/dist/src/agent/agent.types.d.ts +29 -0
- package/dist/src/agent/agent.types.js +31 -0
- package/dist/src/agent/agent.types.js.map +1 -0
- package/dist/src/agent/index.d.ts +4 -0
- package/dist/src/agent/index.js +21 -0
- package/dist/src/agent/index.js.map +1 -0
- package/dist/src/app.module.js +8 -1
- package/dist/src/app.module.js.map +1 -1
- package/dist/src/keyword/keyword.module.js.map +1 -1
- package/dist/src/keyword/keyword.service.d.ts +2 -1
- package/dist/src/keyword/keyword.service.js +37 -3
- package/dist/src/keyword/keyword.service.js.map +1 -1
- package/dist/src/keyword/keyword.types.d.ts +6 -0
- package/dist/src/mcp/mcp.module.js +4 -1
- package/dist/src/mcp/mcp.module.js.map +1 -1
- package/dist/src/mcp/mcp.service.d.ts +7 -1
- package/dist/src/mcp/mcp.service.js +128 -3
- package/dist/src/mcp/mcp.service.js.map +1 -1
- package/dist/src/shared/language.service.d.ts +9 -0
- package/dist/src/shared/language.service.js +108 -0
- package/dist/src/shared/language.service.js.map +1 -0
- package/dist/src/shared/language.types.d.ts +12 -0
- package/dist/src/shared/language.types.js +3 -0
- package/dist/src/shared/language.types.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AgentProfile } from '../rules/rules.types';
|
|
2
|
+
import type { AgentContext } from './agent.types';
|
|
3
|
+
export declare function buildAgentSystemPrompt(agentProfile: AgentProfile, context: AgentContext): string;
|
|
4
|
+
export declare function buildTaskDescription(agentProfile: AgentProfile, context: AgentContext): string;
|
|
5
|
+
export declare function buildParallelExecutionHint(): string;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.buildAgentSystemPrompt = buildAgentSystemPrompt;
|
|
4
|
+
exports.buildTaskDescription = buildTaskDescription;
|
|
5
|
+
exports.buildParallelExecutionHint = buildParallelExecutionHint;
|
|
6
|
+
const MODE_INSTRUCTIONS = {
|
|
7
|
+
PLAN: `You are in PLAN mode. Your task is to:
|
|
8
|
+
- Analyze the requirements and design an implementation approach
|
|
9
|
+
- Plan architecture and component structure
|
|
10
|
+
- Identify potential risks and considerations
|
|
11
|
+
- Provide actionable recommendations for implementation`,
|
|
12
|
+
ACT: `You are in ACT mode. Your task is to:
|
|
13
|
+
- Implement and verify the planned changes
|
|
14
|
+
- Check code quality and standards compliance
|
|
15
|
+
- Ensure proper test coverage
|
|
16
|
+
- Validate implementation against requirements`,
|
|
17
|
+
EVAL: `You are in EVAL mode. Your task is to:
|
|
18
|
+
- Evaluate and assess the implementation quality
|
|
19
|
+
- Review code for potential issues and improvements
|
|
20
|
+
- Provide objective, evidence-based feedback
|
|
21
|
+
- Identify areas for improvement with specific recommendations`,
|
|
22
|
+
};
|
|
23
|
+
const MODE_TASK_PREFIXES = {
|
|
24
|
+
PLAN: 'planning',
|
|
25
|
+
ACT: 'verification',
|
|
26
|
+
EVAL: 'review',
|
|
27
|
+
};
|
|
28
|
+
function buildAgentSystemPrompt(agentProfile, context) {
|
|
29
|
+
const sections = [];
|
|
30
|
+
sections.push(`# ${agentProfile.name}`);
|
|
31
|
+
sections.push('');
|
|
32
|
+
sections.push(`You are a ${agentProfile.role.title} specialist agent.`);
|
|
33
|
+
sections.push('');
|
|
34
|
+
sections.push('## Description');
|
|
35
|
+
sections.push(agentProfile.description);
|
|
36
|
+
sections.push('');
|
|
37
|
+
sections.push('## Your Expertise');
|
|
38
|
+
for (const expertise of agentProfile.role.expertise) {
|
|
39
|
+
sections.push(`- ${expertise}`);
|
|
40
|
+
}
|
|
41
|
+
sections.push('');
|
|
42
|
+
if (agentProfile.role.responsibilities?.length) {
|
|
43
|
+
sections.push('## Your Responsibilities');
|
|
44
|
+
for (const responsibility of agentProfile.role.responsibilities) {
|
|
45
|
+
sections.push(`- ${responsibility}`);
|
|
46
|
+
}
|
|
47
|
+
sections.push('');
|
|
48
|
+
}
|
|
49
|
+
sections.push('## Current Mode');
|
|
50
|
+
sections.push(`Mode: ${context.mode}`);
|
|
51
|
+
sections.push('');
|
|
52
|
+
sections.push(MODE_INSTRUCTIONS[context.mode]);
|
|
53
|
+
sections.push('');
|
|
54
|
+
sections.push('## Task Context');
|
|
55
|
+
if (context.taskDescription) {
|
|
56
|
+
sections.push(`Task: ${context.taskDescription}`);
|
|
57
|
+
}
|
|
58
|
+
if (context.targetFiles?.length) {
|
|
59
|
+
sections.push('');
|
|
60
|
+
sections.push('Target Files:');
|
|
61
|
+
for (const file of context.targetFiles) {
|
|
62
|
+
sections.push(`- ${file}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
sections.push('');
|
|
66
|
+
sections.push('## Output Format');
|
|
67
|
+
sections.push(`Provide your analysis in a structured JSON format with the following fields:
|
|
68
|
+
- findings: Array of issues or observations found
|
|
69
|
+
- recommendations: Array of actionable recommendations
|
|
70
|
+
- summary: Brief summary of your assessment
|
|
71
|
+
- riskLevel: Overall risk level (critical/high/medium/low)
|
|
72
|
+
|
|
73
|
+
Ensure your output is valid JSON that can be parsed programmatically.`);
|
|
74
|
+
return sections.join('\n');
|
|
75
|
+
}
|
|
76
|
+
function buildTaskDescription(agentProfile, context) {
|
|
77
|
+
const agentShortName = agentProfile.name.split(' ')[0];
|
|
78
|
+
const modePrefix = MODE_TASK_PREFIXES[context.mode];
|
|
79
|
+
return `${agentShortName} ${modePrefix}`;
|
|
80
|
+
}
|
|
81
|
+
function buildParallelExecutionHint() {
|
|
82
|
+
return `Use Claude Code Task tool with subagent_type: "general-purpose" and run_in_background: true for parallel execution. Launch multiple Task tools in a single message to run agents concurrently.`;
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=agent-prompt.builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-prompt.builder.js","sourceRoot":"","sources":["../../../src/agent/agent-prompt.builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.AgentModule = void 0;
|
|
10
|
+
const common_1 = require("@nestjs/common");
|
|
11
|
+
const agent_service_1 = require("./agent.service");
|
|
12
|
+
const rules_module_1 = require("../rules/rules.module");
|
|
13
|
+
let AgentModule = class AgentModule {
|
|
14
|
+
};
|
|
15
|
+
exports.AgentModule = AgentModule;
|
|
16
|
+
exports.AgentModule = AgentModule = __decorate([
|
|
17
|
+
(0, common_1.Module)({
|
|
18
|
+
imports: [rules_module_1.RulesModule],
|
|
19
|
+
providers: [agent_service_1.AgentService],
|
|
20
|
+
exports: [agent_service_1.AgentService],
|
|
21
|
+
})
|
|
22
|
+
], AgentModule);
|
|
23
|
+
//# sourceMappingURL=agent.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.module.js","sourceRoot":"","sources":["../../../src/agent/agent.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,mDAA+C;AAC/C,wDAAoD;AAO7C,IAAM,WAAW,GAAjB,MAAM,WAAW;CAAG,CAAA;AAAd,kCAAW;sBAAX,WAAW;IALvB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,CAAC;QACtB,SAAS,EAAE,CAAC,4BAAY,CAAC;QACzB,OAAO,EAAE,CAAC,4BAAY,CAAC;KACxB,CAAC;GACW,WAAW,CAAG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { RulesService } from '../rules/rules.service';
|
|
2
|
+
import type { Mode } from '../keyword/keyword.types';
|
|
3
|
+
import type { AgentContext, AgentSystemPrompt, ParallelAgentSet } from './agent.types';
|
|
4
|
+
export declare class AgentService {
|
|
5
|
+
private readonly rulesService;
|
|
6
|
+
private readonly logger;
|
|
7
|
+
constructor(rulesService: RulesService);
|
|
8
|
+
getAgentSystemPrompt(agentName: string, context: AgentContext): Promise<AgentSystemPrompt>;
|
|
9
|
+
prepareParallelAgents(mode: Mode, specialists: string[], targetFiles?: string[], sharedContext?: string): Promise<ParallelAgentSet>;
|
|
10
|
+
private loadAgents;
|
|
11
|
+
private tryLoadAgent;
|
|
12
|
+
private buildParallelAgentSet;
|
|
13
|
+
getRecommendedAgents(modeDefaults: string[], files: string[]): string[];
|
|
14
|
+
private addFilePatternAgents;
|
|
15
|
+
}
|
|
@@ -0,0 +1,103 @@
|
|
|
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 AgentService_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.AgentService = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const rules_service_1 = require("../rules/rules.service");
|
|
16
|
+
const agent_types_1 = require("./agent.types");
|
|
17
|
+
const agent_prompt_builder_1 = require("./agent-prompt.builder");
|
|
18
|
+
let AgentService = AgentService_1 = class AgentService {
|
|
19
|
+
constructor(rulesService) {
|
|
20
|
+
this.rulesService = rulesService;
|
|
21
|
+
this.logger = new common_1.Logger(AgentService_1.name);
|
|
22
|
+
}
|
|
23
|
+
async getAgentSystemPrompt(agentName, context) {
|
|
24
|
+
const agentProfile = await this.rulesService.getAgent(agentName);
|
|
25
|
+
const systemPrompt = (0, agent_prompt_builder_1.buildAgentSystemPrompt)(agentProfile, context);
|
|
26
|
+
const description = (0, agent_prompt_builder_1.buildTaskDescription)(agentProfile, context);
|
|
27
|
+
return {
|
|
28
|
+
agentName,
|
|
29
|
+
displayName: agentProfile.name,
|
|
30
|
+
systemPrompt,
|
|
31
|
+
description,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
async prepareParallelAgents(mode, specialists, targetFiles, sharedContext) {
|
|
35
|
+
const uniqueSpecialists = [...new Set(specialists)];
|
|
36
|
+
const context = {
|
|
37
|
+
mode,
|
|
38
|
+
targetFiles,
|
|
39
|
+
taskDescription: sharedContext,
|
|
40
|
+
};
|
|
41
|
+
const { agents, failedAgents } = await this.loadAgents(uniqueSpecialists, context);
|
|
42
|
+
return this.buildParallelAgentSet(agents, failedAgents);
|
|
43
|
+
}
|
|
44
|
+
async loadAgents(specialists, context) {
|
|
45
|
+
const results = await Promise.all(specialists.map(name => this.tryLoadAgent(name, context)));
|
|
46
|
+
const agents = [];
|
|
47
|
+
const failedAgents = [];
|
|
48
|
+
for (const result of results) {
|
|
49
|
+
if (result.success) {
|
|
50
|
+
agents.push(result.agent);
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
failedAgents.push(result.error);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return { agents, failedAgents };
|
|
57
|
+
}
|
|
58
|
+
async tryLoadAgent(specialistName, context) {
|
|
59
|
+
try {
|
|
60
|
+
const profile = await this.rulesService.getAgent(specialistName);
|
|
61
|
+
const agent = {
|
|
62
|
+
id: specialistName,
|
|
63
|
+
displayName: profile.name,
|
|
64
|
+
taskPrompt: (0, agent_prompt_builder_1.buildAgentSystemPrompt)(profile, context),
|
|
65
|
+
description: (0, agent_prompt_builder_1.buildTaskDescription)(profile, context),
|
|
66
|
+
};
|
|
67
|
+
return { success: true, agent };
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
const reason = error instanceof Error ? error.message : 'Unknown error';
|
|
71
|
+
this.logger.warn(`Failed to load agent '${specialistName}': ${reason}`);
|
|
72
|
+
return { success: false, error: { id: specialistName, reason } };
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
buildParallelAgentSet(agents, failedAgents) {
|
|
76
|
+
const result = {
|
|
77
|
+
agents,
|
|
78
|
+
parallelExecutionHint: (0, agent_prompt_builder_1.buildParallelExecutionHint)(),
|
|
79
|
+
};
|
|
80
|
+
if (failedAgents.length > 0) {
|
|
81
|
+
result.failedAgents = failedAgents;
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
getRecommendedAgents(modeDefaults, files) {
|
|
86
|
+
const recommended = new Set(modeDefaults);
|
|
87
|
+
files.forEach(file => this.addFilePatternAgents(file.toLowerCase(), recommended));
|
|
88
|
+
return Array.from(recommended);
|
|
89
|
+
}
|
|
90
|
+
addFilePatternAgents(fileLower, recommended) {
|
|
91
|
+
for (const [pattern, agents] of Object.entries(agent_types_1.FILE_PATTERN_SPECIALISTS)) {
|
|
92
|
+
if (fileLower.includes(pattern)) {
|
|
93
|
+
agents.forEach(agent => recommended.add(agent));
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
exports.AgentService = AgentService;
|
|
99
|
+
exports.AgentService = AgentService = AgentService_1 = __decorate([
|
|
100
|
+
(0, common_1.Injectable)(),
|
|
101
|
+
__metadata("design:paramtypes", [rules_service_1.RulesService])
|
|
102
|
+
], AgentService);
|
|
103
|
+
//# sourceMappingURL=agent.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.service.js","sourceRoot":"","sources":["../../../src/agent/agent.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Mode } from '../keyword/keyword.types';
|
|
2
|
+
export interface AgentContext {
|
|
3
|
+
mode: Mode;
|
|
4
|
+
targetFiles?: string[];
|
|
5
|
+
taskDescription?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface AgentSystemPrompt {
|
|
8
|
+
agentName: string;
|
|
9
|
+
displayName: string;
|
|
10
|
+
systemPrompt: string;
|
|
11
|
+
description: string;
|
|
12
|
+
outputSchema?: Record<string, unknown>;
|
|
13
|
+
}
|
|
14
|
+
export interface PreparedAgent {
|
|
15
|
+
id: string;
|
|
16
|
+
displayName: string;
|
|
17
|
+
taskPrompt: string;
|
|
18
|
+
description: string;
|
|
19
|
+
}
|
|
20
|
+
export interface FailedAgent {
|
|
21
|
+
id: string;
|
|
22
|
+
reason: string;
|
|
23
|
+
}
|
|
24
|
+
export interface ParallelAgentSet {
|
|
25
|
+
agents: PreparedAgent[];
|
|
26
|
+
parallelExecutionHint: string;
|
|
27
|
+
failedAgents?: FailedAgent[];
|
|
28
|
+
}
|
|
29
|
+
export declare const FILE_PATTERN_SPECIALISTS: Record<string, string[]>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FILE_PATTERN_SPECIALISTS = void 0;
|
|
4
|
+
exports.FILE_PATTERN_SPECIALISTS = {
|
|
5
|
+
auth: ['security-specialist'],
|
|
6
|
+
login: ['security-specialist', 'accessibility-specialist'],
|
|
7
|
+
password: ['security-specialist'],
|
|
8
|
+
token: ['security-specialist'],
|
|
9
|
+
oauth: ['security-specialist'],
|
|
10
|
+
jwt: ['security-specialist'],
|
|
11
|
+
component: [
|
|
12
|
+
'accessibility-specialist',
|
|
13
|
+
'ui-ux-designer',
|
|
14
|
+
'performance-specialist',
|
|
15
|
+
],
|
|
16
|
+
button: ['accessibility-specialist', 'ui-ux-designer'],
|
|
17
|
+
form: ['accessibility-specialist', 'security-specialist'],
|
|
18
|
+
input: ['accessibility-specialist'],
|
|
19
|
+
modal: ['accessibility-specialist', 'ui-ux-designer'],
|
|
20
|
+
page: [
|
|
21
|
+
'seo-specialist',
|
|
22
|
+
'accessibility-specialist',
|
|
23
|
+
'performance-specialist',
|
|
24
|
+
],
|
|
25
|
+
layout: ['seo-specialist', 'accessibility-specialist'],
|
|
26
|
+
api: ['security-specialist', 'performance-specialist'],
|
|
27
|
+
hook: ['test-strategy-specialist', 'performance-specialist'],
|
|
28
|
+
service: ['architecture-specialist', 'test-strategy-specialist'],
|
|
29
|
+
util: ['test-strategy-specialist', 'code-quality-specialist'],
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=agent.types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.types.js","sourceRoot":"","sources":["../../../src/agent/agent.types.ts"],"names":[],"mappings":";;;AAqDa,QAAA,wBAAwB,GAA6B;IAEhE,IAAI,EAAE,CAAC,qBAAqB,CAAC;IAC7B,KAAK,EAAE,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IAC1D,QAAQ,EAAE,CAAC,qBAAqB,CAAC;IACjC,KAAK,EAAE,CAAC,qBAAqB,CAAC;IAC9B,KAAK,EAAE,CAAC,qBAAqB,CAAC;IAC9B,GAAG,EAAE,CAAC,qBAAqB,CAAC;IAG5B,SAAS,EAAE;QACT,0BAA0B;QAC1B,gBAAgB;QAChB,wBAAwB;KACzB;IACD,MAAM,EAAE,CAAC,0BAA0B,EAAE,gBAAgB,CAAC;IACtD,IAAI,EAAE,CAAC,0BAA0B,EAAE,qBAAqB,CAAC;IACzD,KAAK,EAAE,CAAC,0BAA0B,CAAC;IACnC,KAAK,EAAE,CAAC,0BAA0B,EAAE,gBAAgB,CAAC;IAGrD,IAAI,EAAE;QACJ,gBAAgB;QAChB,0BAA0B;QAC1B,wBAAwB;KACzB;IACD,MAAM,EAAE,CAAC,gBAAgB,EAAE,0BAA0B,CAAC;IAGtD,GAAG,EAAE,CAAC,qBAAqB,EAAE,wBAAwB,CAAC;IACtD,IAAI,EAAE,CAAC,0BAA0B,EAAE,wBAAwB,CAAC;IAC5D,OAAO,EAAE,CAAC,yBAAyB,EAAE,0BAA0B,CAAC;IAChE,IAAI,EAAE,CAAC,0BAA0B,EAAE,yBAAyB,CAAC;CAC9D,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./agent.module"), exports);
|
|
18
|
+
__exportStar(require("./agent.service"), exports);
|
|
19
|
+
__exportStar(require("./agent.types"), exports);
|
|
20
|
+
__exportStar(require("./agent-prompt.builder"), exports);
|
|
21
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agent/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iDAA+B;AAC/B,kDAAgC;AAChC,gDAA8B;AAC9B,yDAAuC"}
|
package/dist/src/app.module.js
CHANGED
|
@@ -12,12 +12,19 @@ const config_1 = require("@nestjs/config");
|
|
|
12
12
|
const rules_module_1 = require("./rules/rules.module");
|
|
13
13
|
const mcp_module_1 = require("./mcp/mcp.module");
|
|
14
14
|
const keyword_module_1 = require("./keyword/keyword.module");
|
|
15
|
+
const agent_module_1 = require("./agent/agent.module");
|
|
15
16
|
let AppModule = class AppModule {
|
|
16
17
|
};
|
|
17
18
|
exports.AppModule = AppModule;
|
|
18
19
|
exports.AppModule = AppModule = __decorate([
|
|
19
20
|
(0, common_1.Module)({
|
|
20
|
-
imports: [
|
|
21
|
+
imports: [
|
|
22
|
+
config_1.ConfigModule.forRoot(),
|
|
23
|
+
rules_module_1.RulesModule,
|
|
24
|
+
mcp_module_1.McpModule,
|
|
25
|
+
keyword_module_1.KeywordModule,
|
|
26
|
+
agent_module_1.AgentModule,
|
|
27
|
+
],
|
|
21
28
|
})
|
|
22
29
|
], AppModule);
|
|
23
30
|
//# sourceMappingURL=app.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,uDAAmD;AACnD,iDAA6C;AAC7C,6DAAyD;
|
|
1
|
+
{"version":3,"file":"app.module.js","sourceRoot":"","sources":["../../src/app.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,2CAA8C;AAC9C,uDAAmD;AACnD,iDAA6C;AAC7C,6DAAyD;AACzD,uDAAmD;AAW5C,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IATrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,qBAAY,CAAC,OAAO,EAAE;YACtB,0BAAW;YACX,sBAAS;YACT,8BAAa;YACb,0BAAW;SACZ;KACF,CAAC;GACW,SAAS,CAAG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyword.module.js","sourceRoot":"","sources":["../../../src/keyword/keyword.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,wDAAoD;AACpD,0DAAsD;AACtD,uDAAmD;AAGtC,QAAA,eAAe,GAAG,iBAAiB,CAAC;AA6B1C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IA3BzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,CAAC;QACtB,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,uBAAe;gBACxB,UAAU,EAAE,CAAC,YAA0B,EAAE,EAAE;oBACzC,MAAM,UAAU,GAAG,KAAK,IAAiC,EAAE;wBACzD,MAAM,OAAO,GACX,MAAM,YAAY,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;wBAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;oBACnD,CAAC,CAAC;oBAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAAmB,EAAE;wBACvD,OAAO,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;oBAC3C,CAAC,CAAC;oBAEF,MAAM,SAAS,GAAG,KAAK,EAAE,SAAiB,
|
|
1
|
+
{"version":3,"file":"keyword.module.js","sourceRoot":"","sources":["../../../src/keyword/keyword.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAwC;AACxC,wDAAoD;AACpD,0DAAsD;AACtD,uDAAmD;AAGtC,QAAA,eAAe,GAAG,iBAAiB,CAAC;AA6B1C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IA3BzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,CAAC;QACtB,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,uBAAe;gBACxB,UAAU,EAAE,CAAC,YAA0B,EAAE,EAAE;oBACzC,MAAM,UAAU,GAAG,KAAK,IAAiC,EAAE;wBACzD,MAAM,OAAO,GACX,MAAM,YAAY,CAAC,cAAc,CAAC,oBAAoB,CAAC,CAAC;wBAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAuB,CAAC;oBACnD,CAAC,CAAC;oBAEF,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAAmB,EAAE;wBACvD,OAAO,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;oBAC3C,CAAC,CAAC;oBAEF,MAAM,SAAS,GAAG,KAAK,EAAE,SAAiB,EAAoB,EAAE;wBAC9D,OAAO,YAAY,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;oBAC1C,CAAC,CAAC;oBAEF,OAAO,IAAI,gCAAc,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;gBAC7D,CAAC;gBACD,MAAM,EAAE,CAAC,4BAAY,CAAC;aACvB;SACF;QACD,OAAO,EAAE,CAAC,uBAAe,CAAC;KAC3B,CAAC;GACW,aAAa,CAAG"}
|
|
@@ -4,8 +4,9 @@ export declare class KeywordService {
|
|
|
4
4
|
private readonly loadRuleFn;
|
|
5
5
|
private readonly loadAgentInfoFn?;
|
|
6
6
|
private configCache;
|
|
7
|
-
constructor(loadConfigFn: () => Promise<KeywordModesConfig>, loadRuleFn: (path: string) => Promise<string>, loadAgentInfoFn?: ((agentName: string) => Promise<
|
|
7
|
+
constructor(loadConfigFn: () => Promise<KeywordModesConfig>, loadRuleFn: (path: string) => Promise<string>, loadAgentInfoFn?: ((agentName: string) => Promise<unknown>) | undefined);
|
|
8
8
|
parseMode(prompt: string): Promise<ParseModeResult>;
|
|
9
|
+
private getParallelAgentsRecommendation;
|
|
9
10
|
loadModeConfig(): Promise<KeywordModesConfig>;
|
|
10
11
|
getRulesForMode(mode: Mode): Promise<RuleContent[]>;
|
|
11
12
|
private getAgentInfo;
|
|
@@ -10,6 +10,10 @@ const DEFAULT_CONFIG = {
|
|
|
10
10
|
rules: ['rules/core.md', 'rules/augmented-coding.md'],
|
|
11
11
|
agent: keyword_types_1.MODE_AGENTS[0],
|
|
12
12
|
delegates_to: 'frontend-developer',
|
|
13
|
+
defaultSpecialists: [
|
|
14
|
+
'architecture-specialist',
|
|
15
|
+
'test-strategy-specialist',
|
|
16
|
+
],
|
|
13
17
|
},
|
|
14
18
|
ACT: {
|
|
15
19
|
description: 'Actual task execution phase',
|
|
@@ -17,6 +21,10 @@ const DEFAULT_CONFIG = {
|
|
|
17
21
|
rules: ['rules/core.md', 'rules/project.md', 'rules/augmented-coding.md'],
|
|
18
22
|
agent: keyword_types_1.MODE_AGENTS[1],
|
|
19
23
|
delegates_to: 'frontend-developer',
|
|
24
|
+
defaultSpecialists: [
|
|
25
|
+
'code-quality-specialist',
|
|
26
|
+
'test-strategy-specialist',
|
|
27
|
+
],
|
|
20
28
|
},
|
|
21
29
|
EVAL: {
|
|
22
30
|
description: 'Result review and assessment phase',
|
|
@@ -24,6 +32,12 @@ const DEFAULT_CONFIG = {
|
|
|
24
32
|
rules: ['rules/core.md', 'rules/augmented-coding.md'],
|
|
25
33
|
agent: keyword_types_1.MODE_AGENTS[2],
|
|
26
34
|
delegates_to: 'code-reviewer',
|
|
35
|
+
defaultSpecialists: [
|
|
36
|
+
'security-specialist',
|
|
37
|
+
'accessibility-specialist',
|
|
38
|
+
'performance-specialist',
|
|
39
|
+
'code-quality-specialist',
|
|
40
|
+
],
|
|
27
41
|
},
|
|
28
42
|
},
|
|
29
43
|
defaultMode: 'PLAN',
|
|
@@ -104,8 +118,23 @@ class KeywordService {
|
|
|
104
118
|
result.delegate_agent_info = delegateAgentInfo;
|
|
105
119
|
}
|
|
106
120
|
}
|
|
121
|
+
const parallelAgentsRecommendation = this.getParallelAgentsRecommendation(mode, config);
|
|
122
|
+
if (parallelAgentsRecommendation) {
|
|
123
|
+
result.parallelAgentsRecommendation = parallelAgentsRecommendation;
|
|
124
|
+
}
|
|
107
125
|
return result;
|
|
108
126
|
}
|
|
127
|
+
getParallelAgentsRecommendation(mode, config) {
|
|
128
|
+
const modeConfig = config.modes[mode];
|
|
129
|
+
const specialists = modeConfig?.defaultSpecialists;
|
|
130
|
+
if (!specialists || specialists.length === 0) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
specialists: [...specialists],
|
|
135
|
+
hint: `Use Task tool with subagent_type="general-purpose" and run_in_background=true for each specialist. Call prepare_parallel_agents MCP tool to get ready-to-use prompts.`,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
109
138
|
async loadModeConfig() {
|
|
110
139
|
if (this.configCache) {
|
|
111
140
|
return this.configCache;
|
|
@@ -139,10 +168,15 @@ class KeywordService {
|
|
|
139
168
|
}
|
|
140
169
|
try {
|
|
141
170
|
const agentData = await this.loadAgentInfoFn(agentName);
|
|
171
|
+
if (!agentData || typeof agentData !== 'object') {
|
|
172
|
+
return undefined;
|
|
173
|
+
}
|
|
174
|
+
const agent = agentData;
|
|
175
|
+
const role = agent.role;
|
|
142
176
|
return {
|
|
143
|
-
name:
|
|
144
|
-
description:
|
|
145
|
-
expertise:
|
|
177
|
+
name: typeof agent.name === 'string' ? agent.name : agentName,
|
|
178
|
+
description: typeof agent.description === 'string' ? agent.description : '',
|
|
179
|
+
expertise: Array.isArray(role?.expertise) ? role.expertise : [],
|
|
146
180
|
};
|
|
147
181
|
}
|
|
148
182
|
catch {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyword.service.js","sourceRoot":"","sources":["../../../src/keyword/keyword.service.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"keyword.service.js","sourceRoot":"","sources":["../../../src/keyword/keyword.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -13,6 +13,10 @@ export interface AgentInfo {
|
|
|
13
13
|
description: string;
|
|
14
14
|
expertise: string[];
|
|
15
15
|
}
|
|
16
|
+
export interface ParallelAgentRecommendation {
|
|
17
|
+
specialists: string[];
|
|
18
|
+
hint: string;
|
|
19
|
+
}
|
|
16
20
|
export interface ParseModeResult {
|
|
17
21
|
mode: Mode;
|
|
18
22
|
originalPrompt: string;
|
|
@@ -22,6 +26,7 @@ export interface ParseModeResult {
|
|
|
22
26
|
agent?: string;
|
|
23
27
|
delegates_to?: string;
|
|
24
28
|
delegate_agent_info?: AgentInfo;
|
|
29
|
+
parallelAgentsRecommendation?: ParallelAgentRecommendation;
|
|
25
30
|
}
|
|
26
31
|
export interface ModeConfig {
|
|
27
32
|
description: string;
|
|
@@ -29,6 +34,7 @@ export interface ModeConfig {
|
|
|
29
34
|
rules: string[];
|
|
30
35
|
agent?: string;
|
|
31
36
|
delegates_to?: string;
|
|
37
|
+
defaultSpecialists?: string[];
|
|
32
38
|
}
|
|
33
39
|
export interface KeywordModesConfig {
|
|
34
40
|
modes: Record<Mode, ModeConfig>;
|
|
@@ -14,7 +14,9 @@ const rules_module_1 = require("../rules/rules.module");
|
|
|
14
14
|
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
|
+
const agent_module_1 = require("../agent/agent.module");
|
|
17
18
|
const skill_recommendation_service_1 = require("../skill/skill-recommendation.service");
|
|
19
|
+
const language_service_1 = require("../shared/language.service");
|
|
18
20
|
let McpModule = class McpModule {
|
|
19
21
|
};
|
|
20
22
|
exports.McpModule = McpModule;
|
|
@@ -25,9 +27,10 @@ exports.McpModule = McpModule = __decorate([
|
|
|
25
27
|
keyword_module_1.KeywordModule,
|
|
26
28
|
config_module_1.CodingBuddyConfigModule,
|
|
27
29
|
analyzer_module_1.AnalyzerModule,
|
|
30
|
+
agent_module_1.AgentModule,
|
|
28
31
|
],
|
|
29
32
|
controllers: [mcp_controller_1.McpController],
|
|
30
|
-
providers: [mcp_service_1.McpService, skill_recommendation_service_1.SkillRecommendationService],
|
|
33
|
+
providers: [mcp_service_1.McpService, skill_recommendation_service_1.SkillRecommendationService, language_service_1.LanguageService],
|
|
31
34
|
exports: [mcp_service_1.McpService],
|
|
32
35
|
})
|
|
33
36
|
], 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,wFAAmF;
|
|
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;AActD,IAAM,SAAS,GAAf,MAAM,SAAS;CAAG,CAAA;AAAZ,8BAAS;oBAAT,SAAS;IAZrB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE;YACP,0BAAW;YACX,8BAAa;YACb,uCAAuB;YACvB,gCAAc;YACd,0BAAW;SACZ;QACD,WAAW,EAAE,CAAC,8BAAa,CAAC;QAC5B,SAAS,EAAE,CAAC,wBAAU,EAAE,yDAA0B,EAAE,kCAAe,CAAC;QACpE,OAAO,EAAE,CAAC,wBAAU,CAAC;KACtB,CAAC;GACW,SAAS,CAAG"}
|
|
@@ -6,6 +6,8 @@ import { ConfigService } from '../config/config.service';
|
|
|
6
6
|
import { ConfigDiffService } from '../config/config-diff.service';
|
|
7
7
|
import { AnalyzerService } from '../analyzer/analyzer.service';
|
|
8
8
|
import { SkillRecommendationService } from '../skill/skill-recommendation.service';
|
|
9
|
+
import { LanguageService } from '../shared/language.service';
|
|
10
|
+
import { AgentService } from '../agent/agent.service';
|
|
9
11
|
export declare class McpService implements OnModuleInit {
|
|
10
12
|
private rulesService;
|
|
11
13
|
private keywordService;
|
|
@@ -13,9 +15,11 @@ export declare class McpService implements OnModuleInit {
|
|
|
13
15
|
private configDiffService;
|
|
14
16
|
private analyzerService;
|
|
15
17
|
private skillRecommendationService;
|
|
18
|
+
private languageService;
|
|
19
|
+
private agentService;
|
|
16
20
|
private server;
|
|
17
21
|
private readonly logger;
|
|
18
|
-
constructor(rulesService: RulesService, keywordService: KeywordService, configService: ConfigService, configDiffService: ConfigDiffService, analyzerService: AnalyzerService, skillRecommendationService: SkillRecommendationService);
|
|
22
|
+
constructor(rulesService: RulesService, keywordService: KeywordService, configService: ConfigService, configDiffService: ConfigDiffService, analyzerService: AnalyzerService, skillRecommendationService: SkillRecommendationService, languageService: LanguageService, agentService: AgentService);
|
|
19
23
|
onModuleInit(): void;
|
|
20
24
|
startStdio(): Promise<void>;
|
|
21
25
|
getServer(): Server<{
|
|
@@ -62,6 +66,8 @@ export declare class McpService implements OnModuleInit {
|
|
|
62
66
|
private handleSuggestConfigUpdates;
|
|
63
67
|
private handleRecommendSkills;
|
|
64
68
|
private handleListSkills;
|
|
69
|
+
private handleGetAgentSystemPrompt;
|
|
70
|
+
private handlePrepareParallelAgents;
|
|
65
71
|
private jsonResponse;
|
|
66
72
|
private errorResponse;
|
|
67
73
|
private formatProjectContext;
|