codingbuddy 1.3.1 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/dist/src/agent/agent-prompt.builder.d.ts +5 -0
  2. package/dist/src/agent/agent-prompt.builder.js +84 -0
  3. package/dist/src/agent/agent-prompt.builder.js.map +1 -0
  4. package/dist/src/agent/agent.module.d.ts +2 -0
  5. package/dist/src/agent/agent.module.js +23 -0
  6. package/dist/src/agent/agent.module.js.map +1 -0
  7. package/dist/src/agent/agent.service.d.ts +15 -0
  8. package/dist/src/agent/agent.service.js +103 -0
  9. package/dist/src/agent/agent.service.js.map +1 -0
  10. package/dist/src/agent/agent.types.d.ts +29 -0
  11. package/dist/src/agent/agent.types.js +31 -0
  12. package/dist/src/agent/agent.types.js.map +1 -0
  13. package/dist/src/agent/index.d.ts +4 -0
  14. package/dist/src/agent/index.js +21 -0
  15. package/dist/src/agent/index.js.map +1 -0
  16. package/dist/src/app.module.js +12 -1
  17. package/dist/src/app.module.js.map +1 -1
  18. package/dist/src/checklist/checklist.module.d.ts +2 -0
  19. package/dist/src/checklist/checklist.module.js +29 -0
  20. package/dist/src/checklist/checklist.module.js.map +1 -0
  21. package/dist/src/checklist/checklist.schema.d.ts +14 -0
  22. package/dist/src/checklist/checklist.schema.js +189 -0
  23. package/dist/src/checklist/checklist.schema.js.map +1 -0
  24. package/dist/src/checklist/checklist.service.d.ts +21 -0
  25. package/dist/src/checklist/checklist.service.js +258 -0
  26. package/dist/src/checklist/checklist.service.js.map +1 -0
  27. package/dist/src/checklist/checklist.types.d.ts +56 -0
  28. package/dist/src/checklist/checklist.types.js +24 -0
  29. package/dist/src/checklist/checklist.types.js.map +1 -0
  30. package/dist/src/checklist/index.d.ts +3 -0
  31. package/dist/src/checklist/index.js +20 -0
  32. package/dist/src/checklist/index.js.map +1 -0
  33. package/dist/src/cli/cli.types.d.ts +1 -6
  34. package/dist/src/cli/index.d.ts +1 -1
  35. package/dist/src/cli/index.js.map +1 -1
  36. package/dist/src/cli/init/config.generator.d.ts +1 -0
  37. package/dist/src/cli/init/config.generator.js +10 -2
  38. package/dist/src/cli/init/config.generator.js.map +1 -1
  39. package/dist/src/cli/init/init.command.js +19 -1
  40. package/dist/src/cli/init/init.command.js.map +1 -1
  41. package/dist/src/cli/init/prompts/agent-prompt.d.ts +9 -0
  42. package/dist/src/cli/init/prompts/agent-prompt.js +28 -0
  43. package/dist/src/cli/init/prompts/agent-prompt.js.map +1 -0
  44. package/dist/src/cli/init/prompts/index.d.ts +7 -0
  45. package/dist/src/cli/init/prompts/index.js +16 -0
  46. package/dist/src/cli/init/prompts/index.js.map +1 -0
  47. package/dist/src/cli/init/prompts/language-prompt.d.ts +8 -0
  48. package/dist/src/cli/init/prompts/language-prompt.js +30 -0
  49. package/dist/src/cli/init/prompts/language-prompt.js.map +1 -0
  50. package/dist/src/cli/init/prompts/model-prompt.d.ts +8 -0
  51. package/dist/src/cli/init/prompts/model-prompt.js +36 -0
  52. package/dist/src/cli/init/prompts/model-prompt.js.map +1 -0
  53. package/dist/src/cli/init/templates/template.renderer.js +21 -1
  54. package/dist/src/cli/init/templates/template.renderer.js.map +1 -1
  55. package/dist/src/cli/init/templates/template.types.d.ts +2 -0
  56. package/dist/src/config/config.schema.d.ts +9 -0
  57. package/dist/src/config/config.schema.js +6 -1
  58. package/dist/src/config/config.schema.js.map +1 -1
  59. package/dist/src/context/context.module.d.ts +2 -0
  60. package/dist/src/context/context.module.js +23 -0
  61. package/dist/src/context/context.module.js.map +1 -0
  62. package/dist/src/context/context.service.d.ts +21 -0
  63. package/dist/src/context/context.service.js +286 -0
  64. package/dist/src/context/context.service.js.map +1 -0
  65. package/dist/src/context/context.types.d.ts +50 -0
  66. package/dist/src/context/context.types.js +42 -0
  67. package/dist/src/context/context.types.js.map +1 -0
  68. package/dist/src/context/index.d.ts +3 -0
  69. package/dist/src/context/index.js +20 -0
  70. package/dist/src/context/index.js.map +1 -0
  71. package/dist/src/context/intent-patterns.d.ts +7 -0
  72. package/dist/src/context/intent-patterns.js +50 -0
  73. package/dist/src/context/intent-patterns.js.map +1 -0
  74. package/dist/src/keyword/activation-message.builder.d.ts +14 -0
  75. package/dist/src/keyword/activation-message.builder.js +80 -0
  76. package/dist/src/keyword/activation-message.builder.js.map +1 -0
  77. package/dist/src/keyword/keyword.module.js +39 -4
  78. package/dist/src/keyword/keyword.module.js.map +1 -1
  79. package/dist/src/keyword/keyword.service.d.ts +18 -3
  80. package/dist/src/keyword/keyword.service.js +146 -53
  81. package/dist/src/keyword/keyword.service.js.map +1 -1
  82. package/dist/src/keyword/keyword.types.d.ts +61 -0
  83. package/dist/src/keyword/keyword.types.js +83 -1
  84. package/dist/src/keyword/keyword.types.js.map +1 -1
  85. package/dist/src/keyword/primary-agent-resolver.d.ts +30 -0
  86. package/dist/src/keyword/primary-agent-resolver.js +376 -0
  87. package/dist/src/keyword/primary-agent-resolver.js.map +1 -0
  88. package/dist/src/keyword/rule-filter.d.ts +3 -0
  89. package/dist/src/keyword/rule-filter.js +64 -0
  90. package/dist/src/keyword/rule-filter.js.map +1 -0
  91. package/dist/src/mcp/handlers/agent.handler.d.ts +11 -0
  92. package/dist/src/mcp/handlers/agent.handler.js +167 -0
  93. package/dist/src/mcp/handlers/agent.handler.js.map +1 -0
  94. package/dist/src/mcp/handlers/base.handler.d.ts +15 -0
  95. package/dist/src/mcp/handlers/base.handler.js +3 -0
  96. package/dist/src/mcp/handlers/base.handler.js.map +1 -0
  97. package/dist/src/mcp/handlers/checklist-context.handler.d.ts +13 -0
  98. package/dist/src/mcp/handlers/checklist-context.handler.js +141 -0
  99. package/dist/src/mcp/handlers/checklist-context.handler.js.map +1 -0
  100. package/dist/src/mcp/handlers/config.handler.d.ts +15 -0
  101. package/dist/src/mcp/handlers/config.handler.js +104 -0
  102. package/dist/src/mcp/handlers/config.handler.js.map +1 -0
  103. package/dist/src/mcp/handlers/index.d.ts +8 -0
  104. package/dist/src/mcp/handlers/index.js +17 -0
  105. package/dist/src/mcp/handlers/index.js.map +1 -0
  106. package/dist/src/mcp/handlers/mode.handler.d.ts +16 -0
  107. package/dist/src/mcp/handlers/mode.handler.js +100 -0
  108. package/dist/src/mcp/handlers/mode.handler.js.map +1 -0
  109. package/dist/src/mcp/handlers/rules.handler.d.ts +11 -0
  110. package/dist/src/mcp/handlers/rules.handler.js +99 -0
  111. package/dist/src/mcp/handlers/rules.handler.js.map +1 -0
  112. package/dist/src/mcp/handlers/skill.handler.d.ts +11 -0
  113. package/dist/src/mcp/handlers/skill.handler.js +111 -0
  114. package/dist/src/mcp/handlers/skill.handler.js.map +1 -0
  115. package/dist/src/mcp/mcp-serverless.d.ts +0 -2
  116. package/dist/src/mcp/mcp-serverless.js +19 -29
  117. package/dist/src/mcp/mcp-serverless.js.map +1 -1
  118. package/dist/src/mcp/mcp.module.js +29 -1
  119. package/dist/src/mcp/mcp.module.js.map +1 -1
  120. package/dist/src/mcp/mcp.service.d.ts +3 -18
  121. package/dist/src/mcp/mcp.service.js +13 -216
  122. package/dist/src/mcp/mcp.service.js.map +1 -1
  123. package/dist/src/mcp/response.utils.d.ts +10 -0
  124. package/dist/src/mcp/response.utils.js +16 -0
  125. package/dist/src/mcp/response.utils.js.map +1 -0
  126. package/dist/src/model/index.d.ts +4 -0
  127. package/dist/src/model/index.js +23 -0
  128. package/dist/src/model/index.js.map +1 -0
  129. package/dist/src/model/model-resolver.service.d.ts +13 -0
  130. package/dist/src/model/model-resolver.service.js +63 -0
  131. package/dist/src/model/model-resolver.service.js.map +1 -0
  132. package/dist/src/model/model.constants.d.ts +4 -0
  133. package/dist/src/model/model.constants.js +8 -0
  134. package/dist/src/model/model.constants.js.map +1 -0
  135. package/dist/src/model/model.resolver.d.ts +7 -0
  136. package/dist/src/model/model.resolver.js +56 -0
  137. package/dist/src/model/model.resolver.js.map +1 -0
  138. package/dist/src/model/model.types.d.ts +17 -0
  139. package/dist/src/model/model.types.js +11 -0
  140. package/dist/src/model/model.types.js.map +1 -0
  141. package/dist/src/rules/agent.schema.d.ts +15 -0
  142. package/dist/src/rules/agent.schema.js +9 -0
  143. package/dist/src/rules/agent.schema.js.map +1 -1
  144. package/dist/src/shared/agent.utils.d.ts +1 -0
  145. package/dist/src/shared/agent.utils.js +14 -0
  146. package/dist/src/shared/agent.utils.js.map +1 -0
  147. package/dist/src/shared/filesystem.interface.d.ts +15 -0
  148. package/dist/src/shared/filesystem.interface.js +14 -0
  149. package/dist/src/shared/filesystem.interface.js.map +1 -0
  150. package/dist/src/shared/language.service.d.ts +9 -0
  151. package/dist/src/shared/language.service.js +108 -0
  152. package/dist/src/shared/language.service.js.map +1 -0
  153. package/dist/src/shared/language.types.d.ts +12 -0
  154. package/dist/src/shared/language.types.js +3 -0
  155. package/dist/src/shared/language.types.js.map +1 -0
  156. package/dist/src/shared/node-filesystem.service.d.ts +5 -0
  157. package/dist/src/shared/node-filesystem.service.js +25 -0
  158. package/dist/src/shared/node-filesystem.service.js.map +1 -0
  159. package/dist/src/shared/path.utils.js.map +1 -1
  160. package/dist/src/shared/pattern-matcher.d.ts +11 -0
  161. package/dist/src/shared/pattern-matcher.js +39 -0
  162. package/dist/src/shared/pattern-matcher.js.map +1 -0
  163. package/dist/src/shared/security.utils.d.ts +17 -0
  164. package/dist/src/shared/security.utils.js +63 -0
  165. package/dist/src/shared/security.utils.js.map +1 -1
  166. package/dist/src/shared/validation.constants.d.ts +10 -0
  167. package/dist/src/shared/validation.constants.js +42 -1
  168. package/dist/src/shared/validation.constants.js.map +1 -1
  169. package/dist/tsconfig.build.tsbuildinfo +1 -1
  170. package/package.json +4 -2
  171. package/dist/src/config/config.types.d.ts +0 -2
  172. package/dist/src/config/config.types.js +0 -6
  173. package/dist/src/config/config.types.js.map +0 -1
