couchloop-eq-mcp 1.1.4 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +40 -38
- package/dist/clients/shrinkChatClient.d.ts +10 -10
- package/dist/index.js +81 -6
- package/dist/index.js.map +1 -1
- package/dist/server/http-mcp.d.ts.map +1 -1
- package/dist/server/http-mcp.js +17 -3
- package/dist/server/http-mcp.js.map +1 -1
- package/dist/server/sse.js +1 -1
- package/dist/tools/check-versions.d.ts +4 -4
- package/dist/tools/checkpoint.d.ts +2 -19
- package/dist/tools/checkpoint.d.ts.map +1 -1
- package/dist/tools/checkpoint.js +68 -2
- package/dist/tools/checkpoint.js.map +1 -1
- package/dist/tools/comprehensive-code-review.d.ts +78 -0
- package/dist/tools/comprehensive-code-review.d.ts.map +1 -0
- package/dist/tools/comprehensive-code-review.js +177 -0
- package/dist/tools/comprehensive-code-review.js.map +1 -0
- package/dist/tools/comprehensive-package-audit.d.ts +75 -0
- package/dist/tools/comprehensive-package-audit.d.ts.map +1 -0
- package/dist/tools/comprehensive-package-audit.js +151 -0
- package/dist/tools/comprehensive-package-audit.js.map +1 -0
- package/dist/tools/detect-build-context.d.ts +59 -0
- package/dist/tools/detect-build-context.d.ts.map +1 -0
- package/dist/tools/detect-build-context.js +80 -0
- package/dist/tools/detect-build-context.js.map +1 -0
- package/dist/tools/generate-upgrade-report.d.ts +85 -0
- package/dist/tools/generate-upgrade-report.d.ts.map +1 -0
- package/dist/tools/generate-upgrade-report.js +102 -0
- package/dist/tools/generate-upgrade-report.js.map +1 -0
- package/dist/tools/index-full.d.ts +1355 -0
- package/dist/tools/index-full.d.ts.map +1 -0
- package/dist/tools/index-full.js +611 -0
- package/dist/tools/index-full.js.map +1 -0
- package/dist/tools/index.d.ts +27 -1018
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +29 -554
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/insight.d.ts +31 -12
- package/dist/tools/insight.d.ts.map +1 -1
- package/dist/tools/insight.js +2 -1
- package/dist/tools/insight.js.map +1 -1
- package/dist/tools/intent-router.d.ts +142 -0
- package/dist/tools/intent-router.d.ts.map +1 -0
- package/dist/tools/intent-router.js +453 -0
- package/dist/tools/intent-router.js.map +1 -0
- package/dist/tools/prevent-ai-errors.d.ts +85 -0
- package/dist/tools/prevent-ai-errors.d.ts.map +1 -0
- package/dist/tools/prevent-ai-errors.js +97 -0
- package/dist/tools/prevent-ai-errors.js.map +1 -0
- package/dist/tools/primary-tools.d.ts +615 -0
- package/dist/tools/primary-tools.d.ts.map +1 -0
- package/dist/tools/primary-tools.js +355 -0
- package/dist/tools/primary-tools.js.map +1 -0
- package/dist/tools/protect-files.d.ts +1 -1
- package/dist/tools/sendMessage.d.ts.map +1 -1
- package/dist/tools/sendMessage.js +17 -152
- package/dist/tools/sendMessage.js.map +1 -1
- package/dist/tools/session.d.ts +1 -1
- package/dist/tools/smart-context.d.ts +66 -0
- package/dist/tools/smart-context.d.ts.map +1 -0
- package/dist/tools/smart-context.js +167 -0
- package/dist/tools/smart-context.js.map +1 -0
- package/dist/tools/status.d.ts +118 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +366 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/verify.d.ts +126 -0
- package/dist/tools/verify.d.ts.map +1 -0
- package/dist/tools/verify.js +308 -0
- package/dist/tools/verify.js.map +1 -0
- package/dist/types/checkpoint.d.ts +26 -1
- package/dist/types/checkpoint.d.ts.map +1 -1
- package/dist/types/checkpoint.js +17 -0
- package/dist/types/checkpoint.js.map +1 -1
- package/dist/types/insight.d.ts +2 -2
- package/dist/types/journey.d.ts +18 -18
- package/dist/types/session.d.ts +2 -2
- package/dist/utils/sanitize.d.ts +24 -0
- package/dist/utils/sanitize.d.ts.map +1 -0
- package/dist/utils/sanitize.js +117 -0
- package/dist/utils/sanitize.js.map +1 -0
- package/dist/workflows/engine.d.ts +2 -1
- package/dist/workflows/engine.d.ts.map +1 -1
- package/dist/workflows/engine.js +7 -1
- package/dist/workflows/engine.js.map +1 -1
- package/dist/workflows/index.d.ts +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: comprehensive_code_review
|
|
3
|
+
*
|
|
4
|
+
* One-stop code review that bundles ALL code analysis tools:
|
|
5
|
+
* - Security scanning (SQL injection, XSS, secrets, eval)
|
|
6
|
+
* - Code quality (console.logs, TODOs, error handling)
|
|
7
|
+
* - Code smell detection (complexity, bloat, over-engineering)
|
|
8
|
+
* - AI error prevention (hallucinated APIs, build context issues)
|
|
9
|
+
*
|
|
10
|
+
* User just says "review this code" and gets everything.
|
|
11
|
+
*/
|
|
12
|
+
export declare const comprehensiveCodeReviewTool: {
|
|
13
|
+
name: string;
|
|
14
|
+
description: string;
|
|
15
|
+
annotations: {
|
|
16
|
+
readOnlyHint: boolean;
|
|
17
|
+
destructiveHint: boolean;
|
|
18
|
+
openWorldHint: boolean;
|
|
19
|
+
};
|
|
20
|
+
inputSchema: {
|
|
21
|
+
type: string;
|
|
22
|
+
properties: {
|
|
23
|
+
code: {
|
|
24
|
+
type: string;
|
|
25
|
+
description: string;
|
|
26
|
+
};
|
|
27
|
+
language: {
|
|
28
|
+
type: string;
|
|
29
|
+
description: string;
|
|
30
|
+
};
|
|
31
|
+
context: {
|
|
32
|
+
type: string;
|
|
33
|
+
description: string;
|
|
34
|
+
};
|
|
35
|
+
auto_fix: {
|
|
36
|
+
type: string;
|
|
37
|
+
description: string;
|
|
38
|
+
};
|
|
39
|
+
focus: {
|
|
40
|
+
type: string;
|
|
41
|
+
items: {
|
|
42
|
+
type: string;
|
|
43
|
+
enum: string[];
|
|
44
|
+
};
|
|
45
|
+
description: string;
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
required: string[];
|
|
49
|
+
};
|
|
50
|
+
};
|
|
51
|
+
export declare function handleComprehensiveCodeReview(args: unknown): Promise<{
|
|
52
|
+
success: boolean;
|
|
53
|
+
summary: {
|
|
54
|
+
total_issues: number;
|
|
55
|
+
critical: number;
|
|
56
|
+
high: number;
|
|
57
|
+
medium_low: number;
|
|
58
|
+
overall_risk: string;
|
|
59
|
+
recommendation: string;
|
|
60
|
+
};
|
|
61
|
+
issues: {
|
|
62
|
+
category: string;
|
|
63
|
+
severity: string;
|
|
64
|
+
message: string;
|
|
65
|
+
location?: string;
|
|
66
|
+
}[];
|
|
67
|
+
details: Record<string, unknown>;
|
|
68
|
+
checks_performed: ("security" | "quality" | "smell" | "ai-errors")[];
|
|
69
|
+
error?: undefined;
|
|
70
|
+
} | {
|
|
71
|
+
success: boolean;
|
|
72
|
+
error: string;
|
|
73
|
+
summary?: undefined;
|
|
74
|
+
issues?: undefined;
|
|
75
|
+
details?: undefined;
|
|
76
|
+
checks_performed?: undefined;
|
|
77
|
+
}>;
|
|
78
|
+
//# sourceMappingURL=comprehensive-code-review.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comprehensive-code-review.d.ts","sourceRoot":"","sources":["../../src/tools/comprehensive-code-review.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAkBH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCvC,CAAC;AAEF,wBAAsB,6BAA6B,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;kBAQ1B,MAAM;kBAAY,MAAM;iBAAW,MAAM;mBAAa,MAAM;;;;;;;;;;;;GAoHlG"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: comprehensive_code_review
|
|
3
|
+
*
|
|
4
|
+
* One-stop code review that bundles ALL code analysis tools:
|
|
5
|
+
* - Security scanning (SQL injection, XSS, secrets, eval)
|
|
6
|
+
* - Code quality (console.logs, TODOs, error handling)
|
|
7
|
+
* - Code smell detection (complexity, bloat, over-engineering)
|
|
8
|
+
* - AI error prevention (hallucinated APIs, build context issues)
|
|
9
|
+
*
|
|
10
|
+
* User just says "review this code" and gets everything.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
import { handleScanSecurity } from './scan-security.js';
|
|
14
|
+
import { handlePreReviewCode } from './pre-review-code.js';
|
|
15
|
+
import { handleDetectCodeSmell } from './detect-code-smell.js';
|
|
16
|
+
import { handlePreventAIErrors } from './prevent-ai-errors.js';
|
|
17
|
+
import { logger } from '../utils/logger.js';
|
|
18
|
+
const ComprehensiveCodeReviewInputSchema = z.object({
|
|
19
|
+
code: z.string().describe('Code to review'),
|
|
20
|
+
language: z.string().default('typescript').describe('Programming language'),
|
|
21
|
+
context: z.string().optional().describe('Additional context about the code'),
|
|
22
|
+
auto_fix: z.boolean().default(false).describe('Attempt to auto-fix issues'),
|
|
23
|
+
focus: z.array(z.enum(['security', 'quality', 'smell', 'ai-errors'])).optional()
|
|
24
|
+
.describe('Focus areas (all if not specified)'),
|
|
25
|
+
});
|
|
26
|
+
export const comprehensiveCodeReviewTool = {
|
|
27
|
+
name: 'comprehensive_code_review',
|
|
28
|
+
description: 'Complete code review in one call: security vulnerabilities, code quality issues, code smells, and AI-generated errors. Just provide the code - no need to call multiple tools.',
|
|
29
|
+
annotations: {
|
|
30
|
+
readOnlyHint: true,
|
|
31
|
+
destructiveHint: false,
|
|
32
|
+
openWorldHint: false,
|
|
33
|
+
},
|
|
34
|
+
inputSchema: {
|
|
35
|
+
type: 'object',
|
|
36
|
+
properties: {
|
|
37
|
+
code: {
|
|
38
|
+
type: 'string',
|
|
39
|
+
description: 'Code to review',
|
|
40
|
+
},
|
|
41
|
+
language: {
|
|
42
|
+
type: 'string',
|
|
43
|
+
description: 'Programming language (default: typescript)',
|
|
44
|
+
},
|
|
45
|
+
context: {
|
|
46
|
+
type: 'string',
|
|
47
|
+
description: 'Additional context about the code',
|
|
48
|
+
},
|
|
49
|
+
auto_fix: {
|
|
50
|
+
type: 'boolean',
|
|
51
|
+
description: 'Attempt to auto-fix issues (default: false)',
|
|
52
|
+
},
|
|
53
|
+
focus: {
|
|
54
|
+
type: 'array',
|
|
55
|
+
items: { type: 'string', enum: ['security', 'quality', 'smell', 'ai-errors'] },
|
|
56
|
+
description: 'Focus areas (all if not specified)',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
required: ['code'],
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
export async function handleComprehensiveCodeReview(args) {
|
|
63
|
+
try {
|
|
64
|
+
const input = ComprehensiveCodeReviewInputSchema.parse(args);
|
|
65
|
+
const focus = input.focus || ['security', 'quality', 'smell', 'ai-errors'];
|
|
66
|
+
logger.info('Running comprehensive code review');
|
|
67
|
+
const results = {};
|
|
68
|
+
const allIssues = [];
|
|
69
|
+
// Run all relevant checks in parallel
|
|
70
|
+
const checks = await Promise.allSettled([
|
|
71
|
+
focus.includes('security') ? handleScanSecurity({ code: input.code, language: input.language }) : null,
|
|
72
|
+
focus.includes('quality') ? handlePreReviewCode({ code: input.code, language: input.language }) : null,
|
|
73
|
+
focus.includes('smell') ? handleDetectCodeSmell({ code: input.code, language: input.language }) : null,
|
|
74
|
+
focus.includes('ai-errors') ? handlePreventAIErrors({
|
|
75
|
+
code: input.code,
|
|
76
|
+
language: input.language,
|
|
77
|
+
auto_fix: input.auto_fix,
|
|
78
|
+
check_build_context: true
|
|
79
|
+
}) : null,
|
|
80
|
+
]);
|
|
81
|
+
// Process security results
|
|
82
|
+
if (focus.includes('security') && checks[0].status === 'fulfilled' && checks[0].value) {
|
|
83
|
+
const security = checks[0].value;
|
|
84
|
+
results.security = security;
|
|
85
|
+
if (Array.isArray(security.vulnerabilities)) {
|
|
86
|
+
security.vulnerabilities.forEach((v) => {
|
|
87
|
+
allIssues.push({
|
|
88
|
+
category: 'security',
|
|
89
|
+
severity: v.severity || 'high',
|
|
90
|
+
message: `${v.type}: ${v.description}`,
|
|
91
|
+
location: v.line ? `Line ${v.line}` : undefined,
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// Process quality results
|
|
97
|
+
if (focus.includes('quality') && checks[1].status === 'fulfilled' && checks[1].value) {
|
|
98
|
+
const quality = checks[1].value;
|
|
99
|
+
results.quality = quality;
|
|
100
|
+
if (Array.isArray(quality.issues)) {
|
|
101
|
+
quality.issues.forEach((i) => {
|
|
102
|
+
allIssues.push({
|
|
103
|
+
category: 'quality',
|
|
104
|
+
severity: i.severity || 'medium',
|
|
105
|
+
message: i.message || i.type,
|
|
106
|
+
location: i.line ? `Line ${i.line}` : undefined,
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Process code smell results
|
|
112
|
+
if (focus.includes('smell') && checks[2].status === 'fulfilled' && checks[2].value) {
|
|
113
|
+
const smell = checks[2].value;
|
|
114
|
+
results.smell = smell;
|
|
115
|
+
if (Array.isArray(smell.issues)) {
|
|
116
|
+
smell.issues.forEach((i) => {
|
|
117
|
+
allIssues.push({
|
|
118
|
+
category: 'smell',
|
|
119
|
+
severity: i.severity || 'low',
|
|
120
|
+
message: i.message || i.type,
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
// Process AI error results
|
|
126
|
+
if (focus.includes('ai-errors') && checks[3].status === 'fulfilled' && checks[3].value) {
|
|
127
|
+
const aiErrors = checks[3].value;
|
|
128
|
+
results.ai_errors = aiErrors;
|
|
129
|
+
if (Array.isArray(aiErrors.errors)) {
|
|
130
|
+
aiErrors.errors.forEach((e) => {
|
|
131
|
+
allIssues.push({
|
|
132
|
+
category: 'ai-error',
|
|
133
|
+
severity: e.impact || 'high',
|
|
134
|
+
message: `${e.name}: ${e.description}`,
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Calculate summary
|
|
140
|
+
const criticalCount = allIssues.filter(i => i.severity === 'critical').length;
|
|
141
|
+
const highCount = allIssues.filter(i => i.severity === 'high').length;
|
|
142
|
+
const mediumCount = allIssues.filter(i => i.severity === 'medium' || i.severity === 'low').length;
|
|
143
|
+
const overallRisk = criticalCount > 0 ? 'critical'
|
|
144
|
+
: highCount > 0 ? 'high'
|
|
145
|
+
: mediumCount > 0 ? 'medium'
|
|
146
|
+
: 'low';
|
|
147
|
+
const recommendation = criticalCount > 0
|
|
148
|
+
? '🚨 DO NOT USE - Critical issues found. Fix before proceeding.'
|
|
149
|
+
: highCount > 0
|
|
150
|
+
? '⚠️ CAUTION - High severity issues found. Review and fix recommended.'
|
|
151
|
+
: mediumCount > 0
|
|
152
|
+
? '📝 Minor issues found. Consider addressing before merge.'
|
|
153
|
+
: '✅ Code looks good!';
|
|
154
|
+
return {
|
|
155
|
+
success: true,
|
|
156
|
+
summary: {
|
|
157
|
+
total_issues: allIssues.length,
|
|
158
|
+
critical: criticalCount,
|
|
159
|
+
high: highCount,
|
|
160
|
+
medium_low: mediumCount,
|
|
161
|
+
overall_risk: overallRisk,
|
|
162
|
+
recommendation,
|
|
163
|
+
},
|
|
164
|
+
issues: allIssues,
|
|
165
|
+
details: results,
|
|
166
|
+
checks_performed: focus,
|
|
167
|
+
};
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
logger.error('Error in comprehensive_code_review:', error);
|
|
171
|
+
return {
|
|
172
|
+
success: false,
|
|
173
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=comprehensive-code-review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comprehensive-code-review.js","sourceRoot":"","sources":["../../src/tools/comprehensive-code-review.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: comprehensive_package_audit
|
|
3
|
+
*
|
|
4
|
+
* One-stop package/dependency audit that bundles:
|
|
5
|
+
* - Package validation (typosquatting, existence, legitimacy)
|
|
6
|
+
* - Version checking (outdated, deprecated, security vulnerabilities)
|
|
7
|
+
* - Upgrade report generation (breaking changes, migration guides)
|
|
8
|
+
*
|
|
9
|
+
* User just says "audit my dependencies" and gets everything.
|
|
10
|
+
*/
|
|
11
|
+
export declare const comprehensivePackageAuditTool: {
|
|
12
|
+
name: string;
|
|
13
|
+
description: string;
|
|
14
|
+
annotations: {
|
|
15
|
+
readOnlyHint: boolean;
|
|
16
|
+
destructiveHint: boolean;
|
|
17
|
+
openWorldHint: boolean;
|
|
18
|
+
};
|
|
19
|
+
inputSchema: {
|
|
20
|
+
type: string;
|
|
21
|
+
properties: {
|
|
22
|
+
packages: {
|
|
23
|
+
type: string;
|
|
24
|
+
items: {
|
|
25
|
+
type: string;
|
|
26
|
+
};
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
registry: {
|
|
30
|
+
type: string;
|
|
31
|
+
enum: string[];
|
|
32
|
+
description: string;
|
|
33
|
+
};
|
|
34
|
+
include_upgrade_reports: {
|
|
35
|
+
type: string;
|
|
36
|
+
description: string;
|
|
37
|
+
};
|
|
38
|
+
current_versions: {
|
|
39
|
+
type: string;
|
|
40
|
+
additionalProperties: {
|
|
41
|
+
type: string;
|
|
42
|
+
};
|
|
43
|
+
description: string;
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
required: string[];
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
export declare function handleComprehensivePackageAudit(args: unknown): Promise<{
|
|
50
|
+
success: boolean;
|
|
51
|
+
summary: {
|
|
52
|
+
total_packages: number;
|
|
53
|
+
safe: number;
|
|
54
|
+
suspicious: number;
|
|
55
|
+
outdated: number;
|
|
56
|
+
vulnerable: number;
|
|
57
|
+
recommendation: string;
|
|
58
|
+
};
|
|
59
|
+
safe_packages: string[];
|
|
60
|
+
suspicious_packages: string[];
|
|
61
|
+
outdated_packages: string[];
|
|
62
|
+
vulnerable_packages: string[];
|
|
63
|
+
upgrade_reports: Record<string, unknown>;
|
|
64
|
+
error?: undefined;
|
|
65
|
+
} | {
|
|
66
|
+
success: boolean;
|
|
67
|
+
error: string;
|
|
68
|
+
summary?: undefined;
|
|
69
|
+
safe_packages?: undefined;
|
|
70
|
+
suspicious_packages?: undefined;
|
|
71
|
+
outdated_packages?: undefined;
|
|
72
|
+
vulnerable_packages?: undefined;
|
|
73
|
+
upgrade_reports?: undefined;
|
|
74
|
+
}>;
|
|
75
|
+
//# sourceMappingURL=comprehensive-package-audit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comprehensive-package-audit.d.ts","sourceRoot":"","sources":["../../src/tools/comprehensive-package-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAeH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCzC,CAAC;AAEF,wBAAsB,+BAA+B,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;GAsHlE"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: comprehensive_package_audit
|
|
3
|
+
*
|
|
4
|
+
* One-stop package/dependency audit that bundles:
|
|
5
|
+
* - Package validation (typosquatting, existence, legitimacy)
|
|
6
|
+
* - Version checking (outdated, deprecated, security vulnerabilities)
|
|
7
|
+
* - Upgrade report generation (breaking changes, migration guides)
|
|
8
|
+
*
|
|
9
|
+
* User just says "audit my dependencies" and gets everything.
|
|
10
|
+
*/
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
import { handleValidatePackages } from './validate_packages.js';
|
|
13
|
+
import { handleCheckVersions } from './check-versions.js';
|
|
14
|
+
import { handleGenerateUpgradeReport } from './generate-upgrade-report.js';
|
|
15
|
+
import { logger } from '../utils/logger.js';
|
|
16
|
+
const ComprehensivePackageAuditInputSchema = z.object({
|
|
17
|
+
packages: z.array(z.string()).describe('List of packages to audit'),
|
|
18
|
+
registry: z.enum(['npm', 'pypi', 'maven', 'cargo', 'go', 'nuget', 'gem']).default('npm'),
|
|
19
|
+
include_upgrade_reports: z.boolean().default(true).describe('Generate upgrade reports for outdated packages'),
|
|
20
|
+
current_versions: z.record(z.string()).optional().describe('Map of package name to current version'),
|
|
21
|
+
});
|
|
22
|
+
export const comprehensivePackageAuditTool = {
|
|
23
|
+
name: 'comprehensive_package_audit',
|
|
24
|
+
description: 'Complete dependency audit in one call: validates packages exist and are safe, checks for outdated versions and vulnerabilities, generates upgrade reports with migration guides. Just provide package names.',
|
|
25
|
+
annotations: {
|
|
26
|
+
readOnlyHint: true,
|
|
27
|
+
destructiveHint: false,
|
|
28
|
+
openWorldHint: true, // Makes network requests
|
|
29
|
+
},
|
|
30
|
+
inputSchema: {
|
|
31
|
+
type: 'object',
|
|
32
|
+
properties: {
|
|
33
|
+
packages: {
|
|
34
|
+
type: 'array',
|
|
35
|
+
items: { type: 'string' },
|
|
36
|
+
description: 'List of packages to audit',
|
|
37
|
+
},
|
|
38
|
+
registry: {
|
|
39
|
+
type: 'string',
|
|
40
|
+
enum: ['npm', 'pypi', 'maven', 'cargo', 'go', 'nuget', 'gem'],
|
|
41
|
+
description: 'Package registry (default: npm)',
|
|
42
|
+
},
|
|
43
|
+
include_upgrade_reports: {
|
|
44
|
+
type: 'boolean',
|
|
45
|
+
description: 'Generate upgrade reports for outdated packages (default: true)',
|
|
46
|
+
},
|
|
47
|
+
current_versions: {
|
|
48
|
+
type: 'object',
|
|
49
|
+
additionalProperties: { type: 'string' },
|
|
50
|
+
description: 'Map of package name to current version',
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
required: ['packages'],
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
export async function handleComprehensivePackageAudit(args) {
|
|
57
|
+
try {
|
|
58
|
+
const input = ComprehensivePackageAuditInputSchema.parse(args);
|
|
59
|
+
logger.info(`Running comprehensive package audit for ${input.packages.length} packages`);
|
|
60
|
+
const results = {
|
|
61
|
+
safe: [],
|
|
62
|
+
suspicious: [],
|
|
63
|
+
outdated: [],
|
|
64
|
+
vulnerable: [],
|
|
65
|
+
upgrade_reports: {},
|
|
66
|
+
};
|
|
67
|
+
// Step 1: Validate all packages exist and are legitimate
|
|
68
|
+
const validationResult = await handleValidatePackages({
|
|
69
|
+
packages: input.packages,
|
|
70
|
+
registry: input.registry,
|
|
71
|
+
});
|
|
72
|
+
if (validationResult.results && typeof validationResult.results === 'object') {
|
|
73
|
+
const validationResults = validationResult.results;
|
|
74
|
+
for (const [pkg, result] of Object.entries(validationResults)) {
|
|
75
|
+
if (!result.valid) {
|
|
76
|
+
results.suspicious.push(pkg);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Step 2: Check versions for all packages
|
|
81
|
+
const versionResult = await handleCheckVersions({
|
|
82
|
+
packages: input.packages.map(p => ({
|
|
83
|
+
name: p,
|
|
84
|
+
currentVersion: input.current_versions?.[p],
|
|
85
|
+
})),
|
|
86
|
+
registry: input.registry,
|
|
87
|
+
});
|
|
88
|
+
if (Array.isArray(versionResult.results)) {
|
|
89
|
+
for (const pkg of versionResult.results) {
|
|
90
|
+
if (pkg.isOutdated) {
|
|
91
|
+
results.outdated.push(pkg.package);
|
|
92
|
+
}
|
|
93
|
+
if (pkg.securityVulnerabilities && pkg.securityVulnerabilities.length > 0) {
|
|
94
|
+
results.vulnerable.push(pkg.package);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
// Step 3: Generate upgrade reports for outdated/vulnerable packages
|
|
99
|
+
if (input.include_upgrade_reports) {
|
|
100
|
+
const packagesToReport = [...new Set([...results.outdated, ...results.vulnerable])];
|
|
101
|
+
for (const pkg of packagesToReport.slice(0, 5)) { // Limit to 5 to avoid timeout
|
|
102
|
+
try {
|
|
103
|
+
const report = await handleGenerateUpgradeReport({
|
|
104
|
+
package_name: pkg,
|
|
105
|
+
current_version: input.current_versions?.[pkg],
|
|
106
|
+
registry: input.registry,
|
|
107
|
+
});
|
|
108
|
+
results.upgrade_reports[pkg] = report;
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
logger.warn(`Failed to generate upgrade report for ${pkg}:`, err);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Determine safe packages
|
|
116
|
+
const problematic = new Set([...results.suspicious, ...results.outdated, ...results.vulnerable]);
|
|
117
|
+
results.safe = input.packages.filter(p => !problematic.has(p));
|
|
118
|
+
// Calculate summary
|
|
119
|
+
const recommendation = results.vulnerable.length > 0
|
|
120
|
+
? '🚨 SECURITY VULNERABILITIES - Update vulnerable packages immediately.'
|
|
121
|
+
: results.suspicious.length > 0
|
|
122
|
+
? '⚠️ SUSPICIOUS PACKAGES - Review and verify before using.'
|
|
123
|
+
: results.outdated.length > 0
|
|
124
|
+
? '📦 OUTDATED - Consider updating for latest features and fixes.'
|
|
125
|
+
: '✅ All packages look good!';
|
|
126
|
+
return {
|
|
127
|
+
success: true,
|
|
128
|
+
summary: {
|
|
129
|
+
total_packages: input.packages.length,
|
|
130
|
+
safe: results.safe.length,
|
|
131
|
+
suspicious: results.suspicious.length,
|
|
132
|
+
outdated: results.outdated.length,
|
|
133
|
+
vulnerable: results.vulnerable.length,
|
|
134
|
+
recommendation,
|
|
135
|
+
},
|
|
136
|
+
safe_packages: results.safe,
|
|
137
|
+
suspicious_packages: results.suspicious,
|
|
138
|
+
outdated_packages: results.outdated,
|
|
139
|
+
vulnerable_packages: results.vulnerable,
|
|
140
|
+
upgrade_reports: results.upgrade_reports,
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
logger.error('Error in comprehensive_package_audit:', error);
|
|
145
|
+
return {
|
|
146
|
+
success: false,
|
|
147
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=comprehensive-package-audit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"comprehensive-package-audit.js","sourceRoot":"","sources":["../../src/tools/comprehensive-package-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,MAAM,oCAAoC,GAAG,CAAC,CAAC,MAAM,CAAC;IACpD,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACnE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IACxF,uBAAuB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,gDAAgD,CAAC;IAC7G,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CACrG,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,6BAA6B,GAAG;IAC3C,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,8MAA8M;IAC3N,WAAW,EAAE;QACX,YAAY,EAAE,IAAI;QAClB,eAAe,EAAE,KAAK;QACtB,aAAa,EAAE,IAAI,EAAE,yBAAyB;KAC/C;IACD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,QAAQ,EAAE;gBACR,IAAI,EAAE,OAAO;gBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACzB,WAAW,EAAE,2BAA2B;aACzC;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC;gBAC7D,WAAW,EAAE,iCAAiC;aAC/C;YACD,uBAAuB,EAAE;gBACvB,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,gEAAgE;aAC9E;YACD,gBAAgB,EAAE;gBAChB,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACxC,WAAW,EAAE,wCAAwC;aACtD;SACF;QACD,QAAQ,EAAE,CAAC,UAAU,CAAC;KACvB;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,+BAA+B,CAAC,IAAa;IACjE,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,oCAAoC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAE/D,MAAM,CAAC,IAAI,CAAC,2CAA2C,KAAK,CAAC,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;QAEzF,MAAM,OAAO,GAMT;YACF,IAAI,EAAE,EAAE;YACR,UAAU,EAAE,EAAE;YACd,QAAQ,EAAE,EAAE;YACZ,UAAU,EAAE,EAAE;YACd,eAAe,EAAE,EAAE;SACpB,CAAC;QAEF,yDAAyD;QACzD,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,CAAC;YACpD,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAA4B,CAAC;QAE9B,IAAI,gBAAgB,CAAC,OAAO,IAAI,OAAO,gBAAgB,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YAC7E,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,OAIzC,CAAC;YAEH,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC9D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;oBAClB,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;QACH,CAAC;QAED,0CAA0C;QAC1C,MAAM,aAAa,GAAG,MAAM,mBAAmB,CAAC;YAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACjC,IAAI,EAAE,CAAC;gBACP,cAAc,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC;aAC5C,CAAC,CAAC;YACH,QAAQ,EAAE,KAAK,CAAC,QAAQ;SACzB,CAA4B,CAAC;QAE9B,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,KAAK,MAAM,GAAG,IAAI,aAAa,CAAC,OAI9B,EAAE,CAAC;gBACH,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;oBACnB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrC,CAAC;gBACD,IAAI,GAAG,CAAC,uBAAuB,IAAI,GAAG,CAAC,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBAC1E,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QAED,oEAAoE;QACpE,IAAI,KAAK,CAAC,uBAAuB,EAAE,CAAC;YAClC,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;YAEpF,KAAK,MAAM,GAAG,IAAI,gBAAgB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,8BAA8B;gBAC9E,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC;wBAC/C,YAAY,EAAE,GAAG;wBACjB,eAAe,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,GAAG,CAAC;wBAC9C,QAAQ,EAAE,KAAK,CAAC,QAAQ;qBACzB,CAAC,CAAC;oBACH,OAAO,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC;gBACxC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,CAAC,IAAI,CAAC,yCAAyC,GAAG,GAAG,EAAE,GAAG,CAAC,CAAC;gBACpE,CAAC;YACH,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,UAAU,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;QACjG,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAE/D,oBAAoB;QACpB,MAAM,cAAc,GAAG,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;YAClD,CAAC,CAAC,uEAAuE;YACzE,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;gBAC/B,CAAC,CAAC,0DAA0D;gBAC5D,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;oBAC7B,CAAC,CAAC,gEAAgE;oBAClE,CAAC,CAAC,2BAA2B,CAAC;QAEhC,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE;gBACP,cAAc,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;gBACrC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM;gBACzB,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM;gBACrC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM;gBACjC,UAAU,EAAE,OAAO,CAAC,UAAU,CAAC,MAAM;gBACrC,cAAc;aACf;YACD,aAAa,EAAE,OAAO,CAAC,IAAI;YAC3B,mBAAmB,EAAE,OAAO,CAAC,UAAU;YACvC,iBAAiB,EAAE,OAAO,CAAC,QAAQ;YACnC,mBAAmB,EAAE,OAAO,CAAC,UAAU;YACvC,eAAe,EAAE,OAAO,CAAC,eAAe;SACzC,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,uCAAuC,EAAE,KAAK,CAAC,CAAC;QAC7D,OAAO;YACL,OAAO,EAAE,KAAK;YACd,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;SAChE,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: detect_build_context
|
|
3
|
+
*
|
|
4
|
+
* Detects project configuration to prevent AI agents from making incorrect assumptions.
|
|
5
|
+
* Prevents "Build Context Blindness" - when AI generates code incompatible with the project setup.
|
|
6
|
+
*/
|
|
7
|
+
export declare const detectBuildContextTool: {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
annotations: {
|
|
11
|
+
readOnlyHint: boolean;
|
|
12
|
+
destructiveHint: boolean;
|
|
13
|
+
openWorldHint: boolean;
|
|
14
|
+
};
|
|
15
|
+
inputSchema: {
|
|
16
|
+
type: string;
|
|
17
|
+
properties: {
|
|
18
|
+
project_root: {
|
|
19
|
+
type: string;
|
|
20
|
+
description: string;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
required: never[];
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export declare function handleDetectBuildContext(args: unknown): Promise<{
|
|
27
|
+
success: boolean;
|
|
28
|
+
context: {
|
|
29
|
+
language: "unknown" | "javascript" | "typescript" | "python" | "java";
|
|
30
|
+
module_system: "commonjs" | "esm" | "umd" | "amd" | undefined;
|
|
31
|
+
package_manager: "npm" | "yarn" | "pnpm" | "pip" | "maven" | "gradle" | undefined;
|
|
32
|
+
build_tool: string | undefined;
|
|
33
|
+
typescript_config: {
|
|
34
|
+
moduleResolution?: string;
|
|
35
|
+
module?: string;
|
|
36
|
+
target?: string;
|
|
37
|
+
strict?: boolean;
|
|
38
|
+
esModuleInterop?: boolean;
|
|
39
|
+
} | undefined;
|
|
40
|
+
python_version: string | undefined;
|
|
41
|
+
node_version: string | undefined;
|
|
42
|
+
has_typescript: boolean;
|
|
43
|
+
requires_js_extensions: boolean;
|
|
44
|
+
};
|
|
45
|
+
errors: string[];
|
|
46
|
+
warnings: string[];
|
|
47
|
+
ai_guidance: string[];
|
|
48
|
+
summary: string;
|
|
49
|
+
error?: undefined;
|
|
50
|
+
} | {
|
|
51
|
+
success: boolean;
|
|
52
|
+
error: string;
|
|
53
|
+
context?: undefined;
|
|
54
|
+
errors?: undefined;
|
|
55
|
+
warnings?: undefined;
|
|
56
|
+
ai_guidance?: undefined;
|
|
57
|
+
summary?: undefined;
|
|
58
|
+
}>;
|
|
59
|
+
//# sourceMappingURL=detect-build-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-build-context.d.ts","sourceRoot":"","sources":["../../src/tools/detect-build-context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;CAkBlC,CAAC;AAEF,wBAAsB,wBAAwB,CAAC,IAAI,EAAE,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkC3D"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool: detect_build_context
|
|
3
|
+
*
|
|
4
|
+
* Detects project configuration to prevent AI agents from making incorrect assumptions.
|
|
5
|
+
* Prevents "Build Context Blindness" - when AI generates code incompatible with the project setup.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
import { BuildContextDetector } from '../developer/evaluators/build-context-detector.js';
|
|
9
|
+
import { logger } from '../utils/logger.js';
|
|
10
|
+
const DetectBuildContextInputSchema = z.object({
|
|
11
|
+
project_root: z.string().optional().describe('Project root path (default: current directory)'),
|
|
12
|
+
});
|
|
13
|
+
export const detectBuildContextTool = {
|
|
14
|
+
name: 'detect_build_context',
|
|
15
|
+
description: 'Detects project build context (module system, TypeScript config, package manager, etc.) to ensure AI-generated code is compatible. Prevents common errors like wrong import syntax, missing extensions, or incompatible APIs.',
|
|
16
|
+
annotations: {
|
|
17
|
+
readOnlyHint: true,
|
|
18
|
+
destructiveHint: false,
|
|
19
|
+
openWorldHint: false,
|
|
20
|
+
},
|
|
21
|
+
inputSchema: {
|
|
22
|
+
type: 'object',
|
|
23
|
+
properties: {
|
|
24
|
+
project_root: {
|
|
25
|
+
type: 'string',
|
|
26
|
+
description: 'Project root path (default: current directory)',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
required: [],
|
|
30
|
+
},
|
|
31
|
+
};
|
|
32
|
+
export async function handleDetectBuildContext(args) {
|
|
33
|
+
try {
|
|
34
|
+
const input = DetectBuildContextInputSchema.parse(args);
|
|
35
|
+
logger.info('Detecting build context');
|
|
36
|
+
const detector = new BuildContextDetector(input.project_root);
|
|
37
|
+
const context = await detector.detect();
|
|
38
|
+
return {
|
|
39
|
+
success: true,
|
|
40
|
+
context: {
|
|
41
|
+
language: context.language,
|
|
42
|
+
module_system: context.moduleSystem,
|
|
43
|
+
package_manager: context.packageManager,
|
|
44
|
+
build_tool: context.buildTool,
|
|
45
|
+
typescript_config: context.tsConfig,
|
|
46
|
+
python_version: context.pythonVersion,
|
|
47
|
+
node_version: context.nodeVersion,
|
|
48
|
+
has_typescript: context.hasTypeScript,
|
|
49
|
+
requires_js_extensions: context.requiresJsExtensions,
|
|
50
|
+
},
|
|
51
|
+
errors: context.errors,
|
|
52
|
+
warnings: context.warnings,
|
|
53
|
+
ai_guidance: context.aiGuidance,
|
|
54
|
+
summary: generateSummary(context),
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
logger.error('Error in detect_build_context:', error);
|
|
59
|
+
return {
|
|
60
|
+
success: false,
|
|
61
|
+
error: error instanceof Error ? error.message : 'Unknown error',
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function generateSummary(context) {
|
|
66
|
+
const parts = [];
|
|
67
|
+
parts.push(`Language: ${context.language}`);
|
|
68
|
+
if (context.moduleSystem)
|
|
69
|
+
parts.push(`Module System: ${context.moduleSystem.toUpperCase()}`);
|
|
70
|
+
if (context.hasTypeScript)
|
|
71
|
+
parts.push('TypeScript: Yes');
|
|
72
|
+
if (context.requiresJsExtensions)
|
|
73
|
+
parts.push('⚠️ Requires .js extensions in imports');
|
|
74
|
+
if (context.aiGuidance.length > 0) {
|
|
75
|
+
parts.push('\nAI Guidance:');
|
|
76
|
+
context.aiGuidance.forEach(g => parts.push(` - ${g}`));
|
|
77
|
+
}
|
|
78
|
+
return parts.join('\n');
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=detect-build-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"detect-build-context.js","sourceRoot":"","sources":["../../src/tools/detect-build-context.ts"],"names":[],"mappings":"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"}
|