codeguardian-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +348 -0
- package/dist/agent/agentTools.d.ts +26 -0
- package/dist/agent/agentTools.d.ts.map +1 -0
- package/dist/agent/agentTools.js +699 -0
- package/dist/agent/agentTools.js.map +1 -0
- package/dist/agent/autoValidator.d.ts +110 -0
- package/dist/agent/autoValidator.d.ts.map +1 -0
- package/dist/agent/autoValidator.js +964 -0
- package/dist/agent/autoValidator.js.map +1 -0
- package/dist/agent/fileWatcher.d.ts +28 -0
- package/dist/agent/fileWatcher.d.ts.map +1 -0
- package/dist/agent/fileWatcher.js +88 -0
- package/dist/agent/fileWatcher.js.map +1 -0
- package/dist/agent/guardianPersistence.d.ts +98 -0
- package/dist/agent/guardianPersistence.d.ts.map +1 -0
- package/dist/agent/guardianPersistence.js +296 -0
- package/dist/agent/guardianPersistence.js.map +1 -0
- package/dist/agent/mcpNotifications.d.ts +38 -0
- package/dist/agent/mcpNotifications.d.ts.map +1 -0
- package/dist/agent/mcpNotifications.js +81 -0
- package/dist/agent/mcpNotifications.js.map +1 -0
- package/dist/analyzers/aiPatterns.d.ts +16 -0
- package/dist/analyzers/aiPatterns.d.ts.map +1 -0
- package/dist/analyzers/aiPatterns.js +103 -0
- package/dist/analyzers/aiPatterns.js.map +1 -0
- package/dist/analyzers/antiPatterns.d.ts +60 -0
- package/dist/analyzers/antiPatterns.d.ts.map +1 -0
- package/dist/analyzers/antiPatterns.js +198 -0
- package/dist/analyzers/antiPatterns.js.map +1 -0
- package/dist/analyzers/builtinTypes.d.ts +18 -0
- package/dist/analyzers/builtinTypes.d.ts.map +1 -0
- package/dist/analyzers/builtinTypes.js +1275 -0
- package/dist/analyzers/builtinTypes.js.map +1 -0
- package/dist/analyzers/complexity.d.ts +14 -0
- package/dist/analyzers/complexity.d.ts.map +1 -0
- package/dist/analyzers/complexity.js +610 -0
- package/dist/analyzers/complexity.js.map +1 -0
- package/dist/analyzers/findingVerifier.d.ts +59 -0
- package/dist/analyzers/findingVerifier.d.ts.map +1 -0
- package/dist/analyzers/findingVerifier.js +1169 -0
- package/dist/analyzers/findingVerifier.js.map +1 -0
- package/dist/analyzers/impactAnalyzer.d.ts +53 -0
- package/dist/analyzers/impactAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/impactAnalyzer.js +152 -0
- package/dist/analyzers/impactAnalyzer.js.map +1 -0
- package/dist/analyzers/languageDetector.d.ts +48 -0
- package/dist/analyzers/languageDetector.d.ts.map +1 -0
- package/dist/analyzers/languageDetector.js +404 -0
- package/dist/analyzers/languageDetector.js.map +1 -0
- package/dist/analyzers/parsers/incrementalParser.d.ts +53 -0
- package/dist/analyzers/parsers/incrementalParser.d.ts.map +1 -0
- package/dist/analyzers/parsers/incrementalParser.js +193 -0
- package/dist/analyzers/parsers/incrementalParser.js.map +1 -0
- package/dist/analyzers/parsers/scopeResolver.d.ts +92 -0
- package/dist/analyzers/parsers/scopeResolver.d.ts.map +1 -0
- package/dist/analyzers/parsers/scopeResolver.js +324 -0
- package/dist/analyzers/parsers/scopeResolver.js.map +1 -0
- package/dist/analyzers/parsers/semanticIndex.d.ts +127 -0
- package/dist/analyzers/parsers/semanticIndex.d.ts.map +1 -0
- package/dist/analyzers/parsers/semanticIndex.js +429 -0
- package/dist/analyzers/parsers/semanticIndex.js.map +1 -0
- package/dist/analyzers/parsers/sessionDiffAnalyzer.d.ts +42 -0
- package/dist/analyzers/parsers/sessionDiffAnalyzer.d.ts.map +1 -0
- package/dist/analyzers/parsers/sessionDiffAnalyzer.js +233 -0
- package/dist/analyzers/parsers/sessionDiffAnalyzer.js.map +1 -0
- package/dist/analyzers/parsers/treeSitterParser.d.ts +76 -0
- package/dist/analyzers/parsers/treeSitterParser.d.ts.map +1 -0
- package/dist/analyzers/parsers/treeSitterParser.js +709 -0
- package/dist/analyzers/parsers/treeSitterParser.js.map +1 -0
- package/dist/analyzers/relevanceScorer.d.ts +43 -0
- package/dist/analyzers/relevanceScorer.d.ts.map +1 -0
- package/dist/analyzers/relevanceScorer.js +200 -0
- package/dist/analyzers/relevanceScorer.js.map +1 -0
- package/dist/analyzers/standardLibrary.d.ts +22 -0
- package/dist/analyzers/standardLibrary.d.ts.map +1 -0
- package/dist/analyzers/standardLibrary.js +211 -0
- package/dist/analyzers/standardLibrary.js.map +1 -0
- package/dist/analyzers/symbolGraph.d.ts +30 -0
- package/dist/analyzers/symbolGraph.d.ts.map +1 -0
- package/dist/analyzers/symbolGraph.js +380 -0
- package/dist/analyzers/symbolGraph.js.map +1 -0
- package/dist/analyzers/symbolTable.d.ts +18 -0
- package/dist/analyzers/symbolTable.d.ts.map +1 -0
- package/dist/analyzers/symbolTable.js +176 -0
- package/dist/analyzers/symbolTable.js.map +1 -0
- package/dist/analyzers/typeChecker.d.ts +13 -0
- package/dist/analyzers/typeChecker.d.ts.map +1 -0
- package/dist/analyzers/typeChecker.js +580 -0
- package/dist/analyzers/typeChecker.js.map +1 -0
- package/dist/analyzers/usagePatterns.d.ts +42 -0
- package/dist/analyzers/usagePatterns.d.ts.map +1 -0
- package/dist/analyzers/usagePatterns.js +75 -0
- package/dist/analyzers/usagePatterns.js.map +1 -0
- package/dist/api-contract/context/backend.d.ts +19 -0
- package/dist/api-contract/context/backend.d.ts.map +1 -0
- package/dist/api-contract/context/backend.js +64 -0
- package/dist/api-contract/context/backend.js.map +1 -0
- package/dist/api-contract/context/contract.d.ts +34 -0
- package/dist/api-contract/context/contract.d.ts.map +1 -0
- package/dist/api-contract/context/contract.js +306 -0
- package/dist/api-contract/context/contract.js.map +1 -0
- package/dist/api-contract/context/frontend.d.ts +19 -0
- package/dist/api-contract/context/frontend.d.ts.map +1 -0
- package/dist/api-contract/context/frontend.js +64 -0
- package/dist/api-contract/context/frontend.js.map +1 -0
- package/dist/api-contract/detector.d.ts +28 -0
- package/dist/api-contract/detector.d.ts.map +1 -0
- package/dist/api-contract/detector.js +393 -0
- package/dist/api-contract/detector.js.map +1 -0
- package/dist/api-contract/extractors/python.d.ts +32 -0
- package/dist/api-contract/extractors/python.d.ts.map +1 -0
- package/dist/api-contract/extractors/python.js +521 -0
- package/dist/api-contract/extractors/python.js.map +1 -0
- package/dist/api-contract/extractors/pythonAstUtils.d.ts +44 -0
- package/dist/api-contract/extractors/pythonAstUtils.d.ts.map +1 -0
- package/dist/api-contract/extractors/pythonAstUtils.js +489 -0
- package/dist/api-contract/extractors/pythonAstUtils.js.map +1 -0
- package/dist/api-contract/extractors/tsAstUtils.d.ts +47 -0
- package/dist/api-contract/extractors/tsAstUtils.d.ts.map +1 -0
- package/dist/api-contract/extractors/tsAstUtils.js +173 -0
- package/dist/api-contract/extractors/tsAstUtils.js.map +1 -0
- package/dist/api-contract/extractors/typescript.d.ts +32 -0
- package/dist/api-contract/extractors/typescript.d.ts.map +1 -0
- package/dist/api-contract/extractors/typescript.js +666 -0
- package/dist/api-contract/extractors/typescript.js.map +1 -0
- package/dist/api-contract/index.d.ts +104 -0
- package/dist/api-contract/index.d.ts.map +1 -0
- package/dist/api-contract/index.js +232 -0
- package/dist/api-contract/index.js.map +1 -0
- package/dist/api-contract/types.d.ts +151 -0
- package/dist/api-contract/types.d.ts.map +1 -0
- package/dist/api-contract/types.js +19 -0
- package/dist/api-contract/types.js.map +1 -0
- package/dist/api-contract/validators/endpoint.d.ts +21 -0
- package/dist/api-contract/validators/endpoint.d.ts.map +1 -0
- package/dist/api-contract/validators/endpoint.js +224 -0
- package/dist/api-contract/validators/endpoint.js.map +1 -0
- package/dist/api-contract/validators/index.d.ts +40 -0
- package/dist/api-contract/validators/index.d.ts.map +1 -0
- package/dist/api-contract/validators/index.js +875 -0
- package/dist/api-contract/validators/index.js.map +1 -0
- package/dist/api-contract/validators/parameter.d.ts +17 -0
- package/dist/api-contract/validators/parameter.d.ts.map +1 -0
- package/dist/api-contract/validators/parameter.js +250 -0
- package/dist/api-contract/validators/parameter.js.map +1 -0
- package/dist/api-contract/validators/type.d.ts +38 -0
- package/dist/api-contract/validators/type.d.ts.map +1 -0
- package/dist/api-contract/validators/type.js +244 -0
- package/dist/api-contract/validators/type.js.map +1 -0
- package/dist/context/apiContract/complexTypeSupport.d.ts +83 -0
- package/dist/context/apiContract/complexTypeSupport.d.ts.map +1 -0
- package/dist/context/apiContract/complexTypeSupport.js +665 -0
- package/dist/context/apiContract/complexTypeSupport.js.map +1 -0
- package/dist/context/apiContract/graphqlSupport.d.ts +105 -0
- package/dist/context/apiContract/graphqlSupport.d.ts.map +1 -0
- package/dist/context/apiContract/graphqlSupport.js +671 -0
- package/dist/context/apiContract/graphqlSupport.js.map +1 -0
- package/dist/context/apiContract/index.d.ts +14 -0
- package/dist/context/apiContract/index.d.ts.map +1 -0
- package/dist/context/apiContract/index.js +17 -0
- package/dist/context/apiContract/index.js.map +1 -0
- package/dist/context/apiContract/webSocketSupport.d.ts +104 -0
- package/dist/context/apiContract/webSocketSupport.d.ts.map +1 -0
- package/dist/context/apiContract/webSocketSupport.js +465 -0
- package/dist/context/apiContract/webSocketSupport.js.map +1 -0
- package/dist/context/apiContractContext.d.ts +15 -0
- package/dist/context/apiContractContext.d.ts.map +1 -0
- package/dist/context/apiContractContext.js +979 -0
- package/dist/context/apiContractContext.js.map +1 -0
- package/dist/context/apiContractExtraction.d.ts +52 -0
- package/dist/context/apiContractExtraction.d.ts.map +1 -0
- package/dist/context/apiContractExtraction.js +438 -0
- package/dist/context/apiContractExtraction.js.map +1 -0
- package/dist/context/contextLineage.d.ts +79 -0
- package/dist/context/contextLineage.d.ts.map +1 -0
- package/dist/context/contextLineage.js +259 -0
- package/dist/context/contextLineage.js.map +1 -0
- package/dist/context/contextOrchestrator.d.ts +57 -0
- package/dist/context/contextOrchestrator.d.ts.map +1 -0
- package/dist/context/contextOrchestrator.js +162 -0
- package/dist/context/contextOrchestrator.js.map +1 -0
- package/dist/context/intentTracker.d.ts +73 -0
- package/dist/context/intentTracker.d.ts.map +1 -0
- package/dist/context/intentTracker.js +168 -0
- package/dist/context/intentTracker.js.map +1 -0
- package/dist/context/projectContext.d.ts +219 -0
- package/dist/context/projectContext.d.ts.map +1 -0
- package/dist/context/projectContext.js +1984 -0
- package/dist/context/projectContext.js.map +1 -0
- package/dist/prompts/index.d.ts +17 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +260 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/library.d.ts +51 -0
- package/dist/prompts/library.d.ts.map +1 -0
- package/dist/prompts/library.js +65 -0
- package/dist/prompts/library.js.map +1 -0
- package/dist/prompts/templates.d.ts +44 -0
- package/dist/prompts/templates.d.ts.map +1 -0
- package/dist/prompts/templates.js +97 -0
- package/dist/prompts/templates.js.map +1 -0
- package/dist/queue/jobPersistence.d.ts +46 -0
- package/dist/queue/jobPersistence.d.ts.map +1 -0
- package/dist/queue/jobPersistence.js +158 -0
- package/dist/queue/jobPersistence.js.map +1 -0
- package/dist/queue/jobQueue.d.ts +116 -0
- package/dist/queue/jobQueue.d.ts.map +1 -0
- package/dist/queue/jobQueue.js +275 -0
- package/dist/queue/jobQueue.js.map +1 -0
- package/dist/queue/validationJob.d.ts +69 -0
- package/dist/queue/validationJob.d.ts.map +1 -0
- package/dist/queue/validationJob.js +435 -0
- package/dist/queue/validationJob.js.map +1 -0
- package/dist/resources/index.d.ts +15 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +328 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/validationReportStore.d.ts +170 -0
- package/dist/resources/validationReportStore.d.ts.map +1 -0
- package/dist/resources/validationReportStore.js +515 -0
- package/dist/resources/validationReportStore.js.map +1 -0
- package/dist/server.d.ts +12 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +102 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/asyncValidation.d.ts +19 -0
- package/dist/tools/asyncValidation.d.ts.map +1 -0
- package/dist/tools/asyncValidation.js +346 -0
- package/dist/tools/asyncValidation.js.map +1 -0
- package/dist/tools/buildContext.d.ts +17 -0
- package/dist/tools/buildContext.d.ts.map +1 -0
- package/dist/tools/buildContext.js +188 -0
- package/dist/tools/buildContext.js.map +1 -0
- package/dist/tools/getDependencyGraph.d.ts +16 -0
- package/dist/tools/getDependencyGraph.d.ts.map +1 -0
- package/dist/tools/getDependencyGraph.js +436 -0
- package/dist/tools/getDependencyGraph.js.map +1 -0
- package/dist/tools/incrementalValidation.d.ts +71 -0
- package/dist/tools/incrementalValidation.d.ts.map +1 -0
- package/dist/tools/incrementalValidation.js +203 -0
- package/dist/tools/incrementalValidation.js.map +1 -0
- package/dist/tools/index.d.ts +24 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +106 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/validateCode.d.ts +17 -0
- package/dist/tools/validateCode.d.ts.map +1 -0
- package/dist/tools/validateCode.js +368 -0
- package/dist/tools/validateCode.js.map +1 -0
- package/dist/tools/validateCodeLite.d.ts +2 -0
- package/dist/tools/validateCodeLite.d.ts.map +1 -0
- package/dist/tools/validateCodeLite.js +2 -0
- package/dist/tools/validateCodeLite.js.map +1 -0
- package/dist/tools/validation/builtins.d.ts +92 -0
- package/dist/tools/validation/builtins.d.ts.map +1 -0
- package/dist/tools/validation/builtins.js +2184 -0
- package/dist/tools/validation/builtins.js.map +1 -0
- package/dist/tools/validation/contextualNaming.d.ts +99 -0
- package/dist/tools/validation/contextualNaming.d.ts.map +1 -0
- package/dist/tools/validation/contextualNaming.js +959 -0
- package/dist/tools/validation/contextualNaming.js.map +1 -0
- package/dist/tools/validation/deadCode.d.ts +115 -0
- package/dist/tools/validation/deadCode.d.ts.map +1 -0
- package/dist/tools/validation/deadCode.js +861 -0
- package/dist/tools/validation/deadCode.js.map +1 -0
- package/dist/tools/validation/extractors/index.d.ts +131 -0
- package/dist/tools/validation/extractors/index.d.ts.map +1 -0
- package/dist/tools/validation/extractors/index.js +233 -0
- package/dist/tools/validation/extractors/index.js.map +1 -0
- package/dist/tools/validation/extractors/javascript.d.ts +73 -0
- package/dist/tools/validation/extractors/javascript.d.ts.map +1 -0
- package/dist/tools/validation/extractors/javascript.js +1841 -0
- package/dist/tools/validation/extractors/javascript.js.map +1 -0
- package/dist/tools/validation/extractors/python.d.ts +93 -0
- package/dist/tools/validation/extractors/python.d.ts.map +1 -0
- package/dist/tools/validation/extractors/python.js +799 -0
- package/dist/tools/validation/extractors/python.js.map +1 -0
- package/dist/tools/validation/manifest.d.ts +45 -0
- package/dist/tools/validation/manifest.d.ts.map +1 -0
- package/dist/tools/validation/manifest.js +719 -0
- package/dist/tools/validation/manifest.js.map +1 -0
- package/dist/tools/validation/parser.d.ts +58 -0
- package/dist/tools/validation/parser.d.ts.map +1 -0
- package/dist/tools/validation/parser.js +232 -0
- package/dist/tools/validation/parser.js.map +1 -0
- package/dist/tools/validation/registry.d.ts +15 -0
- package/dist/tools/validation/registry.d.ts.map +1 -0
- package/dist/tools/validation/registry.js +169 -0
- package/dist/tools/validation/registry.js.map +1 -0
- package/dist/tools/validation/scoring.d.ts +54 -0
- package/dist/tools/validation/scoring.d.ts.map +1 -0
- package/dist/tools/validation/scoring.js +242 -0
- package/dist/tools/validation/scoring.js.map +1 -0
- package/dist/tools/validation/types.d.ts +120 -0
- package/dist/tools/validation/types.d.ts.map +1 -0
- package/dist/tools/validation/types.js +11 -0
- package/dist/tools/validation/types.js.map +1 -0
- package/dist/tools/validation/unusedLocals.d.ts +36 -0
- package/dist/tools/validation/unusedLocals.d.ts.map +1 -0
- package/dist/tools/validation/unusedLocals.js +333 -0
- package/dist/tools/validation/unusedLocals.js.map +1 -0
- package/dist/tools/validation/validation.d.ts +98 -0
- package/dist/tools/validation/validation.d.ts.map +1 -0
- package/dist/tools/validation/validation.js +1837 -0
- package/dist/tools/validation/validation.js.map +1 -0
- package/dist/types/codeGraph.d.ts +163 -0
- package/dist/types/codeGraph.d.ts.map +1 -0
- package/dist/types/codeGraph.js +9 -0
- package/dist/types/codeGraph.js.map +1 -0
- package/dist/types/symbolGraph.d.ts +68 -0
- package/dist/types/symbolGraph.d.ts.map +1 -0
- package/dist/types/symbolGraph.js +10 -0
- package/dist/types/symbolGraph.js.map +1 -0
- package/dist/types/tools.d.ts +43 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +7 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/fileFilter.d.ts +37 -0
- package/dist/utils/fileFilter.d.ts.map +1 -0
- package/dist/utils/fileFilter.js +91 -0
- package/dist/utils/fileFilter.js.map +1 -0
- package/dist/utils/gitUtils.d.ts +28 -0
- package/dist/utils/gitUtils.d.ts.map +1 -0
- package/dist/utils/gitUtils.js +81 -0
- package/dist/utils/gitUtils.js.map +1 -0
- package/dist/utils/logger.d.ts +15 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +38 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/serialization.d.ts +25 -0
- package/dist/utils/serialization.d.ts.map +1 -0
- package/dist/utils/serialization.js +53 -0
- package/dist/utils/serialization.js.map +1 -0
- package/package.json +90 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpNotifications.d.ts","sourceRoot":"","sources":["../../src/agent/mcpNotifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAKnE;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGjD;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,qBAAqB,GAAG,aAAa,GAAG,cAAc,GAAG,gBAAgB,GAAG,mBAAmB,EACrG,IAAI,EAAE,GAAG,GACR,OAAO,CAAC,OAAO,CAAC,CA8BlB;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,GAAG,EAAE,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,GAAG,OAAO,CAAC,OAAO,CAAC,CAQnB;AAED;;GAEG;AACH,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,GAAG,GACX,OAAO,CAAC,OAAO,CAAC,CAQlB"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Notification System
|
|
3
|
+
*
|
|
4
|
+
* Provides UI notifications to the MCP client (Claude Desktop, Cline, VS Code, etc.)
|
|
5
|
+
*
|
|
6
|
+
* IMPORTANT: MCP servers CANNOT directly push data to LLMs. These notifications
|
|
7
|
+
* only appear in the client's UI as hints. The LLM must still call tools like
|
|
8
|
+
* get_guardian_alerts to retrieve the actual alert data.
|
|
9
|
+
*
|
|
10
|
+
* @format
|
|
11
|
+
*/
|
|
12
|
+
import { logger } from "../utils/logger.js";
|
|
13
|
+
let mcpServer = null;
|
|
14
|
+
/**
|
|
15
|
+
* Register the MCP server instance for notifications
|
|
16
|
+
*/
|
|
17
|
+
export function setMCPServer(server) {
|
|
18
|
+
mcpServer = server;
|
|
19
|
+
logger.info("MCP notification system initialized");
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Send a notification to the MCP client (system UI)
|
|
23
|
+
* This uses MCP's standard logging notification API
|
|
24
|
+
*/
|
|
25
|
+
export async function sendNotification(type, data) {
|
|
26
|
+
if (!mcpServer) {
|
|
27
|
+
logger.warn("MCP server not registered, cannot send notification");
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
// Use MCP's standard logging/message notification
|
|
32
|
+
// This routes to the client UI (Claude Desktop, Cline, VS Code, etc.)
|
|
33
|
+
const level = type === "agent_alert" ? "warning" : "info";
|
|
34
|
+
await mcpServer.notification({
|
|
35
|
+
method: "notifications/message",
|
|
36
|
+
params: {
|
|
37
|
+
level,
|
|
38
|
+
logger: "CodeGuardian",
|
|
39
|
+
data: {
|
|
40
|
+
type,
|
|
41
|
+
message: data.message || `CodeGuardian ${type}`,
|
|
42
|
+
...data,
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
logger.info(`Sent notification to system: ${type}`);
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
logger.error("Failed to send notification:", error);
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Send a validation alert notification to the UI
|
|
56
|
+
*
|
|
57
|
+
* NOTE: This only shows a notification in the client UI. The LLM must
|
|
58
|
+
* call get_guardian_alerts to retrieve the actual alert data.
|
|
59
|
+
*/
|
|
60
|
+
export async function pushValidationAlert(alert) {
|
|
61
|
+
const type = alert.isInitialScan ? "initial_scan" : "agent_alert";
|
|
62
|
+
return sendNotification(type, {
|
|
63
|
+
file: alert.file,
|
|
64
|
+
issueCount: alert.issues.length,
|
|
65
|
+
message: alert.llmMessage,
|
|
66
|
+
timestamp: Date.now(),
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Send async validation results when complete
|
|
71
|
+
*/
|
|
72
|
+
export async function pushAsyncValidationComplete(jobId, results) {
|
|
73
|
+
return sendNotification("validation_complete", {
|
|
74
|
+
jobId,
|
|
75
|
+
success: results.success,
|
|
76
|
+
issueCount: results.issues?.length || 0,
|
|
77
|
+
message: results.recommendation?.message || "Validation complete",
|
|
78
|
+
timestamp: Date.now(),
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=mcpNotifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcpNotifications.js","sourceRoot":"","sources":["../../src/agent/mcpNotifications.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAE5C,IAAI,SAAS,GAAkB,IAAI,CAAC;AAEpC;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,SAAS,GAAG,MAAM,CAAC;IACnB,MAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;AACrD,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAqG,EACrG,IAAS;IAET,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,CAAC,IAAI,CAAC,qDAAqD,CAAC,CAAC;QACnE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,kDAAkD;QAClD,sEAAsE;QACtE,MAAM,KAAK,GAAG,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAE1D,MAAM,SAAS,CAAC,YAAY,CAAC;YAC3B,MAAM,EAAE,uBAAuB;YAC/B,MAAM,EAAE;gBACN,KAAK;gBACL,MAAM,EAAE,cAAc;gBACtB,IAAI,EAAE;oBACJ,IAAI;oBACJ,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,gBAAgB,IAAI,EAAE;oBAC/C,GAAG,IAAI;iBACR;aACF;SACF,CAAC,CAAC;QAEH,MAAM,CAAC,IAAI,CAAC,gCAAgC,IAAI,EAAE,CAAC,CAAC;QACpD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,CAAC,KAAK,CAAC,8BAA8B,EAAE,KAAK,CAAC,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAKzC;IACC,MAAM,IAAI,GAAG,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;IAClE,OAAO,gBAAgB,CAAC,IAAI,EAAE;QAC5B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,UAAU,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM;QAC/B,OAAO,EAAE,KAAK,CAAC,UAAU;QACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,KAAa,EACb,OAAY;IAEZ,OAAO,gBAAgB,CAAC,qBAAqB,EAAE;QAC7C,KAAK;QACL,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,UAAU,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,IAAI,CAAC;QACvC,OAAO,EAAE,OAAO,CAAC,cAAc,EAAE,OAAO,IAAI,qBAAqB;QACjE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Anti-Pattern Detector
|
|
3
|
+
*
|
|
4
|
+
* Lightweight heuristic detector used by unit tests and optional enrichment.
|
|
5
|
+
*
|
|
6
|
+
* NOTE: This intentionally avoids heavy parsing to keep runtime low.
|
|
7
|
+
*/
|
|
8
|
+
export type AIAntiPatternSeverity = "low" | "medium" | "high" | "critical";
|
|
9
|
+
export interface AIAntiPatternIssue {
|
|
10
|
+
type: "genericErrorHandling" | "unnecessaryAbstraction" | "missingValidation";
|
|
11
|
+
severity: AIAntiPatternSeverity;
|
|
12
|
+
message: string;
|
|
13
|
+
line?: number;
|
|
14
|
+
}
|
|
15
|
+
export declare function detectAIAntiPatterns(code: string, language: string): Promise<AIAntiPatternIssue[]>;
|
|
16
|
+
//# sourceMappingURL=aiPatterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiPatterns.d.ts","sourceRoot":"","sources":["../../src/analyzers/aiPatterns.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,kBAAkB;IACjC,IAAI,EACA,sBAAsB,GACtB,wBAAwB,GACxB,mBAAmB,CAAC;IACxB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AA+FD,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAY/B"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AI Anti-Pattern Detector
|
|
3
|
+
*
|
|
4
|
+
* Lightweight heuristic detector used by unit tests and optional enrichment.
|
|
5
|
+
*
|
|
6
|
+
* NOTE: This intentionally avoids heavy parsing to keep runtime low.
|
|
7
|
+
*/
|
|
8
|
+
function getLineNumberFromIndex(source, index) {
|
|
9
|
+
if (index <= 0)
|
|
10
|
+
return 1;
|
|
11
|
+
// Count '\n' up to index (1-based lines)
|
|
12
|
+
let lines = 1;
|
|
13
|
+
for (let i = 0; i < index && i < source.length; i++) {
|
|
14
|
+
if (source.charCodeAt(i) === 10)
|
|
15
|
+
lines++;
|
|
16
|
+
}
|
|
17
|
+
return lines;
|
|
18
|
+
}
|
|
19
|
+
function detectGenericErrorHandling(code) {
|
|
20
|
+
// Heuristic:
|
|
21
|
+
// - find catch blocks
|
|
22
|
+
// - flag those that only log the error (console.log/error/warn) without rethrow/handling
|
|
23
|
+
// - do NOT flag if we see a throw inside the catch, or explicit logging via a structured logger
|
|
24
|
+
const issues = [];
|
|
25
|
+
// Match `catch (e) { ... }` including multiline body (non-greedy)
|
|
26
|
+
const catchRe = /catch\s*\(([^)]*)\)\s*\{([\s\S]*?)\}/g;
|
|
27
|
+
for (const match of code.matchAll(catchRe)) {
|
|
28
|
+
const full = match[0];
|
|
29
|
+
const catchParam = (match[1] ?? "").trim();
|
|
30
|
+
const body = match[2] ?? "";
|
|
31
|
+
const matchIndex = match.index ?? 0;
|
|
32
|
+
// If they rethrow or wrap, assume good.
|
|
33
|
+
if (/\bthrow\b/.test(body))
|
|
34
|
+
continue;
|
|
35
|
+
if (/\breturn\b\s+new\s+/.test(body))
|
|
36
|
+
continue;
|
|
37
|
+
// If a structured logger is used, assume intentional handling.
|
|
38
|
+
if (/\blogger\.(error|warn|info)\s*\(/.test(body))
|
|
39
|
+
continue;
|
|
40
|
+
// Flag console logging of the caught error.
|
|
41
|
+
const consoleLogRe = /\bconsole\.(log|error|warn)\s*\(([^)]*)\)\s*;?/;
|
|
42
|
+
const consoleLog = body.match(consoleLogRe);
|
|
43
|
+
if (!consoleLog)
|
|
44
|
+
continue;
|
|
45
|
+
const argText = consoleLog[2] ?? "";
|
|
46
|
+
// Prefer to only flag when they log the caught error directly.
|
|
47
|
+
// If param is empty, still flag (generic catch-all) when console logging is present.
|
|
48
|
+
const logsCaughtError = !catchParam || new RegExp(`\\b${catchParam}\\b`).test(argText);
|
|
49
|
+
if (!logsCaughtError)
|
|
50
|
+
continue;
|
|
51
|
+
issues.push({
|
|
52
|
+
type: "genericErrorHandling",
|
|
53
|
+
severity: "medium",
|
|
54
|
+
message: "Catch block appears to only log the error (generic error handling); consider handling or rethrowing.",
|
|
55
|
+
line: getLineNumberFromIndex(code, matchIndex + full.indexOf("catch")),
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return issues;
|
|
59
|
+
}
|
|
60
|
+
function detectUnnecessaryAbstractionsTS(code) {
|
|
61
|
+
// Heuristic:
|
|
62
|
+
// - find `interface X { ... }`
|
|
63
|
+
// - count occurrences of word X in the whole file
|
|
64
|
+
// - if it only occurs in its declaration + one usage, flag as unnecessary
|
|
65
|
+
const issues = [];
|
|
66
|
+
const interfaceRe = /\binterface\s+([A-Za-z_$][\w$]*)\b/g;
|
|
67
|
+
for (const match of code.matchAll(interfaceRe)) {
|
|
68
|
+
const name = match[1];
|
|
69
|
+
if (!name)
|
|
70
|
+
continue;
|
|
71
|
+
const nameRe = new RegExp(`\\b${name}\\b`, "g");
|
|
72
|
+
const occurrences = [...code.matchAll(nameRe)].length;
|
|
73
|
+
// Occurrence counting includes the declaration itself.
|
|
74
|
+
// Typical "used once" pattern: `interface X` + `implements X` => 2.
|
|
75
|
+
// Consider up to 2 as unnecessary; 3+ indicates multi-use.
|
|
76
|
+
if (occurrences <= 2) {
|
|
77
|
+
issues.push({
|
|
78
|
+
type: "unnecessaryAbstraction",
|
|
79
|
+
severity: "low",
|
|
80
|
+
message: `Interface '${name}' appears to be used only once; consider simplifying unless needed for extensibility.`,
|
|
81
|
+
line: getLineNumberFromIndex(code, match.index ?? 0),
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return issues;
|
|
86
|
+
}
|
|
87
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
88
|
+
function detectMissingValidation(_code) {
|
|
89
|
+
// Intentionally conservative; current unit tests accept 0 findings.
|
|
90
|
+
return [];
|
|
91
|
+
}
|
|
92
|
+
export async function detectAIAntiPatterns(code, language) {
|
|
93
|
+
if (!code || !code.trim())
|
|
94
|
+
return [];
|
|
95
|
+
const issues = [];
|
|
96
|
+
issues.push(...detectGenericErrorHandling(code));
|
|
97
|
+
if (language === "typescript" || language === "ts") {
|
|
98
|
+
issues.push(...detectUnnecessaryAbstractionsTS(code));
|
|
99
|
+
}
|
|
100
|
+
issues.push(...detectMissingValidation(code));
|
|
101
|
+
return issues;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=aiPatterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aiPatterns.js","sourceRoot":"","sources":["../../src/analyzers/aiPatterns.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,SAAS,sBAAsB,CAAC,MAAc,EAAE,KAAa;IAC3D,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,yCAAyC;IACzC,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpD,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,EAAE;YAAE,KAAK,EAAE,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CAAC,IAAY;IAC9C,aAAa;IACb,sBAAsB;IACtB,yFAAyF;IACzF,gGAAgG;IAChG,MAAM,MAAM,GAAyB,EAAE,CAAC;IAExC,kEAAkE;IAClE,MAAM,OAAO,GAAG,uCAAuC,CAAC;IACxD,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,UAAU,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;QAEpC,wCAAwC;QACxC,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QACrC,IAAI,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAE/C,+DAA+D;QAC/D,IAAI,kCAAkC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAS;QAE5D,4CAA4C;QAC5C,MAAM,YAAY,GAAG,gDAAgD,CAAC;QACtE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU;YAAE,SAAS;QAE1B,MAAM,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,+DAA+D;QAC/D,qFAAqF;QACrF,MAAM,eAAe,GACnB,CAAC,UAAU,IAAI,IAAI,MAAM,CAAC,MAAM,UAAU,KAAK,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjE,IAAI,CAAC,eAAe;YAAE,SAAS;QAE/B,MAAM,CAAC,IAAI,CAAC;YACV,IAAI,EAAE,sBAAsB;YAC5B,QAAQ,EAAE,QAAQ;YAClB,OAAO,EACL,sGAAsG;YACxG,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACvE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,+BAA+B,CAAC,IAAY;IACnD,aAAa;IACb,+BAA+B;IAC/B,kDAAkD;IAClD,0EAA0E;IAC1E,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,MAAM,WAAW,GAAG,qCAAqC,CAAC;IAE1D,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,CAAC,IAAI;YAAE,SAAS;QAEpB,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,GAAG,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QAEtD,uDAAuD;QACvD,oEAAoE;QACpE,2DAA2D;QAC3D,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;YACrB,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,wBAAwB;gBAC9B,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,cAAc,IAAI,uFAAuF;gBAClH,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACrD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,6DAA6D;AAC7D,SAAS,uBAAuB,CAAC,KAAa;IAC5C,oEAAoE;IACpE,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,IAAY,EACZ,QAAgB;IAEhB,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO,EAAE,CAAC;IAErC,MAAM,MAAM,GAAyB,EAAE,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;IAEjD,IAAI,QAAQ,KAAK,YAAY,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,GAAG,+BAA+B,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anti-Patterns Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Loads and provides AI anti-patterns for enriching validation results.
|
|
5
|
+
* Used for LLM context and educational purposes - NOT for regex validation.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
*/
|
|
9
|
+
export interface AntiPattern {
|
|
10
|
+
id: string;
|
|
11
|
+
name: string;
|
|
12
|
+
category: string;
|
|
13
|
+
severity: "low" | "medium" | "high";
|
|
14
|
+
description: string;
|
|
15
|
+
pattern: string;
|
|
16
|
+
languages: string[];
|
|
17
|
+
fix: string;
|
|
18
|
+
example: string;
|
|
19
|
+
aiGenerated: boolean;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Load anti-patterns from JSON file
|
|
23
|
+
* Caches result for performance
|
|
24
|
+
*/
|
|
25
|
+
export declare function loadAntiPatterns(): Promise<AntiPattern[]>;
|
|
26
|
+
/**
|
|
27
|
+
* Get anti-patterns synchronously (from cache)
|
|
28
|
+
* Returns empty array if not yet loaded
|
|
29
|
+
*/
|
|
30
|
+
export declare function getAntiPatternsSync(): AntiPattern[];
|
|
31
|
+
/**
|
|
32
|
+
* Find anti-patterns relevant to a specific issue type
|
|
33
|
+
*/
|
|
34
|
+
export declare function getRelevantAntiPatterns(issueType: string, language?: string): Promise<AntiPattern[]>;
|
|
35
|
+
/**
|
|
36
|
+
* Get anti-patterns by category
|
|
37
|
+
*/
|
|
38
|
+
export declare function getAntiPatternsByCategory(category: string): Promise<AntiPattern[]>;
|
|
39
|
+
/**
|
|
40
|
+
* Get AI-specific anti-patterns (common AI mistakes)
|
|
41
|
+
*/
|
|
42
|
+
export declare function getAIAntiPatterns(): Promise<AntiPattern[]>;
|
|
43
|
+
/**
|
|
44
|
+
* Enrich a validation issue with relevant anti-pattern context
|
|
45
|
+
* Returns the enriched issue (non-destructive)
|
|
46
|
+
*/
|
|
47
|
+
export declare function enrichIssueWithAntiPattern(issue: any, language?: string): Promise<any>;
|
|
48
|
+
/**
|
|
49
|
+
* Batch enrich multiple issues
|
|
50
|
+
*/
|
|
51
|
+
export declare function enrichIssuesWithAntiPatterns(issues: any[], language?: string): Promise<any[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Generate LLM context from anti-patterns relevant to the issues
|
|
54
|
+
*/
|
|
55
|
+
export declare function generateAntiPatternContext(issues: any[], language?: string): Promise<string>;
|
|
56
|
+
/**
|
|
57
|
+
* Get educational summary for a specific anti-pattern ID
|
|
58
|
+
*/
|
|
59
|
+
export declare function getAntiPatternById(id: string): Promise<AntiPattern | null>;
|
|
60
|
+
//# sourceMappingURL=antiPatterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antiPatterns.d.ts","sourceRoot":"","sources":["../../src/analyzers/antiPatterns.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAWH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;CACtB;AAgBD;;;GAGG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAwB/D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,WAAW,EAAE,CAEnD;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,SAAS,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,WAAW,EAAE,CAAC,CAgCxB;AAED;;GAEG;AACH,wBAAsB,yBAAyB,CAC7C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,WAAW,EAAE,CAAC,CAGxB;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAGhE;AAMD;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,GAAG,EACV,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,CAAC,CA0Bd;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAChD,MAAM,EAAE,GAAG,EAAE,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,GAAG,EAAE,CAAC,CAEhB;AAMD;;GAEG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,GAAG,EAAE,EACb,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC,CAqDjB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAGhF"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Anti-Patterns Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Loads and provides AI anti-patterns for enriching validation results.
|
|
5
|
+
* Used for LLM context and educational purposes - NOT for regex validation.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
*/
|
|
9
|
+
import * as fs from "fs/promises";
|
|
10
|
+
import * as path from "path";
|
|
11
|
+
import { fileURLToPath } from "url";
|
|
12
|
+
import { logger } from "../utils/logger.js";
|
|
13
|
+
// ============================================================================
|
|
14
|
+
// Cache
|
|
15
|
+
// ============================================================================
|
|
16
|
+
let antiPatternsCache = null;
|
|
17
|
+
// ============================================================================
|
|
18
|
+
// Loader
|
|
19
|
+
// ============================================================================
|
|
20
|
+
/**
|
|
21
|
+
* Load anti-patterns from JSON file
|
|
22
|
+
* Caches result for performance
|
|
23
|
+
*/
|
|
24
|
+
export async function loadAntiPatterns() {
|
|
25
|
+
if (antiPatternsCache) {
|
|
26
|
+
return antiPatternsCache;
|
|
27
|
+
}
|
|
28
|
+
try {
|
|
29
|
+
// Get the directory of the current module
|
|
30
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
31
|
+
const __dirname = path.dirname(__filename);
|
|
32
|
+
// Path to anti-patterns JSON (relative to src/)
|
|
33
|
+
const patternsPath = path.resolve(__dirname, "../../rules/anti-patterns/ai-anti-patterns.json");
|
|
34
|
+
const data = await fs.readFile(patternsPath, "utf-8");
|
|
35
|
+
const db = JSON.parse(data);
|
|
36
|
+
antiPatternsCache = db.patterns;
|
|
37
|
+
logger.info(`Loaded ${antiPatternsCache.length} anti-patterns`);
|
|
38
|
+
return antiPatternsCache;
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
logger.error("Failed to load anti-patterns:", error);
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Get anti-patterns synchronously (from cache)
|
|
47
|
+
* Returns empty array if not yet loaded
|
|
48
|
+
*/
|
|
49
|
+
export function getAntiPatternsSync() {
|
|
50
|
+
return antiPatternsCache || [];
|
|
51
|
+
}
|
|
52
|
+
// ============================================================================
|
|
53
|
+
// Lookup Functions
|
|
54
|
+
// ============================================================================
|
|
55
|
+
/**
|
|
56
|
+
* Find anti-patterns relevant to a specific issue type
|
|
57
|
+
*/
|
|
58
|
+
export async function getRelevantAntiPatterns(issueType, language) {
|
|
59
|
+
const patterns = await loadAntiPatterns();
|
|
60
|
+
// Map validation issue types to anti-pattern categories
|
|
61
|
+
const categoryMap = {
|
|
62
|
+
undefinedVariable: ["maintainability", "bugs"],
|
|
63
|
+
nonExistentMethod: ["maintainability"],
|
|
64
|
+
nonExistentFunction: ["maintainability"],
|
|
65
|
+
nonExistentImport: ["maintainability"],
|
|
66
|
+
nonExistentClass: ["maintainability"],
|
|
67
|
+
unusedImport: ["dead-code"],
|
|
68
|
+
// dependencyHallucination intentionally excluded - no relevant anti-pattern exists
|
|
69
|
+
deadCode: ["dead-code"],
|
|
70
|
+
highComplexity: ["complexity"],
|
|
71
|
+
longFunction: ["complexity"],
|
|
72
|
+
deepNesting: ["complexity"],
|
|
73
|
+
architecturalDeviation: ["maintainability"],
|
|
74
|
+
};
|
|
75
|
+
const relevantCategories = categoryMap[issueType] || [];
|
|
76
|
+
return patterns.filter((pattern) => {
|
|
77
|
+
// Match by category
|
|
78
|
+
const categoryMatch = relevantCategories.includes(pattern.category);
|
|
79
|
+
// Filter by language if specified
|
|
80
|
+
const languageMatch = language
|
|
81
|
+
? pattern.languages.includes(language) || pattern.languages.includes("javascript")
|
|
82
|
+
: true;
|
|
83
|
+
return categoryMatch && languageMatch;
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get anti-patterns by category
|
|
88
|
+
*/
|
|
89
|
+
export async function getAntiPatternsByCategory(category) {
|
|
90
|
+
const patterns = await loadAntiPatterns();
|
|
91
|
+
return patterns.filter((p) => p.category === category);
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Get AI-specific anti-patterns (common AI mistakes)
|
|
95
|
+
*/
|
|
96
|
+
export async function getAIAntiPatterns() {
|
|
97
|
+
const patterns = await loadAntiPatterns();
|
|
98
|
+
return patterns.filter((p) => p.aiGenerated);
|
|
99
|
+
}
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Enrichment Functions
|
|
102
|
+
// ============================================================================
|
|
103
|
+
/**
|
|
104
|
+
* Enrich a validation issue with relevant anti-pattern context
|
|
105
|
+
* Returns the enriched issue (non-destructive)
|
|
106
|
+
*/
|
|
107
|
+
export async function enrichIssueWithAntiPattern(issue, language) {
|
|
108
|
+
try {
|
|
109
|
+
const relevantPatterns = await getRelevantAntiPatterns(issue.type, language);
|
|
110
|
+
if (relevantPatterns.length === 0) {
|
|
111
|
+
return issue;
|
|
112
|
+
}
|
|
113
|
+
// Find the most relevant pattern (first match for now)
|
|
114
|
+
const primaryPattern = relevantPatterns[0];
|
|
115
|
+
return {
|
|
116
|
+
...issue,
|
|
117
|
+
antiPattern: {
|
|
118
|
+
id: primaryPattern.id,
|
|
119
|
+
name: primaryPattern.name,
|
|
120
|
+
category: primaryPattern.category,
|
|
121
|
+
description: primaryPattern.description,
|
|
122
|
+
fix: primaryPattern.fix,
|
|
123
|
+
example: primaryPattern.example,
|
|
124
|
+
},
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
logger.warn("Failed to enrich issue with anti-pattern:", error);
|
|
129
|
+
return issue;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Batch enrich multiple issues
|
|
134
|
+
*/
|
|
135
|
+
export async function enrichIssuesWithAntiPatterns(issues, language) {
|
|
136
|
+
return Promise.all(issues.map((issue) => enrichIssueWithAntiPattern(issue, language)));
|
|
137
|
+
}
|
|
138
|
+
// ============================================================================
|
|
139
|
+
// LLM Context Generation
|
|
140
|
+
// ============================================================================
|
|
141
|
+
/**
|
|
142
|
+
* Generate LLM context from anti-patterns relevant to the issues
|
|
143
|
+
*/
|
|
144
|
+
export async function generateAntiPatternContext(issues, language) {
|
|
145
|
+
try {
|
|
146
|
+
// Get unique categories from issues
|
|
147
|
+
const categories = new Set();
|
|
148
|
+
const categoryMap = {
|
|
149
|
+
undefinedVariable: ["maintainability"],
|
|
150
|
+
nonExistentMethod: ["maintainability"],
|
|
151
|
+
nonExistentFunction: ["maintainability"],
|
|
152
|
+
unusedImport: ["dead-code"],
|
|
153
|
+
deadCode: ["dead-code"],
|
|
154
|
+
highComplexity: ["complexity"],
|
|
155
|
+
longFunction: ["complexity"],
|
|
156
|
+
deepNesting: ["complexity"],
|
|
157
|
+
};
|
|
158
|
+
issues.forEach((issue) => {
|
|
159
|
+
const cats = categoryMap[issue.type] || [];
|
|
160
|
+
cats.forEach((c) => categories.add(c));
|
|
161
|
+
});
|
|
162
|
+
if (categories.size === 0) {
|
|
163
|
+
return "";
|
|
164
|
+
}
|
|
165
|
+
// Load relevant anti-patterns
|
|
166
|
+
const patterns = await loadAntiPatterns();
|
|
167
|
+
const relevantPatterns = patterns.filter((p) => categories.has(p.category) && (!language || p.languages.includes(language)));
|
|
168
|
+
if (relevantPatterns.length === 0) {
|
|
169
|
+
return "";
|
|
170
|
+
}
|
|
171
|
+
// Format for LLM
|
|
172
|
+
const sections = relevantPatterns.map((p) => {
|
|
173
|
+
return `### ${p.id}: ${p.name}
|
|
174
|
+
- **Category:** ${p.category}
|
|
175
|
+
- **Severity:** ${p.severity}
|
|
176
|
+
- **Problem:** ${p.description}
|
|
177
|
+
- **Fix:** ${p.fix}
|
|
178
|
+
${p.aiGenerated ? "- **Note:** Common in AI-generated code" : ""}`;
|
|
179
|
+
});
|
|
180
|
+
return `## Relevant Anti-Patterns to Avoid
|
|
181
|
+
|
|
182
|
+
${sections.join("\n\n")}
|
|
183
|
+
|
|
184
|
+
When suggesting fixes, ensure you don't introduce these anti-patterns.`;
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
logger.warn("Failed to generate anti-pattern context:", error);
|
|
188
|
+
return "";
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get educational summary for a specific anti-pattern ID
|
|
193
|
+
*/
|
|
194
|
+
export async function getAntiPatternById(id) {
|
|
195
|
+
const patterns = await loadAntiPatterns();
|
|
196
|
+
return patterns.find((p) => p.id === id) || null;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=antiPatterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"antiPatterns.js","sourceRoot":"","sources":["../../src/analyzers/antiPatterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Built-in Types and Methods
|
|
3
|
+
*
|
|
4
|
+
* Comprehensive registry of built-in types, methods, and globals
|
|
5
|
+
* for each supported language. Used for type-aware validation.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
*/
|
|
9
|
+
export interface LanguageBuiltins {
|
|
10
|
+
globals: string[];
|
|
11
|
+
functions: string[];
|
|
12
|
+
classes: string[];
|
|
13
|
+
keywords: string[];
|
|
14
|
+
methods: Record<string, string[]>;
|
|
15
|
+
properties: Record<string, string[]>;
|
|
16
|
+
}
|
|
17
|
+
export declare const BUILTIN_TYPES: Record<string, LanguageBuiltins>;
|
|
18
|
+
//# sourceMappingURL=builtinTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"builtinTypes.d.ts","sourceRoot":"","sources":["../../src/analyzers/builtinTypes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;CACtC;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAovC1D,CAAC"}
|