@@ -0,0 +1,50 @@
1
+ import type { DomainChecklist, ChecklistSummary, MatchedTrigger } from '../checklist/checklist.types';
2
+ export type TaskIntent = 'feature_development' | 'bug_fix' | 'refactoring' | 'code_review' | 'testing' | 'documentation' | 'performance_optimization' | 'security_hardening' | 'unknown';
3
+ export type RiskLevel = 'low' | 'medium' | 'high' | 'critical';
4
+ export type ComplexityLevel = 'low' | 'medium' | 'high';
5
+ export interface TaskAnalysis {
6
+ intent: TaskIntent;
7
+ category: string;
8
+ complexity: ComplexityLevel;
9
+ keywords: string[];
10
+ }
11
+ export interface RiskAssessment {
12
+ level: RiskLevel;
13
+ reason: string;
14
+ attentionAreas: string[];
15
+ }
16
+ export interface RecommendedSpecialist {
17
+ name: string;
18
+ reason: string;
19
+ priority: number;
20
+ }
21
+ export interface WorkflowPhase {
22
+ phase: string;
23
+ focus: string[];
24
+ }
25
+ export interface SuggestedWorkflow {
26
+ phases: WorkflowPhase[];
27
+ }
28
+ export interface ContextHints {
29
+ projectType?: string;
30
+ securityLevel?: RiskLevel;
31
+ mustConsider: string[];
32
+ }
33
+ export interface AnalyzeTaskInput {
34
+ prompt: string;
35
+ files?: string[];
36
+ mode?: 'PLAN' | 'ACT' | 'EVAL';
37
+ }
38
+ export interface AnalyzeTaskOutput {
39
+ analysis: TaskAnalysis;
40
+ riskAssessment: RiskAssessment;
41
+ checklists: DomainChecklist[];
42
+ checklistSummary: ChecklistSummary;
43
+ matchedTriggers: MatchedTrigger[];
44
+ recommendedSpecialists: RecommendedSpecialist[];
45
+ suggestedWorkflow: SuggestedWorkflow;
46
+ contextHints: ContextHints;
47
+ }
48
+ export declare const FILE_CATEGORY_PATTERNS: Record<string, string[]>;
49
+ export declare const CATEGORY_RISK_LEVELS: Record<string, RiskLevel>;
50
+ export declare const CATEGORY_SPECIALISTS: Record<string, string[]>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CATEGORY_SPECIALISTS = exports.CATEGORY_RISK_LEVELS = exports.FILE_CATEGORY_PATTERNS = void 0;
4
+ exports.FILE_CATEGORY_PATTERNS = {
5
+ authentication: [
6
+ '**/auth/**',
7
+ '**/login/**',
8
+ '**/session/**',
9
+ '**/password/**',
10
+ ],
11
+ payment: [
12
+ '**/payment/**',
13
+ '**/checkout/**',
14
+ '**/billing/**',
15
+ '**/subscription/**',
16
+ ],
17
+ api: ['**/api/**', '**/handler/**', '**/route/**', '**/endpoint/**'],
18
+ ui: ['**/components/**', '**/features/**', '**/widgets/**', '**/page/**'],
19
+ data: ['**/model/**', '**/entity/**', '**/schema/**', '**/database/**'],
20
+ testing: ['**/*.spec.*', '**/*.test.*', '**/test/**', '**/__tests__/**'],
21
+ };
22
+ exports.CATEGORY_RISK_LEVELS = {
23
+ authentication: 'critical',
24
+ payment: 'critical',
25
+ api: 'high',
26
+ data: 'high',
27
+ ui: 'medium',
28
+ testing: 'low',
29
+ };
30
+ exports.CATEGORY_SPECIALISTS = {
31
+ authentication: ['security-specialist', 'test-strategy-specialist'],
32
+ payment: ['security-specialist', 'test-strategy-specialist'],
33
+ api: [
34
+ 'security-specialist',
35
+ 'performance-specialist',
36
+ 'test-strategy-specialist',
37
+ ],
38
+ ui: ['accessibility-specialist', 'ui-ux-designer', 'performance-specialist'],
39
+ data: ['architecture-specialist', 'security-specialist'],
40
+ testing: ['test-strategy-specialist', 'code-quality-specialist'],
41
+ };
42
+ //# sourceMappingURL=context.types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.types.js","sourceRoot":"","sources":["../../../src/context/context.types.ts"],"names":[],"mappings":";;;AAuHa,QAAA,sBAAsB,GAA6B;IAC9D,cAAc,EAAE;QACd,YAAY;QACZ,aAAa;QACb,eAAe;QACf,gBAAgB;KACjB;IACD,OAAO,EAAE;QACP,eAAe;QACf,gBAAgB;QAChB,eAAe;QACf,oBAAoB;KACrB;IACD,GAAG,EAAE,CAAC,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,CAAC;IACpE,EAAE,EAAE,CAAC,kBAAkB,EAAE,gBAAgB,EAAE,eAAe,EAAE,YAAY,CAAC;IACzE,IAAI,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,gBAAgB,CAAC;IACvE,OAAO,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,iBAAiB,CAAC;CACzE,CAAC;AAKW,QAAA,oBAAoB,GAA8B;IAC7D,cAAc,EAAE,UAAU;IAC1B,OAAO,EAAE,UAAU;IACnB,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,QAAQ;IACZ,OAAO,EAAE,KAAK;CACf,CAAC;AAKW,QAAA,oBAAoB,GAA6B;IAC5D,cAAc,EAAE,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IACnE,OAAO,EAAE,CAAC,qBAAqB,EAAE,0BAA0B,CAAC;IAC5D,GAAG,EAAE;QACH,qBAAqB;QACrB,wBAAwB;QACxB,0BAA0B;KAC3B;IACD,EAAE,EAAE,CAAC,0BAA0B,EAAE,gBAAgB,EAAE,wBAAwB,CAAC;IAC5E,IAAI,EAAE,CAAC,yBAAyB,EAAE,qBAAqB,CAAC;IACxD,OAAO,EAAE,CAAC,0BAA0B,EAAE,yBAAyB,CAAC;CACjE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './context.module';
2
+ export * from './context.service';
3
+ export * from './context.types';
@@ -0,0 +1,20 @@
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("./context.module"), exports);
18
+ __exportStar(require("./context.service"), exports);
19
+ __exportStar(require("./context.types"), exports);
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/context/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,mDAAiC;AACjC,oDAAkC;AAClC,kDAAgC"}
@@ -0,0 +1,7 @@
1
+ import type { TaskIntent } from './context.types';
2
+ export interface IntentPattern {
3
+ intent: TaskIntent;
4
+ keywords: readonly string[];
5
+ }
6
+ export declare const INTENT_PATTERNS: readonly IntentPattern[];
7
+ export declare function detectIntentFromPatterns(prompt: string): TaskIntent;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.INTENT_PATTERNS = void 0;
4
+ exports.detectIntentFromPatterns = detectIntentFromPatterns;
5
+ exports.INTENT_PATTERNS = [
6
+ {
7
+ intent: 'bug_fix',
8
+ keywords: ['fix', 'bug', 'error', 'issue', 'broken'],
9
+ },
10
+ {
11
+ intent: 'refactoring',
12
+ keywords: ['refactor', 'clean', 'improve', 'restructure'],
13
+ },
14
+ {
15
+ intent: 'code_review',
16
+ keywords: ['review', 'check', 'audit', 'inspect'],
17
+ },
18
+ {
19
+ intent: 'testing',
20
+ keywords: ['test', 'spec', 'coverage', 'unit test'],
21
+ },
22
+ {
23
+ intent: 'documentation',
24
+ keywords: ['doc', 'readme', 'comment', 'jsdoc'],
25
+ },
26
+ {
27
+ intent: 'performance_optimization',
28
+ keywords: ['performance', 'optimize', 'speed', 'fast', 'slow', 'latency'],
29
+ },
30
+ {
31
+ intent: 'security_hardening',
32
+ keywords: ['security', 'vulnerability', 'auth', 'secure', 'xss', 'csrf'],
33
+ },
34
+ {
35
+ intent: 'feature_development',
36
+ keywords: ['add', 'create', 'implement', 'build', 'new', 'feature'],
37
+ },
38
+ ];
39
+ function detectIntentFromPatterns(prompt) {
40
+ const promptLower = prompt.toLowerCase();
41
+ for (const pattern of exports.INTENT_PATTERNS) {
42
+ for (const keyword of pattern.keywords) {
43
+ if (promptLower.includes(keyword)) {
44
+ return pattern.intent;
45
+ }
46
+ }
47
+ }
48
+ return 'unknown';
49
+ }
50
+ //# sourceMappingURL=intent-patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"intent-patterns.js","sourceRoot":"","sources":["../../../src/context/intent-patterns.ts"],"names":[],"mappings":";;;AAwDA,4DAYC;AApDY,QAAA,eAAe,GAA6B;IACvD;QACE,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;KACrD;IACD;QACE,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC;KAC1D;IACD;QACE,MAAM,EAAE,aAAa;QACrB,QAAQ,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC;KAClD;IACD;QACE,MAAM,EAAE,SAAS;QACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,WAAW,CAAC;KACpD;IACD;QACE,MAAM,EAAE,eAAe;QACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC;KAChD;IACD;QACE,MAAM,EAAE,0BAA0B;QAClC,QAAQ,EAAE,CAAC,aAAa,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC;KAC1E;IACD;QACE,MAAM,EAAE,oBAAoB;QAC5B,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC;KACzE;IACD;QACE,MAAM,EAAE,qBAAqB;QAC7B,QAAQ,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,CAAC;KACpE;CACO,CAAC;AAOX,SAAgB,wBAAwB,CAAC,MAAc;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IAEzC,KAAK,MAAM,OAAO,IAAI,uBAAe,EAAE,CAAC;QACtC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACvC,IAAI,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClC,OAAO,OAAO,CAAC,MAAM,CAAC;YACxB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -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":"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"}
@@ -1,12 +1,27 @@
1
- import { type Mode, type RuleContent, type ParseModeResult, type KeywordModesConfig } from './keyword.types';
1
+ import { type Mode, type RuleContent, type ParseModeResult, type KeywordModesConfig, type ResolutionContext } from './keyword.types';
2
+ export interface ParseModeOptions {
3
+ recommendedActAgent?: string;
4
+ context?: ResolutionContext;
5
+ }
6
+ import { PrimaryAgentResolver } from './primary-agent-resolver';
2
7
  export declare class KeywordService {
3
8
  private readonly loadConfigFn;
4
9
  private readonly loadRuleFn;
5
10
  private readonly loadAgentInfoFn?;
11
+ private readonly logger;
6
12
  private configCache;
7
- constructor(loadConfigFn: () => Promise<KeywordModesConfig>, loadRuleFn: (path: string) => Promise<string>, loadAgentInfoFn?: ((agentName: string) => Promise<any>) | undefined);
8
- parseMode(prompt: string): Promise<ParseModeResult>;
13
+ private readonly primaryAgentResolver?;
14
+ constructor(loadConfigFn: () => Promise<KeywordModesConfig>, loadRuleFn: (path: string) => Promise<string>, loadAgentInfoFn?: ((agentName: string) => Promise<unknown>) | undefined, primaryAgentResolver?: PrimaryAgentResolver);
15
+ parseMode(prompt: string, options?: ParseModeOptions): Promise<ParseModeResult>;
16
+ private extractModeFromPrompt;
17
+ private checkForMultipleKeywords;
18
+ private checkForEmptyContent;
19
+ private buildParseModeResult;
20
+ private getPrimaryAgentTier;
21
+ private getParallelAgentsRecommendation;
22
+ private getActAgentRecommendation;
9
23
  loadModeConfig(): Promise<KeywordModesConfig>;
10
24
  getRulesForMode(mode: Mode): Promise<RuleContent[]>;
11
25
  private getAgentInfo;
26
+ private resolvePrimaryAgent;
12
27
  }