codingbuddy 1.3.1 → 2.0.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.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/cli/cli.types.d.ts +1 -0
- package/dist/src/cli/init/config.generator.d.ts +1 -0
- package/dist/src/cli/init/config.generator.js +10 -2
- package/dist/src/cli/init/config.generator.js.map +1 -1
- package/dist/src/cli/init/init.command.js +9 -0
- package/dist/src/cli/init/init.command.js.map +1 -1
- package/dist/src/cli/init/prompts/index.d.ts +2 -0
- package/dist/src/cli/init/prompts/index.js +8 -0
- package/dist/src/cli/init/prompts/index.js.map +1 -0
- package/dist/src/cli/init/prompts/model-prompt.d.ts +8 -0
- package/dist/src/cli/init/prompts/model-prompt.js +36 -0
- package/dist/src/cli/init/prompts/model-prompt.js.map +1 -0
- package/dist/src/cli/init/templates/template.renderer.js +11 -1
- 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/config/config.schema.d.ts +9 -0
- package/dist/src/config/config.schema.js +6 -1
- package/dist/src/config/config.schema.js.map +1 -1
- package/dist/src/config/config.types.d.ts +1 -1
- package/dist/src/config/config.types.js.map +1 -1
- package/dist/src/keyword/activation-message.builder.d.ts +14 -0
- package/dist/src/keyword/activation-message.builder.js +80 -0
- package/dist/src/keyword/activation-message.builder.js.map +1 -0
- package/dist/src/keyword/keyword.module.js +39 -4
- package/dist/src/keyword/keyword.module.js.map +1 -1
- package/dist/src/keyword/keyword.service.d.ts +12 -1
- package/dist/src/keyword/keyword.service.js +144 -52
- package/dist/src/keyword/keyword.service.js.map +1 -1
- package/dist/src/keyword/keyword.types.d.ts +48 -0
- package/dist/src/keyword/keyword.types.js +21 -1
- package/dist/src/keyword/keyword.types.js.map +1 -1
- package/dist/src/keyword/primary-agent-resolver.d.ts +24 -0
- package/dist/src/keyword/primary-agent-resolver.js +165 -0
- package/dist/src/keyword/primary-agent-resolver.js.map +1 -0
- package/dist/src/keyword/rule-filter.d.ts +3 -0
- package/dist/src/keyword/rule-filter.js +64 -0
- package/dist/src/keyword/rule-filter.js.map +1 -0
- package/dist/src/mcp/mcp-serverless.d.ts +0 -2
- package/dist/src/mcp/mcp-serverless.js +19 -29
- package/dist/src/mcp/mcp-serverless.js.map +1 -1
- 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 +10 -3
- package/dist/src/mcp/mcp.service.js +175 -25
- package/dist/src/mcp/mcp.service.js.map +1 -1
- package/dist/src/mcp/response.utils.d.ts +10 -0
- package/dist/src/mcp/response.utils.js +16 -0
- package/dist/src/mcp/response.utils.js.map +1 -0
- package/dist/src/model/index.d.ts +3 -0
- package/dist/src/model/index.js +20 -0
- package/dist/src/model/index.js.map +1 -0
- package/dist/src/model/model.constants.d.ts +4 -0
- package/dist/src/model/model.constants.js +8 -0
- package/dist/src/model/model.constants.js.map +1 -0
- package/dist/src/model/model.resolver.d.ts +7 -0
- package/dist/src/model/model.resolver.js +55 -0
- package/dist/src/model/model.resolver.js.map +1 -0
- package/dist/src/model/model.types.d.ts +17 -0
- package/dist/src/model/model.types.js +11 -0
- package/dist/src/model/model.types.js.map +1 -0
- package/dist/src/rules/agent.schema.d.ts +15 -0
- package/dist/src/rules/agent.schema.js +9 -0
- package/dist/src/rules/agent.schema.js.map +1 -1
- package/dist/src/shared/agent.utils.d.ts +1 -0
- package/dist/src/shared/agent.utils.js +14 -0
- package/dist/src/shared/agent.utils.js.map +1 -0
- 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 +3 -2
|
@@ -131,6 +131,10 @@ export declare const TestStrategyConfigSchema: z.ZodObject<{
|
|
|
131
131
|
"no-mocks": "no-mocks";
|
|
132
132
|
}>>;
|
|
133
133
|
}, z.core.$strip>;
|
|
134
|
+
export declare const AIConfigSchema: z.ZodObject<{
|
|
135
|
+
defaultModel: z.ZodOptional<z.ZodString>;
|
|
136
|
+
primaryAgent: z.ZodOptional<z.ZodString>;
|
|
137
|
+
}, z.core.$strip>;
|
|
134
138
|
export declare const CodingBuddyConfigSchema: z.ZodObject<{
|
|
135
139
|
language: z.ZodOptional<z.ZodString>;
|
|
136
140
|
projectName: z.ZodOptional<z.ZodString>;
|
|
@@ -226,6 +230,10 @@ export declare const CodingBuddyConfigSchema: z.ZodObject<{
|
|
|
226
230
|
"no-mocks": "no-mocks";
|
|
227
231
|
}>>;
|
|
228
232
|
}, z.core.$strip>>;
|
|
233
|
+
ai: z.ZodOptional<z.ZodObject<{
|
|
234
|
+
defaultModel: z.ZodOptional<z.ZodString>;
|
|
235
|
+
primaryAgent: z.ZodOptional<z.ZodString>;
|
|
236
|
+
}, z.core.$strip>>;
|
|
229
237
|
keyFiles: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
230
238
|
avoid: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
231
239
|
custom: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
@@ -237,6 +245,7 @@ export type TechStackConfig = z.infer<typeof TechStackConfigSchema>;
|
|
|
237
245
|
export type ArchitectureConfig = z.infer<typeof ArchitectureConfigSchema>;
|
|
238
246
|
export type ConventionsConfig = z.infer<typeof ConventionsConfigSchema>;
|
|
239
247
|
export type TestStrategyConfig = z.infer<typeof TestStrategyConfigSchema>;
|
|
248
|
+
export type AIConfig = z.infer<typeof AIConfigSchema>;
|
|
240
249
|
export type CodingBuddyConfig = z.infer<typeof CodingBuddyConfigSchema>;
|
|
241
250
|
export interface ValidationResult {
|
|
242
251
|
success: boolean;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CodingBuddyConfigSchema = exports.TestStrategyConfigSchema = exports.ConventionsConfigSchema = exports.ArchitectureConfigSchema = exports.TechStackConfigSchema = exports.NamingConventionSchema = exports.ArchitectureLayerSchema = exports.TechDetailSchema = void 0;
|
|
3
|
+
exports.CodingBuddyConfigSchema = exports.AIConfigSchema = exports.TestStrategyConfigSchema = exports.ConventionsConfigSchema = exports.ArchitectureConfigSchema = exports.TechStackConfigSchema = exports.NamingConventionSchema = exports.ArchitectureLayerSchema = exports.TechDetailSchema = void 0;
|
|
4
4
|
exports.validateConfig = validateConfig;
|
|
5
5
|
exports.parseConfig = parseConfig;
|
|
6
6
|
exports.isCodingBuddyConfig = isCodingBuddyConfig;
|
|
@@ -59,6 +59,10 @@ exports.TestStrategyConfigSchema = zod_1.z.object({
|
|
|
59
59
|
e2eDirectory: zod_1.z.string().optional(),
|
|
60
60
|
mockingStrategy: zod_1.z.enum(['minimal', 'extensive', 'no-mocks']).optional(),
|
|
61
61
|
});
|
|
62
|
+
exports.AIConfigSchema = zod_1.z.object({
|
|
63
|
+
defaultModel: zod_1.z.string().optional(),
|
|
64
|
+
primaryAgent: zod_1.z.string().optional(),
|
|
65
|
+
});
|
|
62
66
|
exports.CodingBuddyConfigSchema = zod_1.z.object({
|
|
63
67
|
language: zod_1.z.string().optional(),
|
|
64
68
|
projectName: zod_1.z.string().optional(),
|
|
@@ -68,6 +72,7 @@ exports.CodingBuddyConfigSchema = zod_1.z.object({
|
|
|
68
72
|
architecture: exports.ArchitectureConfigSchema.optional(),
|
|
69
73
|
conventions: exports.ConventionsConfigSchema.optional(),
|
|
70
74
|
testStrategy: exports.TestStrategyConfigSchema.optional(),
|
|
75
|
+
ai: exports.AIConfigSchema.optional(),
|
|
71
76
|
keyFiles: zod_1.z.array(zod_1.z.string()).optional(),
|
|
72
77
|
avoid: zod_1.z.array(zod_1.z.string()).optional(),
|
|
73
78
|
custom: zod_1.z.record(zod_1.z.string(), zod_1.z.unknown()).optional(),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../../src/config/config.schema.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.schema.js","sourceRoot":"","sources":["../../../src/config/config.schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export type { CodingBuddyConfig, TechStackConfig, ArchitectureConfig, ConventionsConfig, TestStrategyConfig, TechDetail, ArchitectureLayer, NamingConvention, } from './config.schema';
|
|
1
|
+
export type { CodingBuddyConfig, TechStackConfig, ArchitectureConfig, ConventionsConfig, TestStrategyConfig, AIConfig, TechDetail, ArchitectureLayer, NamingConvention, } from './config.schema';
|
|
2
2
|
export { isCodingBuddyConfig } from './config.schema';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.types.js","sourceRoot":"","sources":["../../../src/config/config.types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"config.types.js","sourceRoot":"","sources":["../../../src/config/config.types.ts"],"names":[],"mappings":";;;AA2CA,iDAAsD;AAA7C,oHAAA,mBAAmB,OAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type ActivationMessage } from './keyword.types';
|
|
2
|
+
export declare class ActivationMessageBuilder {
|
|
3
|
+
private activations;
|
|
4
|
+
addAgentActivation(name: string, tier: 'primary' | 'specialist', activatedBy?: string): this;
|
|
5
|
+
addSkillActivation(name: string, activatedBy?: string): this;
|
|
6
|
+
build(): ActivationMessage | undefined;
|
|
7
|
+
private formatActivations;
|
|
8
|
+
private getIcon;
|
|
9
|
+
private getTierLabel;
|
|
10
|
+
reset(): this;
|
|
11
|
+
static forPrimaryAgent(agentName: string, activatedBy?: string): ActivationMessage;
|
|
12
|
+
static forSpecialistAgent(agentName: string, activatedBy?: string): ActivationMessage;
|
|
13
|
+
static forSkill(skillName: string, activatedBy?: string): ActivationMessage;
|
|
14
|
+
}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ActivationMessageBuilder = void 0;
|
|
4
|
+
class ActivationMessageBuilder {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.activations = [];
|
|
7
|
+
}
|
|
8
|
+
addAgentActivation(name, tier, activatedBy) {
|
|
9
|
+
this.activations.push({
|
|
10
|
+
type: 'agent',
|
|
11
|
+
name,
|
|
12
|
+
tier,
|
|
13
|
+
activatedBy,
|
|
14
|
+
timestamp: new Date().toISOString(),
|
|
15
|
+
});
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
addSkillActivation(name, activatedBy) {
|
|
19
|
+
this.activations.push({
|
|
20
|
+
type: 'skill',
|
|
21
|
+
name,
|
|
22
|
+
tier: 'specialist',
|
|
23
|
+
activatedBy,
|
|
24
|
+
timestamp: new Date().toISOString(),
|
|
25
|
+
});
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
build() {
|
|
29
|
+
if (this.activations.length === 0) {
|
|
30
|
+
return undefined;
|
|
31
|
+
}
|
|
32
|
+
const formatted = this.formatActivations();
|
|
33
|
+
return {
|
|
34
|
+
activations: [...this.activations],
|
|
35
|
+
formatted,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
formatActivations() {
|
|
39
|
+
const lines = [];
|
|
40
|
+
for (const activation of this.activations) {
|
|
41
|
+
const icon = this.getIcon(activation);
|
|
42
|
+
const tierLabel = this.getTierLabel(activation.tier);
|
|
43
|
+
const activatedByText = activation.activatedBy
|
|
44
|
+
? ` (by ${activation.activatedBy})`
|
|
45
|
+
: '';
|
|
46
|
+
lines.push(`${icon} ${activation.name} [${tierLabel}]${activatedByText}`);
|
|
47
|
+
}
|
|
48
|
+
return lines.join('\n');
|
|
49
|
+
}
|
|
50
|
+
getIcon(activation) {
|
|
51
|
+
if (activation.type === 'skill') {
|
|
52
|
+
return '⚡';
|
|
53
|
+
}
|
|
54
|
+
return activation.tier === 'primary' ? '🤖' : '👤';
|
|
55
|
+
}
|
|
56
|
+
getTierLabel(tier) {
|
|
57
|
+
return tier === 'primary' ? 'Primary Agent' : 'Specialist';
|
|
58
|
+
}
|
|
59
|
+
reset() {
|
|
60
|
+
this.activations = [];
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
static forPrimaryAgent(agentName, activatedBy) {
|
|
64
|
+
return new ActivationMessageBuilder()
|
|
65
|
+
.addAgentActivation(agentName, 'primary', activatedBy)
|
|
66
|
+
.build();
|
|
67
|
+
}
|
|
68
|
+
static forSpecialistAgent(agentName, activatedBy) {
|
|
69
|
+
return new ActivationMessageBuilder()
|
|
70
|
+
.addAgentActivation(agentName, 'specialist', activatedBy)
|
|
71
|
+
.build();
|
|
72
|
+
}
|
|
73
|
+
static forSkill(skillName, activatedBy) {
|
|
74
|
+
return new ActivationMessageBuilder()
|
|
75
|
+
.addSkillActivation(skillName, activatedBy)
|
|
76
|
+
.build();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
exports.ActivationMessageBuilder = ActivationMessageBuilder;
|
|
80
|
+
//# sourceMappingURL=activation-message.builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"activation-message.builder.js","sourceRoot":"","sources":["../../../src/keyword/activation-message.builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,20 +8,25 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
9
|
exports.KeywordModule = exports.KEYWORD_SERVICE = void 0;
|
|
10
10
|
const common_1 = require("@nestjs/common");
|
|
11
|
+
const config_module_1 = require("../config/config.module");
|
|
12
|
+
const config_service_1 = require("../config/config.service");
|
|
11
13
|
const rules_module_1 = require("../rules/rules.module");
|
|
12
14
|
const rules_service_1 = require("../rules/rules.service");
|
|
15
|
+
const agent_utils_1 = require("../shared/agent.utils");
|
|
13
16
|
const keyword_service_1 = require("./keyword.service");
|
|
17
|
+
const primary_agent_resolver_1 = require("./primary-agent-resolver");
|
|
14
18
|
exports.KEYWORD_SERVICE = 'KEYWORD_SERVICE';
|
|
15
19
|
let KeywordModule = class KeywordModule {
|
|
16
20
|
};
|
|
17
21
|
exports.KeywordModule = KeywordModule;
|
|
18
22
|
exports.KeywordModule = KeywordModule = __decorate([
|
|
19
23
|
(0, common_1.Module)({
|
|
20
|
-
imports: [rules_module_1.RulesModule],
|
|
24
|
+
imports: [rules_module_1.RulesModule, config_module_1.CodingBuddyConfigModule],
|
|
21
25
|
providers: [
|
|
22
26
|
{
|
|
23
27
|
provide: exports.KEYWORD_SERVICE,
|
|
24
|
-
useFactory: (rulesService) => {
|
|
28
|
+
useFactory: (rulesService, configService) => {
|
|
29
|
+
const logger = new common_1.Logger('KeywordModule');
|
|
25
30
|
const loadConfig = async () => {
|
|
26
31
|
const content = await rulesService.getRuleContent('keyword-modes.json');
|
|
27
32
|
return JSON.parse(content);
|
|
@@ -32,9 +37,39 @@ exports.KeywordModule = KeywordModule = __decorate([
|
|
|
32
37
|
const loadAgent = async (agentName) => {
|
|
33
38
|
return rulesService.getAgent(agentName);
|
|
34
39
|
};
|
|
35
|
-
|
|
40
|
+
const getProjectConfig = async () => {
|
|
41
|
+
try {
|
|
42
|
+
const settings = await configService.getSettings();
|
|
43
|
+
if (settings.ai?.primaryAgent) {
|
|
44
|
+
return { primaryAgent: settings.ai.primaryAgent };
|
|
45
|
+
}
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
logger.debug(`Failed to load project config: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
50
|
+
return null;
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
const listPrimaryAgents = async () => {
|
|
54
|
+
const agentNames = await rulesService.listAgents();
|
|
55
|
+
const primaryAgents = [];
|
|
56
|
+
for (const name of agentNames) {
|
|
57
|
+
try {
|
|
58
|
+
const agent = await rulesService.getAgent(name);
|
|
59
|
+
const role = agent.role;
|
|
60
|
+
if (role?.type === 'primary') {
|
|
61
|
+
primaryAgents.push((0, agent_utils_1.normalizeAgentName)(agent.name));
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return primaryAgents;
|
|
68
|
+
};
|
|
69
|
+
const primaryAgentResolver = new primary_agent_resolver_1.PrimaryAgentResolver(getProjectConfig, listPrimaryAgents);
|
|
70
|
+
return new keyword_service_1.KeywordService(loadConfig, loadRule, loadAgent, primaryAgentResolver);
|
|
36
71
|
},
|
|
37
|
-
inject: [rules_service_1.RulesService],
|
|
72
|
+
inject: [rules_service_1.RulesService, config_service_1.ConfigService],
|
|
38
73
|
},
|
|
39
74
|
],
|
|
40
75
|
exports: [exports.KEYWORD_SERVICE],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyword.module.js","sourceRoot":"","sources":["../../../src/keyword/keyword.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"keyword.module.js","sourceRoot":"","sources":["../../../src/keyword/keyword.module.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,23 @@
|
|
|
1
1
|
import { type Mode, type RuleContent, type ParseModeResult, type KeywordModesConfig } from './keyword.types';
|
|
2
|
+
import { PrimaryAgentResolver } from './primary-agent-resolver';
|
|
2
3
|
export declare class KeywordService {
|
|
3
4
|
private readonly loadConfigFn;
|
|
4
5
|
private readonly loadRuleFn;
|
|
5
6
|
private readonly loadAgentInfoFn?;
|
|
7
|
+
private readonly logger;
|
|
6
8
|
private configCache;
|
|
7
|
-
|
|
9
|
+
private readonly primaryAgentResolver?;
|
|
10
|
+
constructor(loadConfigFn: () => Promise<KeywordModesConfig>, loadRuleFn: (path: string) => Promise<string>, loadAgentInfoFn?: ((agentName: string) => Promise<unknown>) | undefined, primaryAgentResolver?: PrimaryAgentResolver);
|
|
8
11
|
parseMode(prompt: string): Promise<ParseModeResult>;
|
|
12
|
+
private extractModeFromPrompt;
|
|
13
|
+
private checkForMultipleKeywords;
|
|
14
|
+
private checkForEmptyContent;
|
|
15
|
+
private buildParseModeResult;
|
|
16
|
+
private getPrimaryAgentTier;
|
|
17
|
+
private getParallelAgentsRecommendation;
|
|
18
|
+
private getActAgentRecommendation;
|
|
9
19
|
loadModeConfig(): Promise<KeywordModesConfig>;
|
|
10
20
|
getRulesForMode(mode: Mode): Promise<RuleContent[]>;
|
|
11
21
|
private getAgentInfo;
|
|
22
|
+
private resolvePrimaryAgent;
|
|
12
23
|
}
|
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.KeywordService = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
4
5
|
const keyword_types_1 = require("./keyword.types");
|
|
6
|
+
const activation_message_builder_1 = require("./activation-message.builder");
|
|
7
|
+
const rule_filter_1 = require("./rule-filter");
|
|
5
8
|
const DEFAULT_CONFIG = {
|
|
6
9
|
modes: {
|
|
7
10
|
PLAN: {
|
|
@@ -9,14 +12,20 @@ const DEFAULT_CONFIG = {
|
|
|
9
12
|
instructions: 'Design first approach. Define test cases from TDD perspective. Review architecture before implementation.',
|
|
10
13
|
rules: ['rules/core.md', 'rules/augmented-coding.md'],
|
|
11
14
|
agent: keyword_types_1.MODE_AGENTS[0],
|
|
12
|
-
|
|
15
|
+
defaultSpecialists: [
|
|
16
|
+
'architecture-specialist',
|
|
17
|
+
'test-strategy-specialist',
|
|
18
|
+
],
|
|
13
19
|
},
|
|
14
20
|
ACT: {
|
|
15
21
|
description: 'Actual task execution phase',
|
|
16
22
|
instructions: 'Follow Red-Green-Refactor cycle. Implement minimally then improve incrementally. Verify quality standards.',
|
|
17
23
|
rules: ['rules/core.md', 'rules/project.md', 'rules/augmented-coding.md'],
|
|
18
24
|
agent: keyword_types_1.MODE_AGENTS[1],
|
|
19
|
-
|
|
25
|
+
defaultSpecialists: [
|
|
26
|
+
'code-quality-specialist',
|
|
27
|
+
'test-strategy-specialist',
|
|
28
|
+
],
|
|
20
29
|
},
|
|
21
30
|
EVAL: {
|
|
22
31
|
description: 'Result review and assessment phase',
|
|
@@ -24,88 +33,150 @@ const DEFAULT_CONFIG = {
|
|
|
24
33
|
rules: ['rules/core.md', 'rules/augmented-coding.md'],
|
|
25
34
|
agent: keyword_types_1.MODE_AGENTS[2],
|
|
26
35
|
delegates_to: 'code-reviewer',
|
|
36
|
+
defaultSpecialists: [
|
|
37
|
+
'security-specialist',
|
|
38
|
+
'accessibility-specialist',
|
|
39
|
+
'performance-specialist',
|
|
40
|
+
'code-quality-specialist',
|
|
41
|
+
],
|
|
27
42
|
},
|
|
28
43
|
},
|
|
29
44
|
defaultMode: 'PLAN',
|
|
30
45
|
};
|
|
31
46
|
class KeywordService {
|
|
32
|
-
constructor(loadConfigFn, loadRuleFn, loadAgentInfoFn) {
|
|
47
|
+
constructor(loadConfigFn, loadRuleFn, loadAgentInfoFn, primaryAgentResolver) {
|
|
33
48
|
this.loadConfigFn = loadConfigFn;
|
|
34
49
|
this.loadRuleFn = loadRuleFn;
|
|
35
50
|
this.loadAgentInfoFn = loadAgentInfoFn;
|
|
51
|
+
this.logger = new common_1.Logger(KeywordService.name);
|
|
36
52
|
this.configCache = null;
|
|
53
|
+
this.primaryAgentResolver = primaryAgentResolver;
|
|
37
54
|
}
|
|
38
55
|
async parseMode(prompt) {
|
|
39
56
|
const config = await this.loadModeConfig();
|
|
57
|
+
const { mode, originalPrompt, warnings } = this.extractModeFromPrompt(prompt, config.defaultMode);
|
|
58
|
+
const modeConfig = config.modes[mode];
|
|
59
|
+
const rules = await this.getRulesForMode(mode);
|
|
60
|
+
return this.buildParseModeResult(mode, originalPrompt, warnings, modeConfig, rules, config);
|
|
61
|
+
}
|
|
62
|
+
extractModeFromPrompt(prompt, defaultMode) {
|
|
40
63
|
const warnings = [];
|
|
41
64
|
const trimmed = prompt.trim();
|
|
42
65
|
const parts = trimmed.split(/\s+/);
|
|
43
66
|
const firstWord = parts[0] ?? '';
|
|
44
67
|
const firstWordUpper = firstWord.toUpperCase();
|
|
45
|
-
let mode;
|
|
46
|
-
let originalPrompt;
|
|
47
68
|
const isEnglishKeyword = keyword_types_1.KEYWORDS.includes(firstWordUpper);
|
|
48
69
|
const localizedMode = keyword_types_1.LOCALIZED_KEYWORD_MAP[firstWord] ?? keyword_types_1.LOCALIZED_KEYWORD_MAP[firstWordUpper];
|
|
49
70
|
if (isEnglishKeyword) {
|
|
50
|
-
mode = firstWordUpper;
|
|
51
|
-
originalPrompt = trimmed.slice(firstWord.length).trim();
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const isSecondKeyword = keyword_types_1.KEYWORDS.includes(secondWordUpper) ||
|
|
56
|
-
keyword_types_1.LOCALIZED_KEYWORD_MAP[secondWord] !== undefined ||
|
|
57
|
-
keyword_types_1.LOCALIZED_KEYWORD_MAP[secondWordUpper] !== undefined;
|
|
58
|
-
if (isSecondKeyword) {
|
|
59
|
-
warnings.push('Multiple keywords found, using first');
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
if (originalPrompt === '') {
|
|
63
|
-
warnings.push('No prompt content after keyword');
|
|
64
|
-
}
|
|
71
|
+
const mode = firstWordUpper;
|
|
72
|
+
const originalPrompt = trimmed.slice(firstWord.length).trim();
|
|
73
|
+
this.checkForMultipleKeywords(parts, warnings);
|
|
74
|
+
this.checkForEmptyContent(originalPrompt, warnings);
|
|
75
|
+
return { mode, originalPrompt, warnings };
|
|
65
76
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const secondWordUpper = secondWord.toUpperCase();
|
|
72
|
-
const isSecondKeyword = keyword_types_1.KEYWORDS.includes(secondWordUpper) ||
|
|
73
|
-
keyword_types_1.LOCALIZED_KEYWORD_MAP[secondWord] !== undefined ||
|
|
74
|
-
keyword_types_1.LOCALIZED_KEYWORD_MAP[secondWordUpper] !== undefined;
|
|
75
|
-
if (isSecondKeyword) {
|
|
76
|
-
warnings.push('Multiple keywords found, using first');
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (originalPrompt === '') {
|
|
80
|
-
warnings.push('No prompt content after keyword');
|
|
81
|
-
}
|
|
77
|
+
if (localizedMode) {
|
|
78
|
+
const originalPrompt = trimmed.slice(firstWord.length).trim();
|
|
79
|
+
this.checkForMultipleKeywords(parts, warnings);
|
|
80
|
+
this.checkForEmptyContent(originalPrompt, warnings);
|
|
81
|
+
return { mode: localizedMode, originalPrompt, warnings };
|
|
82
82
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
warnings.push('No keyword found, defaulting to PLAN');
|
|
84
|
+
return { mode: defaultMode, originalPrompt: trimmed, warnings };
|
|
85
|
+
}
|
|
86
|
+
checkForMultipleKeywords(parts, warnings) {
|
|
87
|
+
if (parts.length <= 1)
|
|
88
|
+
return;
|
|
89
|
+
const secondWord = parts[1];
|
|
90
|
+
const secondWordUpper = secondWord.toUpperCase();
|
|
91
|
+
const isSecondKeyword = keyword_types_1.KEYWORDS.includes(secondWordUpper) ||
|
|
92
|
+
keyword_types_1.LOCALIZED_KEYWORD_MAP[secondWord] !== undefined ||
|
|
93
|
+
keyword_types_1.LOCALIZED_KEYWORD_MAP[secondWordUpper] !== undefined;
|
|
94
|
+
if (isSecondKeyword) {
|
|
95
|
+
warnings.push('Multiple keywords found, using first');
|
|
87
96
|
}
|
|
88
|
-
|
|
89
|
-
|
|
97
|
+
}
|
|
98
|
+
checkForEmptyContent(originalPrompt, warnings) {
|
|
99
|
+
if (originalPrompt === '') {
|
|
100
|
+
warnings.push('No prompt content after keyword');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async buildParseModeResult(mode, originalPrompt, warnings, modeConfig, rules, config) {
|
|
104
|
+
const filteredRules = (0, rule_filter_1.filterRulesByMode)(rules, mode);
|
|
90
105
|
const result = {
|
|
91
106
|
mode,
|
|
92
107
|
originalPrompt,
|
|
93
108
|
instructions: modeConfig.instructions,
|
|
94
|
-
rules,
|
|
109
|
+
rules: filteredRules,
|
|
95
110
|
...(warnings.length > 0 ? { warnings } : {}),
|
|
96
111
|
};
|
|
97
112
|
if (modeConfig.agent) {
|
|
98
113
|
result.agent = modeConfig.agent;
|
|
99
114
|
}
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
115
|
+
const resolvedAgent = await this.resolvePrimaryAgent(mode, originalPrompt, modeConfig.delegates_to);
|
|
116
|
+
if (resolvedAgent) {
|
|
117
|
+
result.delegates_to = resolvedAgent.agentName;
|
|
118
|
+
result.primary_agent_source = resolvedAgent.source;
|
|
119
|
+
const delegateAgentInfo = await this.getAgentInfo(resolvedAgent.agentName);
|
|
103
120
|
if (delegateAgentInfo) {
|
|
104
121
|
result.delegate_agent_info = delegateAgentInfo;
|
|
105
122
|
}
|
|
106
123
|
}
|
|
124
|
+
const parallelAgentsRecommendation = this.getParallelAgentsRecommendation(mode, config);
|
|
125
|
+
if (parallelAgentsRecommendation) {
|
|
126
|
+
result.parallelAgentsRecommendation = parallelAgentsRecommendation;
|
|
127
|
+
}
|
|
128
|
+
if (mode === 'PLAN' && this.primaryAgentResolver) {
|
|
129
|
+
const actRecommendation = await this.getActAgentRecommendation(originalPrompt);
|
|
130
|
+
if (actRecommendation) {
|
|
131
|
+
result.recommended_act_agent = actRecommendation;
|
|
132
|
+
result.available_act_agents = [...keyword_types_1.ACT_PRIMARY_AGENTS];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (resolvedAgent) {
|
|
136
|
+
const tier = this.getPrimaryAgentTier(resolvedAgent.agentName);
|
|
137
|
+
const activationMessage = activation_message_builder_1.ActivationMessageBuilder.forPrimaryAgent(resolvedAgent.agentName);
|
|
138
|
+
if (tier === 'specialist') {
|
|
139
|
+
result.activation_message = activation_message_builder_1.ActivationMessageBuilder.forSpecialistAgent(resolvedAgent.agentName);
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
result.activation_message = activationMessage;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
107
145
|
return result;
|
|
108
146
|
}
|
|
147
|
+
getPrimaryAgentTier(agentName) {
|
|
148
|
+
return keyword_types_1.ALL_PRIMARY_AGENTS_LIST.includes(agentName)
|
|
149
|
+
? 'primary'
|
|
150
|
+
: 'specialist';
|
|
151
|
+
}
|
|
152
|
+
getParallelAgentsRecommendation(mode, config) {
|
|
153
|
+
const modeConfig = config.modes[mode];
|
|
154
|
+
const specialists = modeConfig?.defaultSpecialists;
|
|
155
|
+
if (!specialists || specialists.length === 0) {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
specialists: [...specialists],
|
|
160
|
+
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.`,
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
async getActAgentRecommendation(prompt) {
|
|
164
|
+
if (!this.primaryAgentResolver) {
|
|
165
|
+
return undefined;
|
|
166
|
+
}
|
|
167
|
+
try {
|
|
168
|
+
const result = await this.primaryAgentResolver.resolve('ACT', prompt);
|
|
169
|
+
return {
|
|
170
|
+
agentName: result.agentName,
|
|
171
|
+
reason: result.reason,
|
|
172
|
+
confidence: result.confidence,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
this.logger.debug(`Failed to get ACT agent recommendation: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
177
|
+
return undefined;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
109
180
|
async loadModeConfig() {
|
|
110
181
|
if (this.configCache) {
|
|
111
182
|
return this.configCache;
|
|
@@ -114,7 +185,8 @@ class KeywordService {
|
|
|
114
185
|
this.configCache = await this.loadConfigFn();
|
|
115
186
|
return this.configCache;
|
|
116
187
|
}
|
|
117
|
-
catch {
|
|
188
|
+
catch (error) {
|
|
189
|
+
this.logger.debug(`Failed to load mode config, using defaults: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
118
190
|
this.configCache = DEFAULT_CONFIG;
|
|
119
191
|
return DEFAULT_CONFIG;
|
|
120
192
|
}
|
|
@@ -128,7 +200,8 @@ class KeywordService {
|
|
|
128
200
|
const content = await this.loadRuleFn(rulePath);
|
|
129
201
|
rules.push({ name: rulePath, content });
|
|
130
202
|
}
|
|
131
|
-
catch {
|
|
203
|
+
catch (error) {
|
|
204
|
+
this.logger.debug(`Skipping rule file '${rulePath}': ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
132
205
|
}
|
|
133
206
|
}
|
|
134
207
|
return rules;
|
|
@@ -139,16 +212,35 @@ class KeywordService {
|
|
|
139
212
|
}
|
|
140
213
|
try {
|
|
141
214
|
const agentData = await this.loadAgentInfoFn(agentName);
|
|
215
|
+
if (!agentData || typeof agentData !== 'object') {
|
|
216
|
+
return undefined;
|
|
217
|
+
}
|
|
218
|
+
const agent = agentData;
|
|
219
|
+
const role = agent.role;
|
|
142
220
|
return {
|
|
143
|
-
name:
|
|
144
|
-
description:
|
|
145
|
-
expertise:
|
|
221
|
+
name: typeof agent.name === 'string' ? agent.name : agentName,
|
|
222
|
+
description: typeof agent.description === 'string' ? agent.description : '',
|
|
223
|
+
expertise: Array.isArray(role?.expertise) ? role.expertise : [],
|
|
146
224
|
};
|
|
147
225
|
}
|
|
148
|
-
catch {
|
|
226
|
+
catch (error) {
|
|
227
|
+
this.logger.debug(`Failed to load agent info for '${agentName}': ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
149
228
|
return undefined;
|
|
150
229
|
}
|
|
151
230
|
}
|
|
231
|
+
async resolvePrimaryAgent(mode, prompt, staticDelegatesTo, context) {
|
|
232
|
+
if (this.primaryAgentResolver) {
|
|
233
|
+
const result = await this.primaryAgentResolver.resolve(mode, prompt, context);
|
|
234
|
+
return { agentName: result.agentName, source: result.source };
|
|
235
|
+
}
|
|
236
|
+
if (staticDelegatesTo) {
|
|
237
|
+
return { agentName: staticDelegatesTo, source: 'default' };
|
|
238
|
+
}
|
|
239
|
+
if (mode !== 'EVAL') {
|
|
240
|
+
return { agentName: keyword_types_1.DEFAULT_ACT_AGENT, source: 'default' };
|
|
241
|
+
}
|
|
242
|
+
return null;
|
|
243
|
+
}
|
|
152
244
|
}
|
|
153
245
|
exports.KeywordService = KeywordService;
|
|
154
246
|
//# sourceMappingURL=keyword.service.js.map
|
|
@@ -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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"}
|