codingbuddy 2.3.4 → 2.4.1

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 (131) hide show
  1. package/README.md +70 -0
  2. package/dist/src/cli/init/prompts/tech-stack-prompt.d.ts +1 -0
  3. package/dist/src/cli/init/prompts/tech-stack-prompt.js +1 -0
  4. package/dist/src/cli/init/prompts/tech-stack-prompt.js.map +1 -1
  5. package/dist/src/cli/init/prompts/test-strategy-prompt.d.ts +1 -0
  6. package/dist/src/cli/init/prompts/test-strategy-prompt.js +9 -7
  7. package/dist/src/cli/init/prompts/test-strategy-prompt.js.map +1 -1
  8. package/dist/src/config/config.schema.d.ts +11 -0
  9. package/dist/src/config/config.schema.js +7 -1
  10. package/dist/src/config/config.schema.js.map +1 -1
  11. package/dist/src/config/config.service.d.ts +4 -0
  12. package/dist/src/config/config.service.js +7 -0
  13. package/dist/src/config/config.service.js.map +1 -1
  14. package/dist/src/context/context-document.service.d.ts +24 -0
  15. package/dist/src/context/context-document.service.js +212 -0
  16. package/dist/src/context/context-document.service.js.map +1 -0
  17. package/dist/src/context/context-document.types.d.ts +89 -0
  18. package/dist/src/context/context-document.types.js +53 -0
  19. package/dist/src/context/context-document.types.js.map +1 -0
  20. package/dist/src/context/context-parser.utils.d.ts +10 -0
  21. package/dist/src/context/context-parser.utils.js +214 -0
  22. package/dist/src/context/context-parser.utils.js.map +1 -0
  23. package/dist/src/context/context-serializer.utils.d.ts +16 -0
  24. package/dist/src/context/context-serializer.utils.js +130 -0
  25. package/dist/src/context/context-serializer.utils.js.map +1 -0
  26. package/dist/src/context/context.module.js +5 -3
  27. package/dist/src/context/context.module.js.map +1 -1
  28. package/dist/src/keyword/keyword.module.js +5 -2
  29. package/dist/src/keyword/keyword.module.js.map +1 -1
  30. package/dist/src/keyword/keyword.service.js +19 -11
  31. package/dist/src/keyword/keyword.service.js.map +1 -1
  32. package/dist/src/keyword/patterns/agent.patterns.d.ts +2 -0
  33. package/dist/src/keyword/patterns/agent.patterns.js +91 -0
  34. package/dist/src/keyword/patterns/agent.patterns.js.map +1 -0
  35. package/dist/src/keyword/patterns/ai-ml.patterns.d.ts +2 -0
  36. package/dist/src/keyword/patterns/ai-ml.patterns.js +81 -0
  37. package/dist/src/keyword/patterns/ai-ml.patterns.js.map +1 -0
  38. package/dist/src/keyword/patterns/backend.patterns.d.ts +2 -0
  39. package/dist/src/keyword/patterns/backend.patterns.js +91 -0
  40. package/dist/src/keyword/patterns/backend.patterns.js.map +1 -0
  41. package/dist/src/keyword/patterns/context.patterns.d.ts +2 -0
  42. package/dist/src/keyword/patterns/context.patterns.js +82 -0
  43. package/dist/src/keyword/patterns/context.patterns.js.map +1 -0
  44. package/dist/src/keyword/patterns/data.patterns.d.ts +2 -0
  45. package/dist/src/keyword/patterns/data.patterns.js +47 -0
  46. package/dist/src/keyword/patterns/data.patterns.js.map +1 -0
  47. package/dist/src/keyword/patterns/explicit.patterns.d.ts +1 -0
  48. package/dist/src/keyword/patterns/explicit.patterns.js +10 -0
  49. package/dist/src/keyword/patterns/explicit.patterns.js.map +1 -0
  50. package/dist/src/keyword/patterns/index.d.ts +12 -0
  51. package/dist/src/keyword/patterns/index.js +26 -0
  52. package/dist/src/keyword/patterns/index.js.map +1 -0
  53. package/dist/src/keyword/patterns/intent-pattern-checks.d.ts +2 -0
  54. package/dist/src/keyword/patterns/intent-pattern-checks.js +48 -0
  55. package/dist/src/keyword/patterns/intent-pattern-checks.js.map +1 -0
  56. package/dist/src/keyword/patterns/intent-patterns.types.d.ts +15 -0
  57. package/dist/src/keyword/patterns/intent-patterns.types.js +3 -0
  58. package/dist/src/keyword/patterns/intent-patterns.types.js.map +1 -0
  59. package/dist/src/keyword/patterns/meta-discussion.patterns.d.ts +1 -0
  60. package/dist/src/keyword/patterns/meta-discussion.patterns.js +11 -0
  61. package/dist/src/keyword/patterns/meta-discussion.patterns.js.map +1 -0
  62. package/dist/src/keyword/patterns/mobile.patterns.d.ts +2 -0
  63. package/dist/src/keyword/patterns/mobile.patterns.js +35 -0
  64. package/dist/src/keyword/patterns/mobile.patterns.js.map +1 -0
  65. package/dist/src/keyword/patterns/platform.patterns.d.ts +2 -0
  66. package/dist/src/keyword/patterns/platform.patterns.js +72 -0
  67. package/dist/src/keyword/patterns/platform.patterns.js.map +1 -0
  68. package/dist/src/keyword/patterns/tooling.patterns.d.ts +2 -0
  69. package/dist/src/keyword/patterns/tooling.patterns.js +78 -0
  70. package/dist/src/keyword/patterns/tooling.patterns.js.map +1 -0
  71. package/dist/src/keyword/primary-agent-resolver.d.ts +7 -29
  72. package/dist/src/keyword/primary-agent-resolver.js +34 -684
  73. package/dist/src/keyword/primary-agent-resolver.js.map +1 -1
  74. package/dist/src/keyword/strategies/__tests__/strategy-test.utils.d.ts +8 -0
  75. package/dist/src/keyword/strategies/__tests__/strategy-test.utils.js +45 -0
  76. package/dist/src/keyword/strategies/__tests__/strategy-test.utils.js.map +1 -0
  77. package/dist/src/keyword/strategies/act-agent.strategy.d.ts +10 -0
  78. package/dist/src/keyword/strategies/act-agent.strategy.js +125 -0
  79. package/dist/src/keyword/strategies/act-agent.strategy.js.map +1 -0
  80. package/dist/src/keyword/strategies/eval-agent.strategy.d.ts +5 -0
  81. package/dist/src/keyword/strategies/eval-agent.strategy.js +19 -0
  82. package/dist/src/keyword/strategies/eval-agent.strategy.js.map +1 -0
  83. package/dist/src/keyword/strategies/index.d.ts +4 -0
  84. package/dist/src/keyword/strategies/index.js +10 -0
  85. package/dist/src/keyword/strategies/index.js.map +1 -0
  86. package/dist/src/keyword/strategies/plan-agent.strategy.d.ts +6 -0
  87. package/dist/src/keyword/strategies/plan-agent.strategy.js +68 -0
  88. package/dist/src/keyword/strategies/plan-agent.strategy.js.map +1 -0
  89. package/dist/src/keyword/strategies/resolution-strategy.interface.d.ts +20 -0
  90. package/dist/src/keyword/strategies/resolution-strategy.interface.js +3 -0
  91. package/dist/src/keyword/strategies/resolution-strategy.interface.js.map +1 -0
  92. package/dist/src/mcp/handlers/config.handler.js +2 -1
  93. package/dist/src/mcp/handlers/config.handler.js.map +1 -1
  94. package/dist/src/mcp/handlers/context-document.handler.d.ts +13 -0
  95. package/dist/src/mcp/handlers/context-document.handler.js +232 -0
  96. package/dist/src/mcp/handlers/context-document.handler.js.map +1 -0
  97. package/dist/src/mcp/handlers/index.d.ts +1 -0
  98. package/dist/src/mcp/handlers/index.js +3 -1
  99. package/dist/src/mcp/handlers/index.js.map +1 -1
  100. package/dist/src/mcp/handlers/mode.handler.d.ts +6 -1
  101. package/dist/src/mcp/handlers/mode.handler.js +128 -14
  102. package/dist/src/mcp/handlers/mode.handler.js.map +1 -1
  103. package/dist/src/mcp/mcp.module.js +1 -0
  104. package/dist/src/mcp/mcp.module.js.map +1 -1
  105. package/dist/src/rules/rules.service.js +17 -1
  106. package/dist/src/rules/rules.service.js.map +1 -1
  107. package/dist/src/rules/rules.types.d.ts +7 -0
  108. package/dist/src/session/__tests__/session-test.utils.d.ts +5 -0
  109. package/dist/src/session/__tests__/session-test.utils.js +59 -0
  110. package/dist/src/session/__tests__/session-test.utils.js.map +1 -0
  111. package/dist/src/session/session.cache.d.ts +19 -0
  112. package/dist/src/session/session.cache.js +83 -0
  113. package/dist/src/session/session.cache.js.map +1 -0
  114. package/dist/src/session/session.parser.d.ts +22 -0
  115. package/dist/src/session/session.parser.js +273 -0
  116. package/dist/src/session/session.parser.js.map +1 -0
  117. package/dist/src/session/session.serializer.d.ts +6 -0
  118. package/dist/src/session/session.serializer.js +84 -0
  119. package/dist/src/session/session.serializer.js.map +1 -0
  120. package/dist/src/session/session.service.d.ts +3 -12
  121. package/dist/src/session/session.service.js +63 -311
  122. package/dist/src/session/session.service.js.map +1 -1
  123. package/dist/src/session/session.types.d.ts +11 -0
  124. package/dist/src/shared/async.utils.d.ts +12 -0
  125. package/dist/src/shared/async.utils.js +50 -0
  126. package/dist/src/shared/async.utils.js.map +1 -1
  127. package/dist/src/shared/slug.utils.d.ts +2 -0
  128. package/dist/src/shared/slug.utils.js +20 -0
  129. package/dist/src/shared/slug.utils.js.map +1 -0
  130. package/dist/tsconfig.build.tsbuildinfo +1 -1
  131. package/package.json +2 -2
