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.
Files changed (91) hide show
  1. package/dist/src/agent/agent-prompt.builder.d.ts +5 -0
  2. package/dist/src/agent/agent-prompt.builder.js +84 -0
  3. package/dist/src/agent/agent-prompt.builder.js.map +1 -0
  4. package/dist/src/agent/agent.module.d.ts +2 -0
  5. package/dist/src/agent/agent.module.js +23 -0
  6. package/dist/src/agent/agent.module.js.map +1 -0
  7. package/dist/src/agent/agent.service.d.ts +15 -0
  8. package/dist/src/agent/agent.service.js +103 -0
  9. package/dist/src/agent/agent.service.js.map +1 -0
  10. package/dist/src/agent/agent.types.d.ts +29 -0
  11. package/dist/src/agent/agent.types.js +31 -0
  12. package/dist/src/agent/agent.types.js.map +1 -0
  13. package/dist/src/agent/index.d.ts +4 -0
  14. package/dist/src/agent/index.js +21 -0
  15. package/dist/src/agent/index.js.map +1 -0
  16. package/dist/src/app.module.js +8 -1
  17. package/dist/src/app.module.js.map +1 -1
  18. package/dist/src/cli/cli.types.d.ts +1 -0
  19. package/dist/src/cli/init/config.generator.d.ts +1 -0
  20. package/dist/src/cli/init/config.generator.js +10 -2
  21. package/dist/src/cli/init/config.generator.js.map +1 -1
  22. package/dist/src/cli/init/init.command.js +9 -0
  23. package/dist/src/cli/init/init.command.js.map +1 -1
  24. package/dist/src/cli/init/prompts/index.d.ts +2 -0
  25. package/dist/src/cli/init/prompts/index.js +8 -0
  26. package/dist/src/cli/init/prompts/index.js.map +1 -0
  27. package/dist/src/cli/init/prompts/model-prompt.d.ts +8 -0
  28. package/dist/src/cli/init/prompts/model-prompt.js +36 -0
  29. package/dist/src/cli/init/prompts/model-prompt.js.map +1 -0
  30. package/dist/src/cli/init/templates/template.renderer.js +11 -1
  31. package/dist/src/cli/init/templates/template.renderer.js.map +1 -1
  32. package/dist/src/cli/init/templates/template.types.d.ts +1 -0
  33. package/dist/src/config/config.schema.d.ts +9 -0
  34. package/dist/src/config/config.schema.js +6 -1
  35. package/dist/src/config/config.schema.js.map +1 -1
  36. package/dist/src/config/config.types.d.ts +1 -1
  37. package/dist/src/config/config.types.js.map +1 -1
  38. package/dist/src/keyword/activation-message.builder.d.ts +14 -0
  39. package/dist/src/keyword/activation-message.builder.js +80 -0
  40. package/dist/src/keyword/activation-message.builder.js.map +1 -0
  41. package/dist/src/keyword/keyword.module.js +39 -4
  42. package/dist/src/keyword/keyword.module.js.map +1 -1
  43. package/dist/src/keyword/keyword.service.d.ts +12 -1
  44. package/dist/src/keyword/keyword.service.js +144 -52
  45. package/dist/src/keyword/keyword.service.js.map +1 -1
  46. package/dist/src/keyword/keyword.types.d.ts +48 -0
  47. package/dist/src/keyword/keyword.types.js +21 -1
  48. package/dist/src/keyword/keyword.types.js.map +1 -1
  49. package/dist/src/keyword/primary-agent-resolver.d.ts +24 -0
  50. package/dist/src/keyword/primary-agent-resolver.js +165 -0
  51. package/dist/src/keyword/primary-agent-resolver.js.map +1 -0
  52. package/dist/src/keyword/rule-filter.d.ts +3 -0
  53. package/dist/src/keyword/rule-filter.js +64 -0
  54. package/dist/src/keyword/rule-filter.js.map +1 -0
  55. package/dist/src/mcp/mcp-serverless.d.ts +0 -2
  56. package/dist/src/mcp/mcp-serverless.js +19 -29
  57. package/dist/src/mcp/mcp-serverless.js.map +1 -1
  58. package/dist/src/mcp/mcp.module.js +4 -1
  59. package/dist/src/mcp/mcp.module.js.map +1 -1
  60. package/dist/src/mcp/mcp.service.d.ts +10 -3
  61. package/dist/src/mcp/mcp.service.js +175 -25
  62. package/dist/src/mcp/mcp.service.js.map +1 -1
  63. package/dist/src/mcp/response.utils.d.ts +10 -0
  64. package/dist/src/mcp/response.utils.js +16 -0
  65. package/dist/src/mcp/response.utils.js.map +1 -0
  66. package/dist/src/model/index.d.ts +3 -0
  67. package/dist/src/model/index.js +20 -0
  68. package/dist/src/model/index.js.map +1 -0
  69. package/dist/src/model/model.constants.d.ts +4 -0
  70. package/dist/src/model/model.constants.js +8 -0
  71. package/dist/src/model/model.constants.js.map +1 -0
  72. package/dist/src/model/model.resolver.d.ts +7 -0
  73. package/dist/src/model/model.resolver.js +55 -0
  74. package/dist/src/model/model.resolver.js.map +1 -0
  75. package/dist/src/model/model.types.d.ts +17 -0
  76. package/dist/src/model/model.types.js +11 -0
  77. package/dist/src/model/model.types.js.map +1 -0
  78. package/dist/src/rules/agent.schema.d.ts +15 -0
  79. package/dist/src/rules/agent.schema.js +9 -0
  80. package/dist/src/rules/agent.schema.js.map +1 -1
  81. package/dist/src/shared/agent.utils.d.ts +1 -0
  82. package/dist/src/shared/agent.utils.js +14 -0
  83. package/dist/src/shared/agent.utils.js.map +1 -0
  84. package/dist/src/shared/language.service.d.ts +9 -0
  85. package/dist/src/shared/language.service.js +108 -0
  86. package/dist/src/shared/language.service.js.map +1 -0
  87. package/dist/src/shared/language.types.d.ts +12 -0
  88. package/dist/src/shared/language.types.js +3 -0
  89. package/dist/src/shared/language.types.js.map +1 -0
  90. package/dist/tsconfig.build.tsbuildinfo +1 -1
  91. package/package.json +3 -2
