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,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Validation Prompt Templates
|
|
3
|
+
*
|
|
4
|
+
* Based on prompt engineering best practices:
|
|
5
|
+
* - Zero-shot: Direct validation
|
|
6
|
+
* - Few-shot: Learning from examples
|
|
7
|
+
* - Chain-of-Thought: Step-by-step reasoning
|
|
8
|
+
* - Self-consistency: Multiple perspectives
|
|
9
|
+
*
|
|
10
|
+
* @format
|
|
11
|
+
*/
|
|
12
|
+
import { PROMPT_PATTERNS, VALIDATION_CONSTRAINTS } from "./library.js";
|
|
13
|
+
export const VALIDATION_TEMPLATES = {
|
|
14
|
+
/**
|
|
15
|
+
* Zero-shot: Direct validation without examples
|
|
16
|
+
* Best for: Simple, straightforward validation tasks
|
|
17
|
+
*/
|
|
18
|
+
zeroShot: (code) => `Use validate_code to check this code for hallucinations (non-existent functions, wrong methods, etc.):\n\n${code}`,
|
|
19
|
+
/**
|
|
20
|
+
* Few-shot: Validation with examples of common mistakes
|
|
21
|
+
* Best for: Teaching the model what to look for
|
|
22
|
+
*/
|
|
23
|
+
fewShot: (code) => {
|
|
24
|
+
const task = "Check this code for hallucinations, missing dependencies, and wrong methods.";
|
|
25
|
+
const examples = [
|
|
26
|
+
{
|
|
27
|
+
input: "const user = getUserById(id);",
|
|
28
|
+
output: "❌ BAD: function doesn't exist",
|
|
29
|
+
explanation: "The project uses findUserById instead."
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
input: "import { Button } from 'react-ui';",
|
|
33
|
+
output: "❌ BAD: package not installed",
|
|
34
|
+
explanation: "Package 'react-ui' is missing from package.json."
|
|
35
|
+
}
|
|
36
|
+
];
|
|
37
|
+
return PROMPT_PATTERNS.withExamples(task, examples) + `\n\nCode to validate:\n\`\`\`\n${code}\n\`\`\``;
|
|
38
|
+
},
|
|
39
|
+
/**
|
|
40
|
+
* Chain-of-Thought: Step-by-step reasoning
|
|
41
|
+
* Best for: Complex validation requiring detailed analysis
|
|
42
|
+
*/
|
|
43
|
+
chainOfThought: (code) => {
|
|
44
|
+
const task = `Analyze this code systematically using validate_code:\n\n\`\`\`\n${code}\n\`\`\``;
|
|
45
|
+
const steps = [
|
|
46
|
+
"Extract all function calls and class instantiations",
|
|
47
|
+
"Check each symbol against the project's symbol table",
|
|
48
|
+
"Verify all imports exist in package.json/requirements.txt",
|
|
49
|
+
"Check for dead code (unused exports)",
|
|
50
|
+
"Provide specific fixes with reasoning"
|
|
51
|
+
];
|
|
52
|
+
return PROMPT_PATTERNS.stepByStep(task, steps);
|
|
53
|
+
},
|
|
54
|
+
/**
|
|
55
|
+
* Self-consistency: Multiple validation perspectives
|
|
56
|
+
* Best for: High-stakes code requiring thorough review
|
|
57
|
+
*/
|
|
58
|
+
selfConsistency: (code) => {
|
|
59
|
+
const task = `Validate this code from multiple perspectives using validate_code:\n\n\`\`\`\n${code}\n\`\`\``;
|
|
60
|
+
const perspectives = [
|
|
61
|
+
"Symbol Validation: Are all functions, classes, and methods defined?",
|
|
62
|
+
"Dependency Validation: Are all packages in the manifest?",
|
|
63
|
+
"Logic Validation: Does the code make logical sense?"
|
|
64
|
+
];
|
|
65
|
+
return PROMPT_PATTERNS.multiPerspective(task, perspectives);
|
|
66
|
+
},
|
|
67
|
+
/**
|
|
68
|
+
* Structured output: Validation with explicit format requirements
|
|
69
|
+
* Best for: Integration with automated systems
|
|
70
|
+
*/
|
|
71
|
+
structuredOutput: (code) => {
|
|
72
|
+
const task = `Use validate_code to analyze this code:\n\n\`\`\`\n${code}\n\`\`\``;
|
|
73
|
+
const format = `
|
|
74
|
+
VALIDATION SUMMARY:
|
|
75
|
+
- Status: [PASS/FAIL]
|
|
76
|
+
- Score: [0-100]
|
|
77
|
+
- Hallucinations Found: [count]
|
|
78
|
+
|
|
79
|
+
CRITICAL ISSUES (if any):
|
|
80
|
+
1. [Issue description]
|
|
81
|
+
- Severity: [critical/high/medium/low]
|
|
82
|
+
- Suggestion: [specific fix]
|
|
83
|
+
- Confidence: [0-100%]
|
|
84
|
+
`;
|
|
85
|
+
return PROMPT_PATTERNS.structuredOutput(task, format);
|
|
86
|
+
},
|
|
87
|
+
/**
|
|
88
|
+
* Role-based: Validation from expert perspective
|
|
89
|
+
* Best for: Domain-specific validation
|
|
90
|
+
*/
|
|
91
|
+
roleBased: (code, role = "senior code reviewer") => {
|
|
92
|
+
const task = `Thoroughly review this code for hallucinations and missing dependencies:\n\n\`\`\`\n${code}\n\`\`\``;
|
|
93
|
+
const rolePrompt = PROMPT_PATTERNS.role(role, task);
|
|
94
|
+
return PROMPT_PATTERNS.withConstraints(rolePrompt, VALIDATION_CONSTRAINTS);
|
|
95
|
+
},
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/prompts/templates.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,eAAe,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAEvE,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC;;;OAGG;IACH,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CACzB,6GAA6G,IAAI,EAAE;IAErH;;;OAGG;IACH,OAAO,EAAE,CAAC,IAAY,EAAE,EAAE;QACxB,MAAM,IAAI,GAAG,8EAA8E,CAAC;QAC5F,MAAM,QAAQ,GAAG;YACf;gBACE,KAAK,EAAE,+BAA+B;gBACtC,MAAM,EAAE,+BAA+B;gBACvC,WAAW,EAAE,wCAAwC;aACtD;YACD;gBACE,KAAK,EAAE,oCAAoC;gBAC3C,MAAM,EAAE,8BAA8B;gBACtC,WAAW,EAAE,kDAAkD;aAChE;SACF,CAAC;QAEF,OAAO,eAAe,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,kCAAkC,IAAI,UAAU,CAAC;IACzG,CAAC;IAED;;;OAGG;IACH,cAAc,EAAE,CAAC,IAAY,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,oEAAoE,IAAI,UAAU,CAAC;QAChG,MAAM,KAAK,GAAG;YACZ,qDAAqD;YACrD,sDAAsD;YACtD,2DAA2D;YAC3D,sCAAsC;YACtC,uCAAuC;SACxC,CAAC;QAEF,OAAO,eAAe,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;IAED;;;OAGG;IACH,eAAe,EAAE,CAAC,IAAY,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,iFAAiF,IAAI,UAAU,CAAC;QAC7G,MAAM,YAAY,GAAG;YACnB,qEAAqE;YACrE,0DAA0D;YAC1D,qDAAqD;SACtD,CAAC;QAEF,OAAO,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACH,gBAAgB,EAAE,CAAC,IAAY,EAAE,EAAE;QACjC,MAAM,IAAI,GAAG,sDAAsD,IAAI,UAAU,CAAC;QAClF,MAAM,MAAM,GAAG;;;;;;;;;;;KAWd,CAAC;QAEF,OAAO,eAAe,CAAC,gBAAgB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxD,CAAC;IAED;;;OAGG;IACH,SAAS,EAAE,CAAC,IAAY,EAAE,OAAe,sBAAsB,EAAE,EAAE;QACjE,MAAM,IAAI,GAAG,uFAAuF,IAAI,UAAU,CAAC;QACnH,MAAM,UAAU,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACpD,OAAO,eAAe,CAAC,eAAe,CAAC,UAAU,EAAE,sBAAsB,CAAC,CAAC;IAC7E,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job Persistence Layer
|
|
3
|
+
*
|
|
4
|
+
* Saves job state to disk so jobs survive server restarts.
|
|
5
|
+
*
|
|
6
|
+
* @format
|
|
7
|
+
*/
|
|
8
|
+
import type { Job } from "./jobQueue.js";
|
|
9
|
+
export declare class JobPersistence {
|
|
10
|
+
private jobsDir;
|
|
11
|
+
constructor(baseDir?: string);
|
|
12
|
+
/**
|
|
13
|
+
* Initialize persistence (create directories)
|
|
14
|
+
*/
|
|
15
|
+
initialize(): Promise<void>;
|
|
16
|
+
/**
|
|
17
|
+
* Save job to disk
|
|
18
|
+
*/
|
|
19
|
+
saveJob(job: Job): Promise<void>;
|
|
20
|
+
/**
|
|
21
|
+
* Load job from disk
|
|
22
|
+
*/
|
|
23
|
+
loadJob(jobId: string): Promise<Job | null>;
|
|
24
|
+
/**
|
|
25
|
+
* Delete job from disk
|
|
26
|
+
*/
|
|
27
|
+
deleteJob(jobId: string): Promise<void>;
|
|
28
|
+
/**
|
|
29
|
+
* Load all jobs from disk
|
|
30
|
+
*/
|
|
31
|
+
loadAllJobs(): Promise<Job[]>;
|
|
32
|
+
/**
|
|
33
|
+
* Clean up old jobs
|
|
34
|
+
*/
|
|
35
|
+
cleanupExpiredJobs(expirationTime: number): Promise<number>;
|
|
36
|
+
/**
|
|
37
|
+
* Get job file path
|
|
38
|
+
*/
|
|
39
|
+
private getJobPath;
|
|
40
|
+
/**
|
|
41
|
+
* Check if persistence is available
|
|
42
|
+
*/
|
|
43
|
+
isAvailable(): Promise<boolean>;
|
|
44
|
+
}
|
|
45
|
+
export declare const jobPersistence: JobPersistence;
|
|
46
|
+
//# sourceMappingURL=jobPersistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobPersistence.d.ts","sourceRoot":"","sources":["../../src/queue/jobPersistence.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAYzC,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAAS;gBAEZ,OAAO,GAAE,MAAiB;IAItC;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAUjC;;OAEG;IACG,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IAWtC;;OAEG;IACG,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;IAejD;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY7C;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IA2BnC;;OAEG;IACG,kBAAkB,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwBjE;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;CAQtC;AAMD,eAAO,MAAM,cAAc,gBAAuB,CAAC"}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job Persistence Layer
|
|
3
|
+
*
|
|
4
|
+
* Saves job state to disk so jobs survive server restarts.
|
|
5
|
+
*
|
|
6
|
+
* @format
|
|
7
|
+
*/
|
|
8
|
+
import * as fs from "fs/promises";
|
|
9
|
+
import * as path from "path";
|
|
10
|
+
import { logger } from "../utils/logger.js";
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// Configuration
|
|
13
|
+
// ============================================================================
|
|
14
|
+
const JOBS_DIR = ".codeguardian/jobs";
|
|
15
|
+
// ============================================================================
|
|
16
|
+
// Persistence API
|
|
17
|
+
// ============================================================================
|
|
18
|
+
export class JobPersistence {
|
|
19
|
+
jobsDir;
|
|
20
|
+
constructor(baseDir = JOBS_DIR) {
|
|
21
|
+
this.jobsDir = baseDir;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Initialize persistence (create directories)
|
|
25
|
+
*/
|
|
26
|
+
async initialize() {
|
|
27
|
+
try {
|
|
28
|
+
await fs.mkdir(this.jobsDir, { recursive: true });
|
|
29
|
+
logger.info(`Job persistence initialized: ${this.jobsDir}`);
|
|
30
|
+
}
|
|
31
|
+
catch (error) {
|
|
32
|
+
logger.error("Failed to initialize job persistence:", error);
|
|
33
|
+
throw error;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Save job to disk
|
|
38
|
+
*/
|
|
39
|
+
async saveJob(job) {
|
|
40
|
+
try {
|
|
41
|
+
const filePath = this.getJobPath(job.id);
|
|
42
|
+
await fs.writeFile(filePath, JSON.stringify(job, null, 2), "utf-8");
|
|
43
|
+
logger.debug(`Job saved: ${job.id}`);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
logger.error(`Failed to save job ${job.id}:`, error);
|
|
47
|
+
// Don't throw - persistence failure shouldn't break job execution
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Load job from disk
|
|
52
|
+
*/
|
|
53
|
+
async loadJob(jobId) {
|
|
54
|
+
try {
|
|
55
|
+
const filePath = this.getJobPath(jobId);
|
|
56
|
+
const content = await fs.readFile(filePath, "utf-8");
|
|
57
|
+
const job = JSON.parse(content);
|
|
58
|
+
logger.debug(`Job loaded: ${jobId}`);
|
|
59
|
+
return job;
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
if (error.code !== "ENOENT") {
|
|
63
|
+
logger.error(`Failed to load job ${jobId}:`, error);
|
|
64
|
+
}
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Delete job from disk
|
|
70
|
+
*/
|
|
71
|
+
async deleteJob(jobId) {
|
|
72
|
+
try {
|
|
73
|
+
const filePath = this.getJobPath(jobId);
|
|
74
|
+
await fs.unlink(filePath);
|
|
75
|
+
logger.debug(`Job deleted: ${jobId}`);
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
if (error.code !== "ENOENT") {
|
|
79
|
+
logger.error(`Failed to delete job ${jobId}:`, error);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Load all jobs from disk
|
|
85
|
+
*/
|
|
86
|
+
async loadAllJobs() {
|
|
87
|
+
try {
|
|
88
|
+
const files = await fs.readdir(this.jobsDir);
|
|
89
|
+
const jobs = [];
|
|
90
|
+
for (const file of files) {
|
|
91
|
+
if (file.endsWith(".json")) {
|
|
92
|
+
const jobId = file.replace(".json", "");
|
|
93
|
+
const job = await this.loadJob(jobId);
|
|
94
|
+
if (job) {
|
|
95
|
+
jobs.push(job);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
logger.info(`Loaded ${jobs.length} jobs from disk`);
|
|
100
|
+
return jobs;
|
|
101
|
+
}
|
|
102
|
+
catch (error) {
|
|
103
|
+
if (error.code === "ENOENT") {
|
|
104
|
+
// Directory doesn't exist yet
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
logger.error("Failed to load jobs:", error);
|
|
108
|
+
return [];
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Clean up old jobs
|
|
113
|
+
*/
|
|
114
|
+
async cleanupExpiredJobs(expirationTime) {
|
|
115
|
+
try {
|
|
116
|
+
const jobs = await this.loadAllJobs();
|
|
117
|
+
const now = Date.now();
|
|
118
|
+
let cleaned = 0;
|
|
119
|
+
for (const job of jobs) {
|
|
120
|
+
if (job.expiresAt < now) {
|
|
121
|
+
await this.deleteJob(job.id);
|
|
122
|
+
cleaned++;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
if (cleaned > 0) {
|
|
126
|
+
logger.info(`Cleaned up ${cleaned} expired jobs from disk`);
|
|
127
|
+
}
|
|
128
|
+
return cleaned;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
logger.error("Failed to cleanup expired jobs:", error);
|
|
132
|
+
return 0;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Get job file path
|
|
137
|
+
*/
|
|
138
|
+
getJobPath(jobId) {
|
|
139
|
+
return path.join(this.jobsDir, `${jobId}.json`);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check if persistence is available
|
|
143
|
+
*/
|
|
144
|
+
async isAvailable() {
|
|
145
|
+
try {
|
|
146
|
+
await fs.access(this.jobsDir);
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
catch {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// ============================================================================
|
|
155
|
+
// Singleton Instance
|
|
156
|
+
// ============================================================================
|
|
157
|
+
export const jobPersistence = new JobPersistence();
|
|
158
|
+
//# sourceMappingURL=jobPersistence.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobPersistence.js","sourceRoot":"","sources":["../../src/queue/jobPersistence.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Job Queue Manager - Noise Reduction Applied
|
|
3
|
+
*
|
|
4
|
+
* Handles long-running validation jobs that exceed MCP timeout limits.
|
|
5
|
+
* Jobs run in background and results are retrieved separately.
|
|
6
|
+
*
|
|
7
|
+
* @format
|
|
8
|
+
*/
|
|
9
|
+
import { EventEmitter } from "node:events";
|
|
10
|
+
export type JobStatus = "queued" | "processing" | "complete" | "failed" | "cancelled";
|
|
11
|
+
export interface Job<TInput = any, TResult = any> {
|
|
12
|
+
id: string;
|
|
13
|
+
type: string;
|
|
14
|
+
input: TInput;
|
|
15
|
+
status: JobStatus;
|
|
16
|
+
progress?: JobProgress;
|
|
17
|
+
result?: TResult;
|
|
18
|
+
error?: string;
|
|
19
|
+
createdAt: number;
|
|
20
|
+
startedAt?: number;
|
|
21
|
+
completedAt?: number;
|
|
22
|
+
expiresAt: number;
|
|
23
|
+
}
|
|
24
|
+
export interface JobProgress {
|
|
25
|
+
phase: string;
|
|
26
|
+
percent: number;
|
|
27
|
+
message?: string;
|
|
28
|
+
details?: Record<string, any>;
|
|
29
|
+
}
|
|
30
|
+
export type JobHandler<TInput = any, TResult = any> = (input: TInput, updateProgress: (progress: JobProgress) => void) => Promise<TResult>;
|
|
31
|
+
export declare class JobQueue extends EventEmitter {
|
|
32
|
+
private jobs;
|
|
33
|
+
private handlers;
|
|
34
|
+
private processing;
|
|
35
|
+
private maxConcurrent;
|
|
36
|
+
private jobTTL;
|
|
37
|
+
private cleanupInterval?;
|
|
38
|
+
constructor(options?: {
|
|
39
|
+
maxConcurrent?: number;
|
|
40
|
+
jobTTL?: number;
|
|
41
|
+
});
|
|
42
|
+
/**
|
|
43
|
+
* Initialize persistence and load existing jobs
|
|
44
|
+
*/
|
|
45
|
+
private initializePersistence;
|
|
46
|
+
/**
|
|
47
|
+
* Register a job handler
|
|
48
|
+
*/
|
|
49
|
+
registerHandler<TInput, TResult>(type: string, handler: JobHandler<TInput, TResult>): void;
|
|
50
|
+
/**
|
|
51
|
+
* Submit a new job
|
|
52
|
+
*/
|
|
53
|
+
submitJob<TInput, TResult>(type: string, input: TInput): Promise<string>;
|
|
54
|
+
/**
|
|
55
|
+
* Get job status
|
|
56
|
+
*/
|
|
57
|
+
getJob(jobId: string): Job | undefined;
|
|
58
|
+
/**
|
|
59
|
+
* Get job status (public API)
|
|
60
|
+
*/
|
|
61
|
+
getJobStatus(jobId: string): {
|
|
62
|
+
exists: boolean;
|
|
63
|
+
status?: JobStatus;
|
|
64
|
+
progress?: JobProgress;
|
|
65
|
+
error?: string;
|
|
66
|
+
};
|
|
67
|
+
/**
|
|
68
|
+
* Get job results
|
|
69
|
+
*/
|
|
70
|
+
getJobResults<TResult>(jobId: string): {
|
|
71
|
+
exists: boolean;
|
|
72
|
+
status?: JobStatus;
|
|
73
|
+
result?: TResult;
|
|
74
|
+
error?: string;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Cancel a job
|
|
78
|
+
*/
|
|
79
|
+
cancelJob(jobId: string): boolean;
|
|
80
|
+
/**
|
|
81
|
+
* List all jobs (for debugging)
|
|
82
|
+
*/
|
|
83
|
+
listJobs(filter?: {
|
|
84
|
+
status?: JobStatus;
|
|
85
|
+
type?: string;
|
|
86
|
+
}): Job[];
|
|
87
|
+
/**
|
|
88
|
+
* Process next job in queue
|
|
89
|
+
*/
|
|
90
|
+
private processNext;
|
|
91
|
+
/**
|
|
92
|
+
* Cleanup expired jobs
|
|
93
|
+
*/
|
|
94
|
+
private cleanupExpiredJobs;
|
|
95
|
+
/**
|
|
96
|
+
* Generate unique job ID
|
|
97
|
+
*/
|
|
98
|
+
private generateJobId;
|
|
99
|
+
/**
|
|
100
|
+
* Get queue statistics
|
|
101
|
+
*/
|
|
102
|
+
getStats(): {
|
|
103
|
+
total: number;
|
|
104
|
+
queued: number;
|
|
105
|
+
processing: number;
|
|
106
|
+
complete: number;
|
|
107
|
+
failed: number;
|
|
108
|
+
cancelled: number;
|
|
109
|
+
};
|
|
110
|
+
/**
|
|
111
|
+
* Shutdown the job queue and cleanup resources
|
|
112
|
+
*/
|
|
113
|
+
shutdown(): void;
|
|
114
|
+
}
|
|
115
|
+
export declare const jobQueue: JobQueue;
|
|
116
|
+
//# sourceMappingURL=jobQueue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jobQueue.d.ts","sourceRoot":"","sources":["../../src/queue/jobQueue.ts"],"names":[],"mappings":"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"}
|