@@ -3,141 +3,57 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PrimaryAgentResolver = void 0;
4
4
  const common_1 = require("@nestjs/common");
5
5
  const keyword_types_1 = require("./keyword.types");
6
+ const strategies_1 = require("./strategies");
6
7
  class PrimaryAgentResolver {
7
8
  constructor(getProjectConfig, listPrimaryAgents) {
8
9
  this.getProjectConfig = getProjectConfig;
9
10
  this.listPrimaryAgents = listPrimaryAgents;
10
11
  this.logger = new common_1.Logger(PrimaryAgentResolver.name);
12
+ this.evalStrategy = new strategies_1.EvalAgentStrategy();
13
+ this.planStrategy = new strategies_1.PlanAgentStrategy();
14
+ this.actStrategy = new strategies_1.ActAgentStrategy(this.getProjectConfig);
11
15
  }
12
16
  async resolve(mode, prompt, context, recommendedActAgent) {
13
- if (mode === 'EVAL') {
14
- return this.createResult(keyword_types_1.EVAL_PRIMARY_AGENT, 'default', 1.0, 'EVAL mode always uses code-reviewer');
15
- }
16
- const availableAgents = await this.safeListPrimaryAgents();
17
- if (mode === 'PLAN') {
18
- return this.resolvePlanAgent(prompt, availableAgents);
19
- }
20
- return this.resolveActAgent(prompt, availableAgents, context, recommendedActAgent);
21
- }
22
- resolvePlanAgent(prompt, availableAgents) {
23
- const explicit = this.parseExplicitRequest(prompt, availableAgents, Array.from(keyword_types_1.PLAN_PRIMARY_AGENTS));
24
- if (explicit) {
25
- return explicit;
26
- }
27
- const planAgent = this.choosePlanAgent(prompt, availableAgents);
28
- return planAgent;
29
- }
30
- choosePlanAgent(prompt, availableAgents) {
31
- const architecturePatterns = /아키텍처|architecture|시스템\s*설계|system\s*design|구조|structure|API\s*설계|마이크로서비스|microservice|기술\s*선택|technology/i;
32
- const planningPatterns = /계획|plan|단계|step|태스크|task|TDD|구현\s*순서|implementation\s*order|리팩토링|refactor/i;
33
- const hasArchitectureIntent = architecturePatterns.test(prompt);
34
- const hasPlanningIntent = planningPatterns.test(prompt);
35
- if (hasArchitectureIntent && !hasPlanningIntent) {
36
- if (availableAgents.includes('solution-architect')) {
37
- return this.createResult('solution-architect', 'intent', 0.9, 'Architecture-focused task detected in PLAN mode');
38
- }
39
- }
40
- if (hasPlanningIntent && !hasArchitectureIntent) {
41
- if (availableAgents.includes('technical-planner')) {
42
- return this.createResult('technical-planner', 'intent', 0.9, 'Planning/implementation-focused task detected in PLAN mode');
43
- }
44
- }
45
- if (hasArchitectureIntent && hasPlanningIntent) {
46
- if (availableAgents.includes('solution-architect')) {
47
- return this.createResult('solution-architect', 'intent', 0.85, 'Both architecture and planning detected; architecture takes precedence');
48
- }
49
- }
50
- const defaultPlanAgent = availableAgents.includes('solution-architect')
51
- ? 'solution-architect'
52
- : availableAgents.includes('technical-planner')
53
- ? 'technical-planner'
54
- : keyword_types_1.DEFAULT_ACT_AGENT;
55
- return this.createResult(defaultPlanAgent, 'default', 1.0, 'PLAN mode default: solution-architect for high-level design');
56
- }
57
- async resolveActAgent(prompt, availableAgents, context, recommendedActAgent) {
58
- const explicit = this.parseExplicitRequest(prompt, availableAgents, Array.from(keyword_types_1.ACT_PRIMARY_AGENTS));
59
- if (explicit) {
60
- return explicit;
61
- }
62
- if (recommendedActAgent && availableAgents.includes(recommendedActAgent)) {
63
- return this.createResult(recommendedActAgent, 'config', 1.0, `Using recommended agent from PLAN mode: ${recommendedActAgent}`);
64
- }
65
- for (const { agent, patterns, category, } of PrimaryAgentResolver.INTENT_PATTERN_CHECKS) {
66
- const result = this.inferFromIntentPatterns(prompt, availableAgents, agent, patterns, category);
67
- if (result) {
68
- return result;
69
- }
70
- }
71
- const fromConfig = await this.getFromProjectConfig(availableAgents);
72
- if (fromConfig) {
73
- return fromConfig;
74
- }
75
- if (context) {
76
- const fromContext = this.inferFromContext(context, availableAgents);
77
- if (fromContext && fromContext.confidence >= 0.8) {
78
- return fromContext;
79
- }
80
- }
81
- return this.createResult(keyword_types_1.DEFAULT_ACT_AGENT, 'default', 1.0, 'ACT mode default: frontend-developer (no specific intent detected)');
82
- }
83
- inferFromIntentPatterns(prompt, availableAgents, targetAgent, patterns, patternCategory) {
84
- if (!availableAgents.includes(targetAgent)) {
85
- return null;
86
- }
87
- for (const { pattern, confidence, description } of patterns) {
88
- if (pattern.test(prompt)) {
89
- return this.createResult(targetAgent, 'intent', confidence, `${patternCategory} pattern detected: ${description}`);
90
- }
91
- }
92
- return null;
17
+ const allAgents = await this.safeListPrimaryAgents();
18
+ const availableAgents = await this.filterExcludedAgents(allAgents);
19
+ const strategyContext = {
20
+ prompt,
21
+ availableAgents,
22
+ context,
23
+ recommendedActAgent,
24
+ };
25
+ const strategy = this.getStrategy(mode);
26
+ const result = await strategy.resolve(strategyContext);
27
+ this.logger.debug(`[${mode}] Resolved agent: ${result.agentName} (source: ${result.source}, confidence: ${result.confidence})`);
28
+ return result;
93
29
  }
94
- parseExplicitRequest(prompt, availableAgents, allowedAgents) {
95
- for (const pattern of PrimaryAgentResolver.EXPLICIT_PATTERNS) {
96
- const match = prompt.match(pattern);
97
- if (match?.[1]) {
98
- const agentName = match[1].toLowerCase();
99
- const isAvailable = availableAgents.includes(agentName);
100
- const isAllowed = !allowedAgents || allowedAgents.includes(agentName);
101
- if (isAvailable && isAllowed) {
102
- return this.createResult(agentName, 'explicit', 1.0, `Explicit request for ${agentName} in prompt`);
103
- }
104
- }
30
+ getStrategy(mode) {
31
+ switch (mode) {
32
+ case 'EVAL':
33
+ return this.evalStrategy;
34
+ case 'PLAN':
35
+ return this.planStrategy;
36
+ case 'ACT':
37
+ default:
38
+ return this.actStrategy;
105
39
  }
106
- return null;
107
40
  }
108
- async getFromProjectConfig(availableAgents) {
41
+ async filterExcludedAgents(agents) {
109
42
  try {
110
43
  const config = await this.getProjectConfig();
111
- if (config?.primaryAgent) {
112
- const agentName = config.primaryAgent.toLowerCase();
113
- if (availableAgents.includes(agentName)) {
114
- return this.createResult(agentName, 'config', 1.0, `Configured in project: ${agentName}`);
44
+ if (config?.excludeAgents && config.excludeAgents.length > 0) {
45
+ const excluded = new Set(config.excludeAgents.map(a => a.toLowerCase()));
46
+ const filtered = agents.filter(agent => !excluded.has(agent));
47
+ if (filtered.length < agents.length) {
48
+ this.logger.debug(`Excluded agents from resolution: ${config.excludeAgents.join(', ')}`);
115
49
  }
116
- this.logger.warn(`Configured agent '${config.primaryAgent}' not found in registry. ` +
117
- `Available: ${availableAgents.join(', ')}`);
50
+ return filtered;
118
51
  }
119
52
  }
120
53
  catch (error) {
121
- this.logger.warn(`Failed to load project config for agent resolution: ${error instanceof Error ? error.message : 'Unknown error'}`);
122
- }
123
- return null;
124
- }
125
- inferFromContext(context, availableAgents) {
126
- if (context.filePath) {
127
- for (const { pattern, agent, confidence, } of PrimaryAgentResolver.CONTEXT_PATTERNS) {
128
- if (pattern.test(context.filePath)) {
129
- if (availableAgents.includes(agent)) {
130
- return this.createResult(agent, 'context', confidence, `Inferred from file path: ${context.filePath}`);
131
- }
132
- }
133
- }
134
- }
135
- if (context.projectType === 'infrastructure') {
136
- if (availableAgents.includes('devops-engineer')) {
137
- return this.createResult('devops-engineer', 'context', 0.85, `Inferred from project type: ${context.projectType}`);
138
- }
54
+ this.logger.warn(`Failed to get excludeAgents from config: ${error instanceof Error ? error.message : 'Unknown error'}`);
139
55
  }
140
- return null;
56
+ return agents;
141
57
  }
142
58
  async safeListPrimaryAgents() {
143
59
  try {
@@ -154,572 +70,6 @@ class PrimaryAgentResolver {
154
70
  return [...keyword_types_1.ALL_PRIMARY_AGENTS];
155
71
  }
156
72
  }
157
- createResult(agentName, source, confidence, reason) {
158
- return { agentName, source, confidence, reason };
159
- }
160
73
  }
161
74
  exports.PrimaryAgentResolver = PrimaryAgentResolver;
162
- PrimaryAgentResolver.EXPLICIT_PATTERNS = [
163
- /(\w+-\w+)(?:로|으로)\s*(?:작업|개발|해)/i,
164
- /(?:use|using)\s+(\w+-\w+)(?:\s+agent)?/i,
165
- /as\s+(\w+-\w+)/i,
166
- /(\w+-\w+)\s+agent(?:로|으로)/i,
167
- ];
168
- PrimaryAgentResolver.DATA_INTENT_PATTERNS = [
169
- {
170
- pattern: /schema\.prisma/i,
171
- confidence: 0.95,
172
- description: 'Prisma schema',
173
- },
174
- {
175
- pattern: /migration/i,
176
- confidence: 0.9,
177
- description: 'Database migration',
178
- },
179
- { pattern: /\.sql$/i, confidence: 0.9, description: 'SQL file' },
180
- {
181
- pattern: /database|데이터베이스|DB\s*(설계|스키마|마이그레이션)/i,
182
- confidence: 0.9,
183
- description: 'Database design',
184
- },
185
- {
186
- pattern: /스키마|schema\s*design/i,
187
- confidence: 0.9,
188
- description: 'Schema design',
189
- },
190
- {
191
- pattern: /ERD|entity.?relationship/i,
192
- confidence: 0.9,
193
- description: 'ERD design',
194
- },
195
- {
196
- pattern: /쿼리\s*최적화|query\s*optim/i,
197
- confidence: 0.85,
198
- description: 'Query optimization',
199
- },
200
- {
201
- pattern: /인덱스|index(ing)?/i,
202
- confidence: 0.85,
203
- description: 'Indexing',
204
- },
205
- {
206
- pattern: /정규화|normaliz/i,
207
- confidence: 0.85,
208
- description: 'Normalization',
209
- },
210
- ];
211
- PrimaryAgentResolver.MOBILE_INTENT_PATTERNS = [
212
- {
213
- pattern: /react.?native/i,
214
- confidence: 0.95,
215
- description: 'React Native',
216
- },
217
- { pattern: /flutter/i, confidence: 0.95, description: 'Flutter' },
218
- { pattern: /expo/i, confidence: 0.9, description: 'Expo' },
219
- { pattern: /swiftui/i, confidence: 0.95, description: 'SwiftUI' },
220
- {
221
- pattern: /jetpack\s*compose/i,
222
- confidence: 0.95,
223
- description: 'Jetpack Compose',
224
- },
225
- {
226
- pattern: /모바일\s*(앱|개발|화면)/i,
227
- confidence: 0.9,
228
- description: 'Korean: mobile app',
229
- },
230
- {
231
- pattern: /mobile\s*(app|develop|screen)/i,
232
- confidence: 0.9,
233
- description: 'Mobile app',
234
- },
235
- { pattern: /iOS\s*(앱|개발)/i, confidence: 0.9, description: 'iOS app' },
236
- {
237
- pattern: /android\s*(앱|개발)/i,
238
- confidence: 0.9,
239
- description: 'Android app',
240
- },
241
- ];
242
- PrimaryAgentResolver.TOOLING_INTENT_PATTERNS = [
243
- {
244
- pattern: /codingbuddy\.config/i,
245
- confidence: 0.98,
246
- description: 'CodingBuddy config',
247
- },
248
- {
249
- pattern: /tsconfig.*\.json/i,
250
- confidence: 0.95,
251
- description: 'TypeScript config',
252
- },
253
- { pattern: /eslint/i, confidence: 0.95, description: 'ESLint config' },
254
- {
255
- pattern: /prettier/i,
256
- confidence: 0.95,
257
- description: 'Prettier config',
258
- },
259
- {
260
- pattern: /stylelint/i,
261
- confidence: 0.95,
262
- description: 'Stylelint config',
263
- },
264
- {
265
- pattern: /vite\.config/i,
266
- confidence: 0.95,
267
- description: 'Vite config',
268
- },
269
- {
270
- pattern: /next\.config/i,
271
- confidence: 0.95,
272
- description: 'Next.js config',
273
- },
274
- { pattern: /webpack/i, confidence: 0.9, description: 'Webpack config' },
275
- {
276
- pattern: /rollup\.config/i,
277
- confidence: 0.9,
278
- description: 'Rollup config',
279
- },
280
- {
281
- pattern: /package\.json/i,
282
- confidence: 0.9,
283
- description: 'Package.json',
284
- },
285
- {
286
- pattern: /yarn\.lock|pnpm-lock|package-lock/i,
287
- confidence: 0.85,
288
- description: 'Lock files',
289
- },
290
- {
291
- pattern: /\.config\.(js|ts|mjs|cjs|json)$/i,
292
- confidence: 0.85,
293
- description: 'Config file extension',
294
- },
295
- {
296
- pattern: /설정\s*(파일|변경|수정)/i,
297
- confidence: 0.85,
298
- description: 'Korean: config file',
299
- },
300
- {
301
- pattern: /빌드\s*(설정|도구|환경)/i,
302
- confidence: 0.85,
303
- description: 'Korean: build config',
304
- },
305
- {
306
- pattern: /패키지\s*(관리|설치|업데이트|의존성)/i,
307
- confidence: 0.85,
308
- description: 'Korean: package management',
309
- },
310
- {
311
- pattern: /린터|린트\s*설정/i,
312
- confidence: 0.85,
313
- description: 'Korean: linter config',
314
- },
315
- ];
316
- PrimaryAgentResolver.PLATFORM_INTENT_PATTERNS = [
317
- { pattern: /terraform/i, confidence: 0.95, description: 'Terraform' },
318
- { pattern: /pulumi/i, confidence: 0.95, description: 'Pulumi' },
319
- { pattern: /aws.?cdk/i, confidence: 0.95, description: 'AWS CDK' },
320
- { pattern: /helm/i, confidence: 0.95, description: 'Helm chart' },
321
- {
322
- pattern: /argocd|argo.?cd/i,
323
- confidence: 0.95,
324
- description: 'Argo CD',
325
- },
326
- { pattern: /flux.?cd|fluxcd/i, confidence: 0.95, description: 'Flux CD' },
327
- {
328
- pattern: /kubernetes|k8s/i,
329
- confidence: 0.9,
330
- description: 'Kubernetes',
331
- },
332
- {
333
- pattern: /kustomize|kustomization/i,
334
- confidence: 0.95,
335
- description: 'Kustomize',
336
- },
337
- {
338
- pattern: /kubectl|kubeconfig/i,
339
- confidence: 0.9,
340
- description: 'Kubectl',
341
- },
342
- {
343
- pattern: /k8s.*manifest|manifest.*k8s|kubernetes.*manifest/i,
344
- confidence: 0.9,
345
- description: 'K8s manifest',
346
- },
347
- {
348
- pattern: /EKS|GKE|AKS/i,
349
- confidence: 0.9,
350
- description: 'Managed Kubernetes',
351
- },
352
- {
353
- pattern: /IRSA|workload.?identity/i,
354
- confidence: 0.9,
355
- description: 'Workload identity',
356
- },
357
- {
358
- pattern: /인프라\s*(코드|설정|관리|자동화)/i,
359
- confidence: 0.85,
360
- description: 'Korean: infrastructure',
361
- },
362
- {
363
- pattern: /infrastructure.?as.?code|IaC/i,
364
- confidence: 0.9,
365
- description: 'Infrastructure as Code',
366
- },
367
- { pattern: /gitops/i, confidence: 0.9, description: 'GitOps' },
368
- {
369
- pattern: /multi.?cloud|hybrid.?cloud/i,
370
- confidence: 0.85,
371
- description: 'Multi-cloud',
372
- },
373
- {
374
- pattern: /finops|cloud.?cost|비용\s*최적화/i,
375
- confidence: 0.85,
376
- description: 'Cloud cost optimization',
377
- },
378
- {
379
- pattern: /disaster.?recovery|RTO|RPO/i,
380
- confidence: 0.85,
381
- description: 'Disaster recovery',
382
- },
383
- ];
384
- PrimaryAgentResolver.AI_ML_INTENT_PATTERNS = [
385
- {
386
- pattern: /pytorch|tensorflow|keras|jax/i,
387
- confidence: 0.95,
388
- description: 'ML Framework',
389
- },
390
- {
391
- pattern: /hugging\s*face|transformers|diffusers/i,
392
- confidence: 0.95,
393
- description: 'HuggingFace',
394
- },
395
- {
396
- pattern: /langchain|llama.?index|llamaindex/i,
397
- confidence: 0.95,
398
- description: 'LLM Framework',
399
- },
400
- {
401
- pattern: /openai\s*(api|sdk)|anthropic\s*(api|sdk)/i,
402
- confidence: 0.95,
403
- description: 'LLM API',
404
- },
405
- {
406
- pattern: /machine\s*learning|ML\s*(모델|model|파이프라인|pipeline)/i,
407
- confidence: 0.9,
408
- description: 'Machine Learning',
409
- },
410
- {
411
- pattern: /딥\s*러닝|deep\s*learning|신경망|neural\s*network/i,
412
- confidence: 0.9,
413
- description: 'Deep Learning',
414
- },
415
- {
416
- pattern: /모델\s*학습|train.*model|fine.?tun|파인\s*튜닝/i,
417
- confidence: 0.9,
418
- description: 'Model Training',
419
- },
420
- {
421
- pattern: /RAG|retrieval.*augment|검색\s*증강/i,
422
- confidence: 0.9,
423
- description: 'RAG',
424
- },
425
- {
426
- pattern: /프롬프트\s*엔지니어링|prompt\s*engineer/i,
427
- confidence: 0.9,
428
- description: 'Prompt Engineering',
429
- },
430
- {
431
- pattern: /LLM\s*(개발|develop|구현|implement|통합|integrat)/i,
432
- confidence: 0.9,
433
- description: 'LLM Development',
434
- },
435
- {
436
- pattern: /임베딩|embedding|벡터\s*(DB|database|저장)/i,
437
- confidence: 0.85,
438
- description: 'Embeddings',
439
- },
440
- {
441
- pattern: /추론|inference|predict|예측\s*모델/i,
442
- confidence: 0.85,
443
- description: 'Inference',
444
- },
445
- {
446
- pattern: /AI\s*(모델|model|에이전트|agent|챗봇|chatbot)/i,
447
- confidence: 0.85,
448
- description: 'AI Model/Agent',
449
- },
450
- {
451
- pattern: /자연어\s*처리|NLP|텍스트\s*분석/i,
452
- confidence: 0.85,
453
- description: 'NLP',
454
- },
455
- {
456
- pattern: /컴퓨터\s*비전|computer\s*vision|이미지\s*인식/i,
457
- confidence: 0.85,
458
- description: 'Computer Vision',
459
- },
460
- ];
461
- PrimaryAgentResolver.BACKEND_INTENT_PATTERNS = [
462
- {
463
- pattern: /nestjs|nest\.js/i,
464
- confidence: 0.95,
465
- description: 'NestJS',
466
- },
467
- {
468
- pattern: /express\.js|express\s+서버|express\s+server/i,
469
- confidence: 0.95,
470
- description: 'Express',
471
- },
472
- {
473
- pattern: /fastify|koa\.js|hapi/i,
474
- confidence: 0.95,
475
- description: 'Node.js Framework',
476
- },
477
- {
478
- pattern: /django|flask|fastapi/i,
479
- confidence: 0.95,
480
- description: 'Python Framework',
481
- },
482
- {
483
- pattern: /spring\s*boot|spring\s*framework/i,
484
- confidence: 0.95,
485
- description: 'Spring Boot',
486
- },
487
- {
488
- pattern: /gin|echo|fiber/i,
489
- confidence: 0.9,
490
- description: 'Go Framework',
491
- },
492
- {
493
- pattern: /rails|ruby\s+on\s+rails/i,
494
- confidence: 0.95,
495
- description: 'Ruby on Rails',
496
- },
497
- {
498
- pattern: /REST\s*API|RESTful/i,
499
- confidence: 0.9,
500
- description: 'REST API',
501
- },
502
- {
503
- pattern: /GraphQL\s*(API|서버|server|스키마|schema)/i,
504
- confidence: 0.9,
505
- description: 'GraphQL',
506
- },
507
- {
508
- pattern: /gRPC|protobuf/i,
509
- confidence: 0.9,
510
- description: 'gRPC',
511
- },
512
- {
513
- pattern: /API\s*(설계|개발|구현|design|develop|implement)/i,
514
- confidence: 0.9,
515
- description: 'API Development',
516
- },
517
- {
518
- pattern: /서버\s*(개발|구현|로직)|server.?side\s*(logic|develop)/i,
519
- confidence: 0.85,
520
- description: 'Server Development',
521
- },
522
- {
523
- pattern: /백엔드\s*(개발|구현|로직)|backend\s*(develop|logic|implement)/i,
524
- confidence: 0.85,
525
- description: 'Backend Development',
526
- },
527
- {
528
- pattern: /미들웨어|middleware/i,
529
- confidence: 0.85,
530
- description: 'Middleware',
531
- },
532
- {
533
- pattern: /인증\s*서버|auth.*server|OAuth\s*서버/i,
534
- confidence: 0.85,
535
- description: 'Auth Server',
536
- },
537
- {
538
- pattern: /웹소켓|websocket|socket\.io/i,
539
- confidence: 0.85,
540
- description: 'WebSocket',
541
- },
542
- {
543
- pattern: /마이크로서비스|microservice/i,
544
- confidence: 0.85,
545
- description: 'Microservice',
546
- },
547
- ];
548
- PrimaryAgentResolver.AGENT_INTENT_PATTERNS = [
549
- {
550
- pattern: /MCP\s*(서버|server|tool|도구)/i,
551
- confidence: 0.95,
552
- description: 'MCP Server',
553
- },
554
- {
555
- pattern: /model\s*context\s*protocol/i,
556
- confidence: 0.95,
557
- description: 'Model Context Protocol',
558
- },
559
- {
560
- pattern: /에이전트\s*(설계|개발|구현|아키텍처)/i,
561
- confidence: 0.95,
562
- description: 'Korean: Agent Development',
563
- },
564
- {
565
- pattern: /agent\s*(design|develop|architect|framework)/i,
566
- confidence: 0.95,
567
- description: 'Agent Development',
568
- },
569
- {
570
- pattern: /claude\s*(code|에이전트|agent|sdk)/i,
571
- confidence: 0.95,
572
- description: 'Claude Agent',
573
- },
574
- {
575
- pattern: /워크플로우\s*(자동화|설계|구현)/i,
576
- confidence: 0.9,
577
- description: 'Korean: Workflow Automation',
578
- },
579
- {
580
- pattern: /workflow\s*(automat|design|orchestrat)/i,
581
- confidence: 0.9,
582
- description: 'Workflow Automation',
583
- },
584
- {
585
- pattern: /LLM\s*(체인|chain|오케스트레이션|orchestrat)/i,
586
- confidence: 0.9,
587
- description: 'LLM Orchestration',
588
- },
589
- {
590
- pattern: /AI\s*에이전트\s*(설계|개발)|AI\s*agent\s*(design|develop)/i,
591
- confidence: 0.9,
592
- description: 'AI Agent Design',
593
- },
594
- {
595
- pattern: /자동화\s*(파이프라인|pipeline|시스템)/i,
596
- confidence: 0.85,
597
- description: 'Automation Pipeline',
598
- },
599
- {
600
- pattern: /tool\s*(use|calling|호출)|function\s*calling/i,
601
- confidence: 0.85,
602
- description: 'Tool Calling',
603
- },
604
- {
605
- pattern: /멀티\s*에이전트|multi.?agent/i,
606
- confidence: 0.85,
607
- description: 'Multi-Agent',
608
- },
609
- ];
610
- PrimaryAgentResolver.INTENT_PATTERN_CHECKS = [
611
- {
612
- agent: 'tooling-engineer',
613
- patterns: PrimaryAgentResolver.TOOLING_INTENT_PATTERNS,
614
- category: 'Tooling',
615
- },
616
- {
617
- agent: 'platform-engineer',
618
- patterns: PrimaryAgentResolver.PLATFORM_INTENT_PATTERNS,
619
- category: 'Platform',
620
- },
621
- {
622
- agent: 'data-engineer',
623
- patterns: PrimaryAgentResolver.DATA_INTENT_PATTERNS,
624
- category: 'Data',
625
- },
626
- {
627
- agent: 'mobile-developer',
628
- patterns: PrimaryAgentResolver.MOBILE_INTENT_PATTERNS,
629
- category: 'Mobile',
630
- },
631
- {
632
- agent: 'ai-ml-engineer',
633
- patterns: PrimaryAgentResolver.AI_ML_INTENT_PATTERNS,
634
- category: 'AI/ML',
635
- },
636
- {
637
- agent: 'backend-developer',
638
- patterns: PrimaryAgentResolver.BACKEND_INTENT_PATTERNS,
639
- category: 'Backend',
640
- },
641
- {
642
- agent: 'agent-architect',
643
- patterns: PrimaryAgentResolver.AGENT_INTENT_PATTERNS,
644
- category: 'Agent',
645
- },
646
- ];
647
- PrimaryAgentResolver.CONTEXT_PATTERNS = [
648
- {
649
- pattern: /react-native\.config\.js$/i,
650
- agent: 'mobile-developer',
651
- confidence: 0.95,
652
- },
653
- {
654
- pattern: /metro\.config\.js$/i,
655
- agent: 'mobile-developer',
656
- confidence: 0.95,
657
- },
658
- { pattern: /app\.json$/i, agent: 'mobile-developer', confidence: 0.85 },
659
- { pattern: /pubspec\.yaml$/i, agent: 'mobile-developer', confidence: 0.95 },
660
- { pattern: /\.dart$/i, agent: 'mobile-developer', confidence: 0.9 },
661
- { pattern: /Podfile$/i, agent: 'mobile-developer', confidence: 0.9 },
662
- { pattern: /\.swift$/i, agent: 'mobile-developer', confidence: 0.9 },
663
- {
664
- pattern: /build\.gradle(\.kts)?$/i,
665
- agent: 'mobile-developer',
666
- confidence: 0.85,
667
- },
668
- {
669
- pattern: /AndroidManifest\.xml$/i,
670
- agent: 'mobile-developer',
671
- confidence: 0.9,
672
- },
673
- { pattern: /\.kt$/i, agent: 'mobile-developer', confidence: 0.85 },
674
- { pattern: /\.sql$/i, agent: 'data-engineer', confidence: 0.9 },
675
- { pattern: /schema\.prisma$/i, agent: 'data-engineer', confidence: 0.95 },
676
- { pattern: /migrations?\//i, agent: 'data-engineer', confidence: 0.9 },
677
- { pattern: /\.entity\.ts$/i, agent: 'data-engineer', confidence: 0.85 },
678
- { pattern: /\.tf$/i, agent: 'platform-engineer', confidence: 0.95 },
679
- { pattern: /\.tfvars$/i, agent: 'platform-engineer', confidence: 0.95 },
680
- {
681
- pattern: /terragrunt\.hcl$/i,
682
- agent: 'platform-engineer',
683
- confidence: 0.95,
684
- },
685
- { pattern: /Chart\.yaml$/i, agent: 'platform-engineer', confidence: 0.95 },
686
- { pattern: /values\.yaml$/i, agent: 'platform-engineer', confidence: 0.75 },
687
- {
688
- pattern: /helm.*templates\/|charts\/.*templates\//i,
689
- agent: 'platform-engineer',
690
- confidence: 0.9,
691
- },
692
- {
693
- pattern: /kustomization\.ya?ml$/i,
694
- agent: 'platform-engineer',
695
- confidence: 0.95,
696
- },
697
- {
698
- pattern: /Pulumi\.ya?ml$/i,
699
- agent: 'platform-engineer',
700
- confidence: 0.95,
701
- },
702
- {
703
- pattern: /argocd\/|argo-cd\//i,
704
- agent: 'platform-engineer',
705
- confidence: 0.9,
706
- },
707
- {
708
- pattern: /flux-system\//i,
709
- agent: 'platform-engineer',
710
- confidence: 0.9,
711
- },
712
- {
713
- pattern: /Dockerfile|docker-compose/i,
714
- agent: 'devops-engineer',
715
- confidence: 0.9,
716
- },
717
- { pattern: /\.go$/i, agent: 'backend-developer', confidence: 0.85 },
718
- { pattern: /\.py$/i, agent: 'backend-developer', confidence: 0.85 },
719
- { pattern: /\.java$/i, agent: 'backend-developer', confidence: 0.85 },
720
- { pattern: /\.rs$/i, agent: 'backend-developer', confidence: 0.85 },
721
- { pattern: /\.tsx?$/i, agent: 'frontend-developer', confidence: 0.7 },
722
- { pattern: /\.jsx?$/i, agent: 'frontend-developer', confidence: 0.7 },
723
- { pattern: /agents?.*\.json$/i, agent: 'agent-architect', confidence: 0.8 },
724
- ];
725
75
  //# sourceMappingURL=primary-agent-resolver.js.map