@@ -30,4 +30,5 @@ export interface TemplateRenderOptions {
30
30
  language?: string;
31
31
  projectName?: string;
32
32
  includeComments?: boolean;
33
+ defaultModel?: string;
33
34
  }
@@ -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":"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"}
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":";;;AA0CA,iDAAsD;AAA7C,oHAAA,mBAAmB,OAAA"}
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
- return new keyword_service_1.KeywordService(loadConfig, loadRule, loadAgent);
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,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,EAAgB,EAAE;wBAC1D,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"}
1
+ {"version":3,"file":"keyword.module.js","sourceRoot":"","sources":["../../../src/keyword/keyword.module.ts"],"names":[],"mappings":";;;;;;;;;AAAA,2CAAgD;AAChD,2DAAqF;AACrF,6DAAyD;AACzD,wDAAoD;AACpD,0DAAsD;AACtD,uDAA2D;AAC3D,uDAAmD;AACnD,qEAAgE;AAGnD,QAAA,eAAe,GAAG,iBAAiB,CAAC;AA+E1C,IAAM,aAAa,GAAnB,MAAM,aAAa;CAAG,CAAA;AAAhB,sCAAa;wBAAb,aAAa;IA7EzB,IAAA,eAAM,EAAC;QACN,OAAO,EAAE,CAAC,0BAAW,EAAE,uCAAe,CAAC;QACvC,SAAS,EAAE;YACT;gBACE,OAAO,EAAE,uBAAe;gBACxB,UAAU,EAAE,CACV,YAA0B,EAC1B,aAA4B,EAC5B,EAAE;oBACF,MAAM,MAAM,GAAG,IAAI,eAAM,CAAC,eAAe,CAAC,CAAC;oBAE3C,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;oBAGF,MAAM,gBAAgB,GAAG,KAAK,IAAI,EAAE;wBAClC,IAAI,CAAC;4BACH,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,CAAC;4BACnD,IAAI,QAAQ,CAAC,EAAE,EAAE,YAAY,EAAE,CAAC;gCAC9B,OAAO,EAAE,YAAY,EAAE,QAAQ,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC;4BACpD,CAAC;4BACD,OAAO,IAAI,CAAC;wBACd,CAAC;wBAAC,OAAO,KAAK,EAAE,CAAC;4BACf,MAAM,CAAC,KAAK,CACV,kCAAkC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAC7F,CAAC;4BACF,OAAO,IAAI,CAAC;wBACd,CAAC;oBACH,CAAC,CAAC;oBAEF,MAAM,iBAAiB,GAAG,KAAK,IAAuB,EAAE;wBACtD,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;wBACnD,MAAM,aAAa,GAAa,EAAE,CAAC;wBAEnC,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;4BAC9B,IAAI,CAAC;gCACH,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;gCAChD,MAAM,IAAI,GAAG,KAAK,CAAC,IAAqC,CAAC;gCACzD,IAAI,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;oCAC7B,aAAa,CAAC,IAAI,CAAC,IAAA,gCAAkB,EAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;gCACrD,CAAC;4BACH,CAAC;4BAAC,MAAM,CAAC;4BAET,CAAC;wBACH,CAAC;wBAED,OAAO,aAAa,CAAC;oBACvB,CAAC,CAAC;oBAEF,MAAM,oBAAoB,GAAG,IAAI,6CAAoB,CACnD,gBAAgB,EAChB,iBAAiB,CAClB,CAAC;oBAEF,OAAO,IAAI,gCAAc,CACvB,UAAU,EACV,QAAQ,EACR,SAAS,EACT,oBAAoB,CACrB,CAAC;gBACJ,CAAC;gBACD,MAAM,EAAE,CAAC,4BAAY,EAAE,8BAAa,CAAC;aACtC;SACF;QACD,OAAO,EAAE,CAAC,uBAAe,CAAC;KAC3B,CAAC;GACW,aAAa,CAAG"}
@@ -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
- constructor(loadConfigFn: () => Promise<KeywordModesConfig>, loadRuleFn: (path: string) => Promise<string>, loadAgentInfoFn?: ((agentName: string) => Promise<any>) | undefined);
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
- delegates_to: 'frontend-developer',
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
- delegates_to: 'frontend-developer',
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
- if (parts.length > 1) {
53
- const secondWord = parts[1];
54
- const secondWordUpper = secondWord.toUpperCase();
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
- else if (localizedMode) {
67
- mode = localizedMode;
68
- originalPrompt = trimmed.slice(firstWord.length).trim();
69
- if (parts.length > 1) {
70
- const secondWord = parts[1];
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
- else {
84
- mode = config.defaultMode;
85
- originalPrompt = trimmed;
86
- warnings.push('No keyword found, defaulting to PLAN');
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
- const modeConfig = config.modes[mode];
89
- const rules = await this.getRulesForMode(mode);
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
- if (modeConfig.delegates_to) {
101
- result.delegates_to = modeConfig.delegates_to;
102
- const delegateAgentInfo = await this.getAgentInfo(modeConfig.delegates_to);
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: agentData.name || agentName,
144
- description: agentData.description || '',
145
- expertise: agentData.role?.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":"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"}
1
+ {"version":3,"file":"keyword.service.js","sourceRoot":"","sources":["../../../src/keyword/keyword.service.ts"],"names":[],"mappings":"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"}