Skip to content

Commit 415606f

Browse files
committed
fix(mcp): resolve CI failures for diff-based agent recommendation
- Add import type for DiffAnalysisResult in keyword.types.ts (TS2304) - Remove unused type imports in diff-analyzer.spec.ts (lint error) - Apply prettier formatting
1 parent 228766e commit 415606f

4 files changed

Lines changed: 16 additions & 51 deletions

File tree

apps/mcp-server/src/keyword/diff-analyzer.spec.ts

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
import {
2-
analyzeDiffFiles,
3-
getDiffFiles,
4-
DIFF_FILE_PATTERNS,
5-
type DiffAnalysisResult,
6-
type DiffAgentScore,
7-
} from './diff-analyzer';
1+
import { analyzeDiffFiles, getDiffFiles, DIFF_FILE_PATTERNS } from './diff-analyzer';
82

93
describe('diff-analyzer', () => {
104
describe('DIFF_FILE_PATTERNS', () => {
@@ -34,20 +28,14 @@ describe('diff-analyzer', () => {
3428
});
3529

3630
it('should boost test-engineer for .test.ts files', () => {
37-
const result = analyzeDiffFiles([
38-
'src/auth/login.test.ts',
39-
'src/auth/login.spec.ts',
40-
]);
31+
const result = analyzeDiffFiles(['src/auth/login.test.ts', 'src/auth/login.spec.ts']);
4132
expect(result.topAgent).not.toBeNull();
4233
expect(result.topAgent!.agent).toBe('test-engineer');
4334
expect(result.topAgent!.matchedFiles.length).toBe(2);
4435
});
4536

4637
it('should boost devops-engineer for Dockerfile and .github/ files', () => {
47-
const result = analyzeDiffFiles([
48-
'Dockerfile',
49-
'.github/workflows/ci.yml',
50-
]);
38+
const result = analyzeDiffFiles(['Dockerfile', '.github/workflows/ci.yml']);
5139
expect(result.topAgent).not.toBeNull();
5240
expect(result.topAgent!.agent).toBe('devops-engineer');
5341
});
@@ -63,28 +51,19 @@ describe('diff-analyzer', () => {
6351
});
6452

6553
it('should boost backend-developer for .py files', () => {
66-
const result = analyzeDiffFiles([
67-
'hooks/pre-commit.py',
68-
'scripts/deploy.py',
69-
]);
54+
const result = analyzeDiffFiles(['hooks/pre-commit.py', 'scripts/deploy.py']);
7055
expect(result.topAgent).not.toBeNull();
7156
expect(result.topAgent!.agent).toBe('backend-developer');
7257
});
7358

7459
it('should boost platform-engineer for .tf files', () => {
75-
const result = analyzeDiffFiles([
76-
'infra/main.tf',
77-
'infra/variables.tf',
78-
]);
60+
const result = analyzeDiffFiles(['infra/main.tf', 'infra/variables.tf']);
7961
expect(result.topAgent).not.toBeNull();
8062
expect(result.topAgent!.agent).toBe('platform-engineer');
8163
});
8264

8365
it('should boost data-engineer for .sql and migration files', () => {
84-
const result = analyzeDiffFiles([
85-
'migrations/001_create_users.sql',
86-
'schema.prisma',
87-
]);
66+
const result = analyzeDiffFiles(['migrations/001_create_users.sql', 'schema.prisma']);
8867
expect(result.topAgent).not.toBeNull();
8968
expect(result.topAgent!.agent).toBe('data-engineer');
9069
});
@@ -121,9 +100,7 @@ describe('diff-analyzer', () => {
121100
]);
122101
expect(result.scores.length).toBeGreaterThan(0);
123102
for (let i = 1; i < result.scores.length; i++) {
124-
expect(result.scores[i - 1].score).toBeGreaterThanOrEqual(
125-
result.scores[i].score,
126-
);
103+
expect(result.scores[i - 1].score).toBeGreaterThanOrEqual(result.scores[i].score);
127104
}
128105
});
129106

@@ -152,16 +129,10 @@ describe('diff-analyzer', () => {
152129
'src/components/Header.tsx',
153130
'README.md', // no match
154131
]);
155-
const frontendScore = result.scores.find(
156-
(s) => s.agent === 'frontend-developer',
157-
);
132+
const frontendScore = result.scores.find(s => s.agent === 'frontend-developer');
158133
expect(frontendScore).toBeDefined();
159-
expect(frontendScore!.matchedFiles).toContain(
160-
'src/components/Button.tsx',
161-
);
162-
expect(frontendScore!.matchedFiles).toContain(
163-
'src/components/Header.tsx',
164-
);
134+
expect(frontendScore!.matchedFiles).toContain('src/components/Button.tsx');
135+
expect(frontendScore!.matchedFiles).toContain('src/components/Header.tsx');
165136
expect(frontendScore!.matchedFiles).not.toContain('README.md');
166137
});
167138
});

apps/mcp-server/src/keyword/diff-analyzer.ts

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -146,10 +146,7 @@ export function analyzeDiffFiles(files: string[]): DiffAnalysisResult {
146146
}
147147

148148
// Accumulate scores per agent
149-
const agentAccumulator = new Map<
150-
string,
151-
{ totalWeight: number; matchedFiles: string[] }
152-
>();
149+
const agentAccumulator = new Map<string, { totalWeight: number; matchedFiles: string[] }>();
153150

154151
for (const file of files) {
155152
for (const { pattern, agent, weight } of DIFF_FILE_PATTERNS) {
@@ -232,7 +229,7 @@ function execGitDiff(args: string[], cwd: string): Promise<string[]> {
232229
const files = stdout
233230
.trim()
234231
.split('\n')
235-
.filter((line) => line.length > 0);
232+
.filter(line => line.length > 0);
236233
resolve(files);
237234
});
238235
});

apps/mcp-server/src/keyword/keyword.types.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import type { DiffAnalysisResult } from './diff-analyzer';
2+
13
export const KEYWORDS = ['PLAN', 'ACT', 'EVAL', 'AUTO'] as const;
24

35
export type Mode = (typeof KEYWORDS)[number];
@@ -550,7 +552,7 @@ export interface VisualData {
550552
}
551553

552554
/** Re-export DiffAnalysisResult for consumers */
553-
export type { DiffAnalysisResult } from './diff-analyzer';
555+
export type { DiffAnalysisResult, DiffAgentScore } from './diff-analyzer';
554556

555557
export interface ModeConfig {
556558
description: string;

apps/mcp-server/src/keyword/strategies/act-agent.strategy.ts

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -206,12 +206,7 @@ export class ActAgentStrategy implements ResolutionStrategy {
206206
if (availableAgents.includes(diffAgent) && score >= 0.4) {
207207
const confidence = Math.min(0.75, 0.5 + score * 0.25);
208208
this.logger.debug(`Diff-based agent: ${diffAgent} (score: ${score.toFixed(2)})`);
209-
return createResult(
210-
diffAgent,
211-
'context',
212-
confidence,
213-
`Diff analysis: ${reason}`,
214-
);
209+
return createResult(diffAgent, 'context', confidence, `Diff analysis: ${reason}`);
215210
}
216211
}
217212

0 commit comments

Comments
 (0)