@bryan-thompson/inspector-assessment-client 1.25.1 → 1.25.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (132) hide show
  1. package/dist/assets/{OAuthCallback-CkzX_H4T.js → OAuthCallback-Dl4GYls3.js} +1 -1
  2. package/dist/assets/{OAuthDebugCallback-jZEkm74B.js → OAuthDebugCallback-BdJ38Z-r.js} +1 -1
  3. package/dist/assets/{index-Df9Sx1jt.css → index-cHhcEXbr.css} +4 -0
  4. package/dist/assets/{index-BVx1dGJT.js → index-pfUiTdQb.js} +4 -4
  5. package/dist/index.html +2 -2
  6. package/lib/lib/assessment/configTypes.d.ts +3 -0
  7. package/lib/lib/assessment/configTypes.d.ts.map +1 -1
  8. package/lib/lib/assessment/configTypes.js +11 -6
  9. package/lib/lib/assessment/coreTypes.d.ts +65 -0
  10. package/lib/lib/assessment/coreTypes.d.ts.map +1 -1
  11. package/lib/lib/assessment/extendedTypes.d.ts +127 -0
  12. package/lib/lib/assessment/extendedTypes.d.ts.map +1 -1
  13. package/lib/lib/assessment/resultTypes.d.ts +45 -0
  14. package/lib/lib/assessment/resultTypes.d.ts.map +1 -1
  15. package/lib/services/assessment/AssessmentOrchestrator.d.ts +4 -12
  16. package/lib/services/assessment/AssessmentOrchestrator.d.ts.map +1 -1
  17. package/lib/services/assessment/AssessmentOrchestrator.js +49 -238
  18. package/lib/services/assessment/TestDataGenerator.d.ts +9 -1
  19. package/lib/services/assessment/TestDataGenerator.d.ts.map +1 -1
  20. package/lib/services/assessment/TestDataGenerator.js +32 -6
  21. package/lib/services/assessment/TestScenarioEngine.d.ts +9 -1
  22. package/lib/services/assessment/TestScenarioEngine.d.ts.map +1 -1
  23. package/lib/services/assessment/TestScenarioEngine.js +17 -14
  24. package/lib/services/assessment/ToolClassifier.d.ts +154 -27
  25. package/lib/services/assessment/ToolClassifier.d.ts.map +1 -1
  26. package/lib/services/assessment/ToolClassifier.js +171 -318
  27. package/lib/services/assessment/config/annotationPatterns.d.ts +3 -1
  28. package/lib/services/assessment/config/annotationPatterns.d.ts.map +1 -1
  29. package/lib/services/assessment/config/annotationPatterns.js +5 -2
  30. package/lib/services/assessment/config/architecturePatterns.d.ts +101 -0
  31. package/lib/services/assessment/config/architecturePatterns.d.ts.map +1 -0
  32. package/lib/services/assessment/config/architecturePatterns.js +248 -0
  33. package/lib/services/assessment/config/performanceConfig.d.ts +122 -0
  34. package/lib/services/assessment/config/performanceConfig.d.ts.map +1 -0
  35. package/lib/services/assessment/config/performanceConfig.js +154 -0
  36. package/lib/services/assessment/config/sanitizationPatterns.d.ts +63 -0
  37. package/lib/services/assessment/config/sanitizationPatterns.d.ts.map +1 -0
  38. package/lib/services/assessment/config/sanitizationPatterns.js +223 -0
  39. package/lib/services/assessment/lib/claudeCodeBridge.d.ts +3 -1
  40. package/lib/services/assessment/lib/claudeCodeBridge.d.ts.map +1 -1
  41. package/lib/services/assessment/lib/claudeCodeBridge.js +5 -3
  42. package/lib/services/assessment/lib/concurrencyLimit.d.ts +6 -2
  43. package/lib/services/assessment/lib/concurrencyLimit.d.ts.map +1 -1
  44. package/lib/services/assessment/lib/concurrencyLimit.js +13 -6
  45. package/lib/services/assessment/lib/errors.d.ts +90 -0
  46. package/lib/services/assessment/lib/errors.d.ts.map +1 -0
  47. package/lib/services/assessment/lib/errors.js +136 -0
  48. package/lib/services/assessment/lib/timeoutUtils.d.ts +69 -0
  49. package/lib/services/assessment/lib/timeoutUtils.d.ts.map +1 -0
  50. package/lib/services/assessment/lib/timeoutUtils.js +103 -0
  51. package/lib/services/assessment/modules/BaseAssessor.d.ts +43 -8
  52. package/lib/services/assessment/modules/BaseAssessor.d.ts.map +1 -1
  53. package/lib/services/assessment/modules/BaseAssessor.js +103 -34
  54. package/lib/services/assessment/modules/DeveloperExperienceAssessor.d.ts +38 -1
  55. package/lib/services/assessment/modules/DeveloperExperienceAssessor.d.ts.map +1 -1
  56. package/lib/services/assessment/modules/DeveloperExperienceAssessor.js +185 -19
  57. package/lib/services/assessment/modules/DocumentationAssessor.d.ts +5 -0
  58. package/lib/services/assessment/modules/DocumentationAssessor.d.ts.map +1 -1
  59. package/lib/services/assessment/modules/DocumentationAssessor.js +11 -0
  60. package/lib/services/assessment/modules/ErrorHandlingAssessor.js +1 -1
  61. package/lib/services/assessment/modules/FunctionalityAssessor.d.ts.map +1 -1
  62. package/lib/services/assessment/modules/FunctionalityAssessor.js +6 -3
  63. package/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts +3 -0
  64. package/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts.map +1 -1
  65. package/lib/services/assessment/modules/MCPSpecComplianceAssessor.js +14 -2
  66. package/lib/services/assessment/modules/ManifestValidationAssessor.d.ts.map +1 -1
  67. package/lib/services/assessment/modules/ManifestValidationAssessor.js +7 -2
  68. package/lib/services/assessment/modules/PromptAssessor.d.ts +1 -0
  69. package/lib/services/assessment/modules/PromptAssessor.d.ts.map +1 -1
  70. package/lib/services/assessment/modules/PromptAssessor.js +26 -16
  71. package/lib/services/assessment/modules/ProtocolComplianceAssessor.d.ts.map +1 -1
  72. package/lib/services/assessment/modules/ProtocolComplianceAssessor.js +6 -2
  73. package/lib/services/assessment/modules/ProtocolConformanceAssessor.d.ts +5 -0
  74. package/lib/services/assessment/modules/ProtocolConformanceAssessor.d.ts.map +1 -1
  75. package/lib/services/assessment/modules/ProtocolConformanceAssessor.js +15 -0
  76. package/lib/services/assessment/modules/ResourceAssessor.d.ts.map +1 -1
  77. package/lib/services/assessment/modules/ResourceAssessor.js +8 -2
  78. package/lib/services/assessment/modules/SecurityAssessor.d.ts +3 -171
  79. package/lib/services/assessment/modules/SecurityAssessor.d.ts.map +1 -1
  80. package/lib/services/assessment/modules/SecurityAssessor.js +25 -1480
  81. package/lib/services/assessment/modules/ToolAnnotationAssessor.d.ts +27 -28
  82. package/lib/services/assessment/modules/ToolAnnotationAssessor.d.ts.map +1 -1
  83. package/lib/services/assessment/modules/ToolAnnotationAssessor.js +340 -863
  84. package/lib/services/assessment/modules/UsabilityAssessor.d.ts +5 -0
  85. package/lib/services/assessment/modules/UsabilityAssessor.d.ts.map +1 -1
  86. package/lib/services/assessment/modules/UsabilityAssessor.js +11 -0
  87. package/lib/services/assessment/modules/annotations/AnnotationDeceptionDetector.d.ts +57 -0
  88. package/lib/services/assessment/modules/annotations/AnnotationDeceptionDetector.d.ts.map +1 -0
  89. package/lib/services/assessment/modules/annotations/AnnotationDeceptionDetector.js +176 -0
  90. package/lib/services/assessment/modules/annotations/ArchitectureDetector.d.ts +67 -0
  91. package/lib/services/assessment/modules/annotations/ArchitectureDetector.d.ts.map +1 -0
  92. package/lib/services/assessment/modules/annotations/ArchitectureDetector.js +239 -0
  93. package/lib/services/assessment/modules/annotations/BehaviorInference.d.ts +46 -0
  94. package/lib/services/assessment/modules/annotations/BehaviorInference.d.ts.map +1 -0
  95. package/lib/services/assessment/modules/annotations/BehaviorInference.js +394 -0
  96. package/lib/services/assessment/modules/annotations/DescriptionAnalyzer.d.ts +64 -0
  97. package/lib/services/assessment/modules/annotations/DescriptionAnalyzer.d.ts.map +1 -0
  98. package/lib/services/assessment/modules/annotations/DescriptionAnalyzer.js +304 -0
  99. package/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.d.ts +43 -0
  100. package/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.d.ts.map +1 -0
  101. package/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.js +276 -0
  102. package/lib/services/assessment/modules/annotations/SchemaAnalyzer.d.ts +122 -0
  103. package/lib/services/assessment/modules/annotations/SchemaAnalyzer.d.ts.map +1 -0
  104. package/lib/services/assessment/modules/annotations/SchemaAnalyzer.js +388 -0
  105. package/lib/services/assessment/modules/annotations/index.d.ts +13 -0
  106. package/lib/services/assessment/modules/annotations/index.d.ts.map +1 -0
  107. package/lib/services/assessment/modules/annotations/index.js +15 -0
  108. package/lib/services/assessment/modules/index.d.ts +10 -0
  109. package/lib/services/assessment/modules/index.d.ts.map +1 -1
  110. package/lib/services/assessment/modules/index.js +13 -0
  111. package/lib/services/assessment/modules/securityTests/SanitizationDetector.d.ts +125 -0
  112. package/lib/services/assessment/modules/securityTests/SanitizationDetector.d.ts.map +1 -0
  113. package/lib/services/assessment/modules/securityTests/SanitizationDetector.js +345 -0
  114. package/lib/services/assessment/modules/securityTests/SecurityPayloadGenerator.d.ts +33 -0
  115. package/lib/services/assessment/modules/securityTests/SecurityPayloadGenerator.d.ts.map +1 -0
  116. package/lib/services/assessment/modules/securityTests/SecurityPayloadGenerator.js +128 -0
  117. package/lib/services/assessment/modules/securityTests/SecurityPayloadTester.d.ts +67 -0
  118. package/lib/services/assessment/modules/securityTests/SecurityPayloadTester.d.ts.map +1 -0
  119. package/lib/services/assessment/modules/securityTests/SecurityPayloadTester.js +372 -0
  120. package/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts +178 -0
  121. package/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts.map +1 -0
  122. package/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.js +1207 -0
  123. package/lib/services/assessment/modules/securityTests/index.d.ts +8 -0
  124. package/lib/services/assessment/modules/securityTests/index.d.ts.map +1 -0
  125. package/lib/services/assessment/modules/securityTests/index.js +7 -0
  126. package/lib/services/assessment/orchestratorHelpers.d.ts +83 -0
  127. package/lib/services/assessment/orchestratorHelpers.d.ts.map +1 -0
  128. package/lib/services/assessment/orchestratorHelpers.js +212 -0
  129. package/lib/services/assessment/tool-classifier-patterns.d.ts +85 -0
  130. package/lib/services/assessment/tool-classifier-patterns.d.ts.map +1 -0
  131. package/lib/services/assessment/tool-classifier-patterns.js +365 -0
  132. package/package.json +1 -1
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Sanitization Library Pattern Configuration
3
+ *
4
+ * Detects security libraries and sanitization practices in tool metadata/descriptions.
5
+ * Used by SanitizationDetector to reduce false positives when tools have proper
6
+ * input sanitization in place.
7
+ *
8
+ * @see Issue #56: Improve security analysis granularity
9
+ */
10
+ /**
11
+ * Categories of sanitization approaches
12
+ */
13
+ export type SanitizationCategory = "xss" | "html" | "sql" | "input" | "encoding" | "framework";
14
+ /**
15
+ * Pattern definition for detecting a specific sanitization library
16
+ */
17
+ export interface SanitizationLibraryPattern {
18
+ /** Library name for reporting */
19
+ name: string;
20
+ /** Regex patterns to detect this library */
21
+ patterns: RegExp[];
22
+ /** Type of sanitization this library provides */
23
+ category: SanitizationCategory;
24
+ /** Confidence boost when detected (15-25 points) */
25
+ confidenceBoost: number;
26
+ /** Languages this library is typically used with */
27
+ languageHint?: string[];
28
+ }
29
+ /**
30
+ * Known sanitization libraries with detection patterns
31
+ *
32
+ * Detection is conservative - patterns match explicit mentions of libraries
33
+ * rather than generic terms that could have other meanings.
34
+ */
35
+ export declare const SANITIZATION_LIBRARY_PATTERNS: SanitizationLibraryPattern[];
36
+ /**
37
+ * Generic sanitization keyword patterns
38
+ *
39
+ * These are less specific than library patterns and provide lower confidence boost.
40
+ * Used when no specific library is detected but sanitization is mentioned.
41
+ */
42
+ export declare const GENERIC_SANITIZATION_KEYWORDS: RegExp[];
43
+ /**
44
+ * Response-time sanitization indicators
45
+ *
46
+ * Patterns that indicate sanitization was applied to the response.
47
+ * These provide evidence that input was processed safely.
48
+ */
49
+ export declare const RESPONSE_SANITIZATION_INDICATORS: RegExp[];
50
+ /**
51
+ * Confidence boost values for different detection types
52
+ */
53
+ export declare const CONFIDENCE_BOOSTS: {
54
+ /** Specific library detected (e.g., DOMPurify) */
55
+ readonly SPECIFIC_LIBRARY: 25;
56
+ /** Generic sanitization keyword detected */
57
+ readonly GENERIC_KEYWORD: 8;
58
+ /** Response-time sanitization evidence */
59
+ readonly RESPONSE_EVIDENCE: 10;
60
+ /** Maximum total adjustment (cap) */
61
+ readonly MAX_ADJUSTMENT: 50;
62
+ };
63
+ //# sourceMappingURL=sanitizationPatterns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sanitizationPatterns.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/config/sanitizationPatterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAC5B,KAAK,GACL,MAAM,GACN,KAAK,GACL,OAAO,GACP,UAAU,GACV,WAAW,CAAC;AAEhB;;GAEG;AACH,MAAM,WAAW,0BAA0B;IACzC,iCAAiC;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iDAAiD;IACjD,QAAQ,EAAE,oBAAoB,CAAC;IAC/B,oDAAoD;IACpD,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,EAAE,0BAA0B,EAkKrE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,6BAA6B,EAAE,MAAM,EAWjD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,gCAAgC,EAAE,MAAM,EAWpD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B,kDAAkD;;IAElD,4CAA4C;;IAE5C,0CAA0C;;IAE1C,qCAAqC;;CAE7B,CAAC"}
@@ -0,0 +1,223 @@
1
+ /**
2
+ * Sanitization Library Pattern Configuration
3
+ *
4
+ * Detects security libraries and sanitization practices in tool metadata/descriptions.
5
+ * Used by SanitizationDetector to reduce false positives when tools have proper
6
+ * input sanitization in place.
7
+ *
8
+ * @see Issue #56: Improve security analysis granularity
9
+ */
10
+ /**
11
+ * Known sanitization libraries with detection patterns
12
+ *
13
+ * Detection is conservative - patterns match explicit mentions of libraries
14
+ * rather than generic terms that could have other meanings.
15
+ */
16
+ export const SANITIZATION_LIBRARY_PATTERNS = [
17
+ // XSS Prevention Libraries
18
+ {
19
+ name: "DOMPurify",
20
+ patterns: [/\bDOMPurify\b/i, /\bdom[\-_]?purify\b/i],
21
+ category: "xss",
22
+ confidenceBoost: 25,
23
+ languageHint: ["javascript", "typescript"],
24
+ },
25
+ {
26
+ name: "xss",
27
+ patterns: [
28
+ /\bxss\s*\(/i,
29
+ /require\s*\(\s*['"]xss['"]\s*\)/i,
30
+ /import.*from\s+['"]xss['"]/i,
31
+ /xss\s+library/i,
32
+ ],
33
+ category: "xss",
34
+ confidenceBoost: 25,
35
+ languageHint: ["javascript", "typescript"],
36
+ },
37
+ {
38
+ name: "bleach",
39
+ patterns: [/\bbleach\b/i, /bleach\.clean/i, /import\s+bleach/i],
40
+ category: "xss",
41
+ confidenceBoost: 25,
42
+ languageHint: ["python"],
43
+ },
44
+ // HTML Sanitization
45
+ {
46
+ name: "sanitize-html",
47
+ patterns: [
48
+ /\bsanitize[\-_]?html\b/i,
49
+ /sanitizeHtml\s*\(/i,
50
+ /require\s*\(\s*['"]sanitize-html['"]\s*\)/i,
51
+ ],
52
+ category: "html",
53
+ confidenceBoost: 20,
54
+ languageHint: ["javascript", "typescript"],
55
+ },
56
+ {
57
+ name: "escape-html",
58
+ patterns: [
59
+ /\bescape[\-_]?html\b/i,
60
+ /escapeHtml\s*\(/i,
61
+ /require\s*\(\s*['"]escape-html['"]\s*\)/i,
62
+ ],
63
+ category: "encoding",
64
+ confidenceBoost: 15,
65
+ languageHint: ["javascript", "typescript"],
66
+ },
67
+ {
68
+ name: "he",
69
+ patterns: [
70
+ /\bhe\.encode/i,
71
+ /\bhe\.escape/i,
72
+ /require\s*\(\s*['"]he['"]\s*\)/i,
73
+ ],
74
+ category: "encoding",
75
+ confidenceBoost: 15,
76
+ languageHint: ["javascript", "typescript"],
77
+ },
78
+ // Input Validation Libraries
79
+ {
80
+ name: "validator",
81
+ patterns: [
82
+ /validator\.js/i,
83
+ /\bvalidatorjs\b/i,
84
+ /validator\.(isEmail|escape|sanitize|isURL|isAlphanumeric)/i,
85
+ /require\s*\(\s*['"]validator['"]\s*\)/i,
86
+ ],
87
+ category: "input",
88
+ confidenceBoost: 20,
89
+ languageHint: ["javascript", "typescript"],
90
+ },
91
+ {
92
+ name: "Zod",
93
+ patterns: [
94
+ /\bz\.string\s*\(\)/i,
95
+ /\bz\.object\s*\(/i,
96
+ /\bzod\b/i,
97
+ /\.safeParse\s*\(/i,
98
+ /import.*from\s+['"]zod['"]/i,
99
+ ],
100
+ category: "input",
101
+ confidenceBoost: 15,
102
+ languageHint: ["typescript"],
103
+ },
104
+ {
105
+ name: "Joi",
106
+ patterns: [
107
+ /\bJoi\b/i,
108
+ /Joi\.string\s*\(\)/i,
109
+ /Joi\.object\s*\(/i,
110
+ /\.validate\s*\(/i,
111
+ /require\s*\(\s*['"]joi['"]\s*\)/i,
112
+ ],
113
+ category: "input",
114
+ confidenceBoost: 15,
115
+ languageHint: ["javascript", "typescript"],
116
+ },
117
+ {
118
+ name: "yup",
119
+ patterns: [
120
+ /\byup\b/i,
121
+ /yup\.string\s*\(\)/i,
122
+ /yup\.object\s*\(/i,
123
+ /import.*from\s+['"]yup['"]/i,
124
+ ],
125
+ category: "input",
126
+ confidenceBoost: 15,
127
+ languageHint: ["javascript", "typescript"],
128
+ },
129
+ {
130
+ name: "pydantic",
131
+ patterns: [
132
+ /\bpydantic\b/i,
133
+ /from\s+pydantic\s+import/i,
134
+ /BaseModel/i,
135
+ /Field\s*\(/i,
136
+ ],
137
+ category: "input",
138
+ confidenceBoost: 15,
139
+ languageHint: ["python"],
140
+ },
141
+ // SQL Injection Prevention
142
+ {
143
+ name: "parameterized-queries",
144
+ patterns: [
145
+ /prepared[\s_]?statement/i,
146
+ /parameterized[\s_]?quer/i,
147
+ /\$\d+\s/i, // PostgreSQL style $1, $2
148
+ /:\w+\s/i, // Named parameters :name
149
+ /\?\s/i, // Positional parameters ?
150
+ ],
151
+ category: "sql",
152
+ confidenceBoost: 20,
153
+ languageHint: ["sql"],
154
+ },
155
+ // Framework-level Protection
156
+ {
157
+ name: "helmet",
158
+ patterns: [
159
+ /\bhelmet\b/i,
160
+ /helmet\s*\(\)/i,
161
+ /require\s*\(\s*['"]helmet['"]\s*\)/i,
162
+ ],
163
+ category: "framework",
164
+ confidenceBoost: 10,
165
+ languageHint: ["javascript", "typescript"],
166
+ },
167
+ {
168
+ name: "django-csrf",
169
+ patterns: [/csrf_token/i, /CsrfViewMiddleware/i, /@csrf_protect/i],
170
+ category: "framework",
171
+ confidenceBoost: 10,
172
+ languageHint: ["python"],
173
+ },
174
+ ];
175
+ /**
176
+ * Generic sanitization keyword patterns
177
+ *
178
+ * These are less specific than library patterns and provide lower confidence boost.
179
+ * Used when no specific library is detected but sanitization is mentioned.
180
+ */
181
+ export const GENERIC_SANITIZATION_KEYWORDS = [
182
+ /\bsanitiz(e|ed|es|ing|ation)\b/i,
183
+ /\bescap(e|ed|es|ing)\b/i,
184
+ /\bencod(e|ed|es|ing)\b/i,
185
+ /\bvalidat(e|ed|es|ing|ion)\b/i,
186
+ /\bfilter(ed|s|ing)?\b/i,
187
+ /\bclean(ed|s|ing)?\b/i,
188
+ /\bpurif(y|ied|ies|ying)\b/i,
189
+ /\bnormaliz(e|ed|es|ing)\b/i,
190
+ /\bstrip(ped|s|ping)?\b/i,
191
+ /\btrim(med|s|ming)?\b/i,
192
+ ];
193
+ /**
194
+ * Response-time sanitization indicators
195
+ *
196
+ * Patterns that indicate sanitization was applied to the response.
197
+ * These provide evidence that input was processed safely.
198
+ */
199
+ export const RESPONSE_SANITIZATION_INDICATORS = [
200
+ /\[sanitized\]/i,
201
+ /\[filtered\]/i,
202
+ /\[redacted\]/i,
203
+ /\[removed\]/i,
204
+ /\[cleaned\]/i,
205
+ /\[escaped\]/i,
206
+ /input.*sanitized/i,
207
+ /content.*filtered/i,
208
+ /value.*cleaned/i,
209
+ /data.*validated/i,
210
+ ];
211
+ /**
212
+ * Confidence boost values for different detection types
213
+ */
214
+ export const CONFIDENCE_BOOSTS = {
215
+ /** Specific library detected (e.g., DOMPurify) */
216
+ SPECIFIC_LIBRARY: 25,
217
+ /** Generic sanitization keyword detected */
218
+ GENERIC_KEYWORD: 8,
219
+ /** Response-time sanitization evidence */
220
+ RESPONSE_EVIDENCE: 10,
221
+ /** Maximum total adjustment (cap) */
222
+ MAX_ADJUSTMENT: 50,
223
+ };
@@ -12,6 +12,7 @@
12
12
  */
13
13
  import type { Tool } from "@modelcontextprotocol/sdk/types.js";
14
14
  import type { AUPCategory } from "../../../lib/assessmentTypes.js";
15
+ import { Logger } from "./logger.js";
15
16
  /**
16
17
  * Response from Claude Code execution
17
18
  */
@@ -103,7 +104,8 @@ export declare const FULL_CLAUDE_CODE_CONFIG: ClaudeCodeBridgeConfig;
103
104
  export declare class ClaudeCodeBridge {
104
105
  private config;
105
106
  private isAvailable;
106
- constructor(config: ClaudeCodeBridgeConfig);
107
+ private logger?;
108
+ constructor(config: ClaudeCodeBridgeConfig, logger?: Logger);
107
109
  /**
108
110
  * Check if a specific feature is enabled
109
111
  * Note: annotationInference is an alias for behaviorInference
@@ -1 +1 @@
1
- {"version":3,"file":"claudeCodeBridge.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/lib/claudeCodeBridge.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claudeCodeBridge.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/lib/claudeCodeBridge.ts"],"names":[],"mappings":"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"}
@@ -50,11 +50,13 @@ export const FULL_CLAUDE_CODE_CONFIG = {
50
50
  export class ClaudeCodeBridge {
51
51
  config;
52
52
  isAvailable = false;
53
- constructor(config) {
53
+ logger;
54
+ constructor(config, logger) {
54
55
  this.config = config;
56
+ this.logger = logger;
55
57
  this.isAvailable = this.checkClaudeAvailability();
56
58
  if (!this.isAvailable) {
57
- console.warn("[ClaudeCodeBridge] Claude CLI not available - features will be disabled");
59
+ this.logger?.warn("Claude CLI not available - features will be disabled");
58
60
  }
59
61
  }
60
62
  /**
@@ -151,7 +153,7 @@ export class ClaudeCodeBridge {
151
153
  return JSON.parse(jsonStr);
152
154
  }
153
155
  catch {
154
- console.warn("[ClaudeCodeBridge] Failed to parse JSON response");
156
+ this.logger?.warn("Failed to parse JSON response");
155
157
  return null;
156
158
  }
157
159
  }
@@ -2,6 +2,7 @@
2
2
  * Simple concurrency limiter for parallel async operations
3
3
  * Provides the same interface as p-limit but is CJS-compatible
4
4
  */
5
+ import { Logger } from "./logger.js";
5
6
  /**
6
7
  * Warning threshold for queue depth monitoring.
7
8
  * If queue exceeds this size, a warning is emitted to help diagnose
@@ -12,14 +13,17 @@
12
13
  *
13
14
  * Threshold of 10,000 provides ~146% headroom to accommodate larger
14
15
  * tool sets while catching true runaway scenarios.
16
+ *
17
+ * @see PerformanceConfig.queueWarningThreshold (Issue #37)
15
18
  */
16
- export declare const QUEUE_WARNING_THRESHOLD = 10000;
19
+ export declare const QUEUE_WARNING_THRESHOLD: number;
17
20
  export type LimitFunction = <T>(fn: () => Promise<T>) => Promise<T>;
18
21
  /**
19
22
  * Creates a concurrency limiter that allows only a specified number
20
23
  * of async operations to run simultaneously
21
24
  *
22
25
  * @param concurrency - Maximum number of concurrent operations
26
+ * @param logger - Optional logger instance for queue depth warnings
23
27
  * @returns A function that wraps async operations with the concurrency limit
24
28
  *
25
29
  * @example
@@ -28,5 +32,5 @@ export type LimitFunction = <T>(fn: () => Promise<T>) => Promise<T>;
28
32
  * items.map(item => limit(() => processItem(item)))
29
33
  * );
30
34
  */
31
- export declare function createConcurrencyLimit(concurrency: number): LimitFunction;
35
+ export declare function createConcurrencyLimit(concurrency: number, logger?: Logger): LimitFunction;
32
36
  //# sourceMappingURL=concurrencyLimit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"concurrencyLimit.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/lib/concurrencyLimit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;;;;;;GAUG;AACH,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEpE;;;;;;;;;;;;GAYG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,aAAa,CAuDzE"}
1
+ {"version":3,"file":"concurrencyLimit.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/lib/concurrencyLimit.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,QACc,CAAC;AAEnD,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CACpC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,MAAM,GACd,aAAa,CAwDf"}
@@ -2,6 +2,7 @@
2
2
  * Simple concurrency limiter for parallel async operations
3
3
  * Provides the same interface as p-limit but is CJS-compatible
4
4
  */
5
+ import { DEFAULT_PERFORMANCE_CONFIG } from "../config/performanceConfig.js";
5
6
  /**
6
7
  * Warning threshold for queue depth monitoring.
7
8
  * If queue exceeds this size, a warning is emitted to help diagnose
@@ -12,13 +13,16 @@
12
13
  *
13
14
  * Threshold of 10,000 provides ~146% headroom to accommodate larger
14
15
  * tool sets while catching true runaway scenarios.
16
+ *
17
+ * @see PerformanceConfig.queueWarningThreshold (Issue #37)
15
18
  */
16
- export const QUEUE_WARNING_THRESHOLD = 10000;
19
+ export const QUEUE_WARNING_THRESHOLD = DEFAULT_PERFORMANCE_CONFIG.queueWarningThreshold;
17
20
  /**
18
21
  * Creates a concurrency limiter that allows only a specified number
19
22
  * of async operations to run simultaneously
20
23
  *
21
24
  * @param concurrency - Maximum number of concurrent operations
25
+ * @param logger - Optional logger instance for queue depth warnings
22
26
  * @returns A function that wraps async operations with the concurrency limit
23
27
  *
24
28
  * @example
@@ -27,7 +31,7 @@ export const QUEUE_WARNING_THRESHOLD = 10000;
27
31
  * items.map(item => limit(() => processItem(item)))
28
32
  * );
29
33
  */
30
- export function createConcurrencyLimit(concurrency) {
34
+ export function createConcurrencyLimit(concurrency, logger) {
31
35
  if (concurrency < 1) {
32
36
  throw new Error("Concurrency must be at least 1");
33
37
  }
@@ -62,10 +66,13 @@ export function createConcurrencyLimit(concurrency) {
62
66
  // Only warn once per limiter instance to avoid log spam
63
67
  if (queue.length > QUEUE_WARNING_THRESHOLD && !hasWarned) {
64
68
  hasWarned = true;
65
- console.warn(`[concurrencyLimit] Queue depth: ${queue.length} ` +
66
- `(threshold: ${QUEUE_WARNING_THRESHOLD}). ` +
67
- `Active: ${activeCount}/${concurrency}. ` +
68
- `This may indicate a slow/stalled server.`);
69
+ logger?.warn("Queue depth exceeded threshold", {
70
+ queueDepth: queue.length,
71
+ threshold: QUEUE_WARNING_THRESHOLD,
72
+ activeCount,
73
+ concurrency,
74
+ message: "This may indicate a slow/stalled server",
75
+ });
69
76
  }
70
77
  next();
71
78
  });
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Assessment Error Types
3
+ *
4
+ * Provides standardized error handling across all assessment modules.
5
+ * See docs/ERROR_HANDLING_CONVENTIONS.md for usage guidelines.
6
+ */
7
+ /**
8
+ * Error categories for classification and debugging
9
+ */
10
+ export declare enum ErrorCategory {
11
+ /** Network connectivity issues (ECONNREFUSED, DNS failures, etc.) */
12
+ CONNECTION = "CONNECTION",
13
+ /** MCP protocol violations or unexpected responses */
14
+ PROTOCOL = "PROTOCOL",
15
+ /** Input validation failures (invalid parameters, missing fields) */
16
+ VALIDATION = "VALIDATION",
17
+ /** Operation exceeded time limit */
18
+ TIMEOUT = "TIMEOUT",
19
+ /** JSON or data parsing failures */
20
+ PARSE = "PARSE",
21
+ /** Unclassified errors */
22
+ UNKNOWN = "UNKNOWN"
23
+ }
24
+ /**
25
+ * Custom error class for assessment operations
26
+ *
27
+ * @example
28
+ * throw new AssessmentError(
29
+ * 'Failed to connect to MCP server',
30
+ * ErrorCategory.CONNECTION,
31
+ * false, // not recoverable
32
+ * { url: 'http://localhost:3000', attempt: 3 }
33
+ * );
34
+ */
35
+ export declare class AssessmentError extends Error {
36
+ readonly code: ErrorCategory;
37
+ readonly recoverable: boolean;
38
+ readonly context?: Record<string, unknown>;
39
+ constructor(message: string, code: ErrorCategory, recoverable?: boolean, context?: Record<string, unknown>);
40
+ /**
41
+ * Create a structured object for serialization
42
+ */
43
+ toJSON(): ErrorInfo;
44
+ }
45
+ /**
46
+ * Structured error information for result objects
47
+ */
48
+ export interface ErrorInfo {
49
+ /** Human-readable error message */
50
+ message: string;
51
+ /** Error category for classification */
52
+ code: ErrorCategory;
53
+ /** Whether the operation can be retried */
54
+ recoverable: boolean;
55
+ /** Stack trace (optional, for debugging) */
56
+ stack?: string;
57
+ /** Additional context about the error */
58
+ context?: Record<string, unknown>;
59
+ }
60
+ /**
61
+ * Interface for result objects that may contain errors
62
+ *
63
+ * @example
64
+ * interface ToolTestResult extends ErrorResult {
65
+ * toolName: string;
66
+ * passed: boolean;
67
+ * }
68
+ */
69
+ export interface ErrorResult {
70
+ error?: ErrorInfo;
71
+ }
72
+ /**
73
+ * Type guard to check if a value is an AssessmentError
74
+ */
75
+ export declare function isAssessmentError(error: unknown): error is AssessmentError;
76
+ /**
77
+ * Categorize an error based on its message content
78
+ *
79
+ * @param error - The error to categorize
80
+ * @returns The appropriate ErrorCategory
81
+ */
82
+ export declare function categorizeError(error: unknown): ErrorCategory;
83
+ /**
84
+ * Extract error message from various error types
85
+ *
86
+ * @param error - The error to extract message from
87
+ * @returns A string error message
88
+ */
89
+ export declare function extractErrorMessage(error: unknown): string;
90
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/lib/errors.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;GAEG;AACH,oBAAY,aAAa;IACvB,qEAAqE;IACrE,UAAU,eAAe;IACzB,sDAAsD;IACtD,QAAQ,aAAa;IACrB,qEAAqE;IACrE,UAAU,eAAe;IACzB,oCAAoC;IACpC,OAAO,YAAY;IACnB,oCAAoC;IACpC,KAAK,UAAU;IACf,0BAA0B;IAC1B,OAAO,YAAY;CACpB;AAED;;;;;;;;;;GAUG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,IAAI,EAAE,aAAa;aACnB,WAAW,EAAE,OAAO;aACpB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAHjD,OAAO,EAAE,MAAM,EACC,IAAI,EAAE,aAAa,EACnB,WAAW,GAAE,OAAc,EAC3B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAUnD;;OAEG;IACH,MAAM,IAAI,SAAS;CASpB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,IAAI,EAAE,aAAa,CAAC;IACpB,2CAA2C;IAC3C,WAAW,EAAE,OAAO,CAAC;IACrB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAsC7D;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAwB1D"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Assessment Error Types
3
+ *
4
+ * Provides standardized error handling across all assessment modules.
5
+ * See docs/ERROR_HANDLING_CONVENTIONS.md for usage guidelines.
6
+ */
7
+ /**
8
+ * Error categories for classification and debugging
9
+ */
10
+ export var ErrorCategory;
11
+ (function (ErrorCategory) {
12
+ /** Network connectivity issues (ECONNREFUSED, DNS failures, etc.) */
13
+ ErrorCategory["CONNECTION"] = "CONNECTION";
14
+ /** MCP protocol violations or unexpected responses */
15
+ ErrorCategory["PROTOCOL"] = "PROTOCOL";
16
+ /** Input validation failures (invalid parameters, missing fields) */
17
+ ErrorCategory["VALIDATION"] = "VALIDATION";
18
+ /** Operation exceeded time limit */
19
+ ErrorCategory["TIMEOUT"] = "TIMEOUT";
20
+ /** JSON or data parsing failures */
21
+ ErrorCategory["PARSE"] = "PARSE";
22
+ /** Unclassified errors */
23
+ ErrorCategory["UNKNOWN"] = "UNKNOWN";
24
+ })(ErrorCategory || (ErrorCategory = {}));
25
+ /**
26
+ * Custom error class for assessment operations
27
+ *
28
+ * @example
29
+ * throw new AssessmentError(
30
+ * 'Failed to connect to MCP server',
31
+ * ErrorCategory.CONNECTION,
32
+ * false, // not recoverable
33
+ * { url: 'http://localhost:3000', attempt: 3 }
34
+ * );
35
+ */
36
+ export class AssessmentError extends Error {
37
+ code;
38
+ recoverable;
39
+ context;
40
+ constructor(message, code, recoverable = true, context) {
41
+ super(message);
42
+ this.code = code;
43
+ this.recoverable = recoverable;
44
+ this.context = context;
45
+ this.name = "AssessmentError";
46
+ // Maintains proper stack trace in V8 environments
47
+ if (Error.captureStackTrace) {
48
+ Error.captureStackTrace(this, AssessmentError);
49
+ }
50
+ }
51
+ /**
52
+ * Create a structured object for serialization
53
+ */
54
+ toJSON() {
55
+ return {
56
+ message: this.message,
57
+ code: this.code,
58
+ recoverable: this.recoverable,
59
+ stack: this.stack,
60
+ context: this.context,
61
+ };
62
+ }
63
+ }
64
+ /**
65
+ * Type guard to check if a value is an AssessmentError
66
+ */
67
+ export function isAssessmentError(error) {
68
+ return error instanceof AssessmentError;
69
+ }
70
+ /**
71
+ * Categorize an error based on its message content
72
+ *
73
+ * @param error - The error to categorize
74
+ * @returns The appropriate ErrorCategory
75
+ */
76
+ export function categorizeError(error) {
77
+ const message = extractErrorMessage(error).toLowerCase();
78
+ if (message.includes("timeout") || message.includes("timed out")) {
79
+ return ErrorCategory.TIMEOUT;
80
+ }
81
+ if (message.includes("connection") ||
82
+ message.includes("econnrefused") ||
83
+ message.includes("enotfound") ||
84
+ message.includes("network")) {
85
+ return ErrorCategory.CONNECTION;
86
+ }
87
+ if (message.includes("parse") ||
88
+ message.includes("json") ||
89
+ message.includes("syntax")) {
90
+ return ErrorCategory.PARSE;
91
+ }
92
+ if (message.includes("protocol") ||
93
+ message.includes("mcp") ||
94
+ message.includes("invalid response")) {
95
+ return ErrorCategory.PROTOCOL;
96
+ }
97
+ if (message.includes("invalid") ||
98
+ message.includes("required") ||
99
+ message.includes("missing") ||
100
+ message.includes("validation")) {
101
+ return ErrorCategory.VALIDATION;
102
+ }
103
+ return ErrorCategory.UNKNOWN;
104
+ }
105
+ /**
106
+ * Extract error message from various error types
107
+ *
108
+ * @param error - The error to extract message from
109
+ * @returns A string error message
110
+ */
111
+ export function extractErrorMessage(error) {
112
+ if (typeof error === "string") {
113
+ return error;
114
+ }
115
+ if (error instanceof Error) {
116
+ return error.message;
117
+ }
118
+ if (error && typeof error === "object") {
119
+ const err = error;
120
+ if (typeof err.message === "string") {
121
+ return err.message;
122
+ }
123
+ if (typeof err.error === "string") {
124
+ return err.error;
125
+ }
126
+ if (err.error && typeof err.error === "object") {
127
+ return extractErrorMessage(err.error);
128
+ }
129
+ }
130
+ try {
131
+ return JSON.stringify(error);
132
+ }
133
+ catch {
134
+ return String(error);
135
+ }
136
+ }