@bryan-thompson/inspector-assessment 1.26.5 → 1.26.7

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 (102) hide show
  1. package/cli/build/__tests__/assessment-runner/assessment-executor.test.js +248 -0
  2. package/cli/build/__tests__/assessment-runner/config-builder.test.js +289 -0
  3. package/cli/build/__tests__/assessment-runner/index.test.js +41 -0
  4. package/cli/build/__tests__/assessment-runner/server-config.test.js +249 -0
  5. package/cli/build/__tests__/assessment-runner/server-connection.test.js +221 -0
  6. package/cli/build/__tests__/assessment-runner/source-loader.test.js +341 -0
  7. package/cli/build/__tests__/assessment-runner/tool-wrapper.test.js +114 -0
  8. package/cli/build/__tests__/assessment-runner-facade.test.js +118 -0
  9. package/cli/build/assess-full.js +26 -1254
  10. package/cli/build/lib/assessment-runner/assessment-executor.js +323 -0
  11. package/cli/build/lib/assessment-runner/config-builder.js +127 -0
  12. package/cli/build/lib/assessment-runner/index.js +20 -0
  13. package/cli/build/lib/assessment-runner/server-config.js +78 -0
  14. package/cli/build/lib/assessment-runner/server-connection.js +80 -0
  15. package/cli/build/lib/assessment-runner/source-loader.js +139 -0
  16. package/cli/build/lib/assessment-runner/tool-wrapper.js +40 -0
  17. package/cli/build/lib/assessment-runner/types.js +8 -0
  18. package/cli/build/lib/assessment-runner.js +12 -0
  19. package/cli/build/lib/cli-parser.js +419 -0
  20. package/cli/build/lib/comparison-handler.js +84 -0
  21. package/cli/build/lib/result-output.js +154 -0
  22. package/cli/package.json +1 -1
  23. package/client/dist/assets/{OAuthCallback-DpdInvWI.js → OAuthCallback-kF1MLuwg.js} +1 -1
  24. package/client/dist/assets/{OAuthDebugCallback-D1ImpKK5.js → OAuthDebugCallback-Nv-8u0GR.js} +1 -1
  25. package/client/dist/assets/{index-umcoGmYw.js → index-CCiX5wkF.js} +4 -4
  26. package/client/dist/index.html +1 -1
  27. package/client/lib/lib/assessment/configTypes.d.ts +2 -0
  28. package/client/lib/lib/assessment/configTypes.d.ts.map +1 -1
  29. package/client/lib/lib/securityPatterns.d.ts +4 -2
  30. package/client/lib/lib/securityPatterns.d.ts.map +1 -1
  31. package/client/lib/lib/securityPatterns.js +146 -2
  32. package/client/lib/services/assessment/modules/AUPComplianceAssessor.js +9 -9
  33. package/client/lib/services/assessment/modules/AuthenticationAssessor.js +4 -4
  34. package/client/lib/services/assessment/modules/BaseAssessor.d.ts +0 -14
  35. package/client/lib/services/assessment/modules/BaseAssessor.d.ts.map +1 -1
  36. package/client/lib/services/assessment/modules/BaseAssessor.js +1 -33
  37. package/client/lib/services/assessment/modules/CrossCapabilitySecurityAssessor.js +1 -1
  38. package/client/lib/services/assessment/modules/DeveloperExperienceAssessor.js +1 -1
  39. package/client/lib/services/assessment/modules/DocumentationAssessor.js +2 -2
  40. package/client/lib/services/assessment/modules/ErrorHandlingAssessor.d.ts.map +1 -1
  41. package/client/lib/services/assessment/modules/ErrorHandlingAssessor.js +8 -8
  42. package/client/lib/services/assessment/modules/ExternalAPIScannerAssessor.d.ts.map +1 -1
  43. package/client/lib/services/assessment/modules/ExternalAPIScannerAssessor.js +3 -3
  44. package/client/lib/services/assessment/modules/FunctionalityAssessor.js +9 -9
  45. package/client/lib/services/assessment/modules/MCPSpecComplianceAssessor.d.ts.map +1 -1
  46. package/client/lib/services/assessment/modules/MCPSpecComplianceAssessor.js +12 -12
  47. package/client/lib/services/assessment/modules/ManifestValidationAssessor.d.ts.map +1 -1
  48. package/client/lib/services/assessment/modules/ManifestValidationAssessor.js +9 -5
  49. package/client/lib/services/assessment/modules/PortabilityAssessor.d.ts.map +1 -1
  50. package/client/lib/services/assessment/modules/PortabilityAssessor.js +3 -3
  51. package/client/lib/services/assessment/modules/ProhibitedLibrariesAssessor.js +4 -4
  52. package/client/lib/services/assessment/modules/PromptAssessor.js +2 -2
  53. package/client/lib/services/assessment/modules/ProtocolComplianceAssessor.d.ts.map +1 -1
  54. package/client/lib/services/assessment/modules/ProtocolComplianceAssessor.js +7 -7
  55. package/client/lib/services/assessment/modules/ProtocolConformanceAssessor.js +1 -1
  56. package/client/lib/services/assessment/modules/ResourceAssessor.js +1 -1
  57. package/client/lib/services/assessment/modules/SecurityAssessor.d.ts +25 -2
  58. package/client/lib/services/assessment/modules/SecurityAssessor.d.ts.map +1 -1
  59. package/client/lib/services/assessment/modules/SecurityAssessor.js +149 -17
  60. package/client/lib/services/assessment/modules/TemporalAssessor.d.ts.map +1 -1
  61. package/client/lib/services/assessment/modules/TemporalAssessor.js +10 -10
  62. package/client/lib/services/assessment/modules/ToolAnnotationAssessor.js +9 -9
  63. package/client/lib/services/assessment/modules/UsabilityAssessor.js +1 -1
  64. package/client/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.d.ts.map +1 -1
  65. package/client/lib/services/assessment/modules/annotations/DescriptionPoisoningDetector.js +37 -0
  66. package/client/lib/services/assessment/modules/index.d.ts +3 -0
  67. package/client/lib/services/assessment/modules/index.d.ts.map +1 -1
  68. package/client/lib/services/assessment/modules/securityTests/ChainExecutionTester.d.ts +104 -0
  69. package/client/lib/services/assessment/modules/securityTests/ChainExecutionTester.d.ts.map +1 -0
  70. package/client/lib/services/assessment/modules/securityTests/ChainExecutionTester.js +257 -0
  71. package/client/lib/services/assessment/modules/securityTests/ConfidenceScorer.d.ts +57 -0
  72. package/client/lib/services/assessment/modules/securityTests/ConfidenceScorer.d.ts.map +1 -0
  73. package/client/lib/services/assessment/modules/securityTests/ConfidenceScorer.js +199 -0
  74. package/client/lib/services/assessment/modules/securityTests/CrossToolStateTester.d.ts +91 -0
  75. package/client/lib/services/assessment/modules/securityTests/CrossToolStateTester.d.ts.map +1 -0
  76. package/client/lib/services/assessment/modules/securityTests/CrossToolStateTester.js +225 -0
  77. package/client/lib/services/assessment/modules/securityTests/ErrorClassifier.d.ts +57 -0
  78. package/client/lib/services/assessment/modules/securityTests/ErrorClassifier.d.ts.map +1 -0
  79. package/client/lib/services/assessment/modules/securityTests/ErrorClassifier.js +113 -0
  80. package/client/lib/services/assessment/modules/securityTests/ExecutionArtifactDetector.d.ts +49 -0
  81. package/client/lib/services/assessment/modules/securityTests/ExecutionArtifactDetector.d.ts.map +1 -0
  82. package/client/lib/services/assessment/modules/securityTests/ExecutionArtifactDetector.js +74 -0
  83. package/client/lib/services/assessment/modules/securityTests/MathAnalyzer.d.ts +58 -0
  84. package/client/lib/services/assessment/modules/securityTests/MathAnalyzer.d.ts.map +1 -0
  85. package/client/lib/services/assessment/modules/securityTests/MathAnalyzer.js +251 -0
  86. package/client/lib/services/assessment/modules/securityTests/SafeResponseDetector.d.ts +59 -0
  87. package/client/lib/services/assessment/modules/securityTests/SafeResponseDetector.d.ts.map +1 -0
  88. package/client/lib/services/assessment/modules/securityTests/SafeResponseDetector.js +151 -0
  89. package/client/lib/services/assessment/modules/securityTests/SecurityPatternLibrary.d.ts +349 -0
  90. package/client/lib/services/assessment/modules/securityTests/SecurityPatternLibrary.d.ts.map +1 -0
  91. package/client/lib/services/assessment/modules/securityTests/SecurityPatternLibrary.js +904 -0
  92. package/client/lib/services/assessment/modules/securityTests/SecurityPayloadGenerator.d.ts.map +1 -1
  93. package/client/lib/services/assessment/modules/securityTests/SecurityPayloadGenerator.js +49 -24
  94. package/client/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts +122 -85
  95. package/client/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.d.ts.map +1 -1
  96. package/client/lib/services/assessment/modules/securityTests/SecurityResponseAnalyzer.js +443 -1176
  97. package/client/lib/services/assessment/modules/securityTests/index.d.ts +3 -1
  98. package/client/lib/services/assessment/modules/securityTests/index.d.ts.map +1 -1
  99. package/client/lib/services/assessment/modules/securityTests/index.js +2 -0
  100. package/client/package.json +1 -1
  101. package/package.json +9 -1
  102. package/server/package.json +1 -1
@@ -246,7 +246,7 @@ export class AuthenticationAssessor extends BaseAssessor {
246
246
  * Run authentication assessment
247
247
  */
248
248
  async assess(context) {
249
- this.log("Starting authentication assessment");
249
+ this.logger.info("Starting authentication assessment");
250
250
  this.testCount = 0;
251
251
  const oauthIndicators = [];
252
252
  const localResourceIndicators = [];
@@ -323,7 +323,7 @@ export class AuthenticationAssessor extends BaseAssessor {
323
323
  // Generate additional recommendations from auth config findings
324
324
  const authConfigRecommendations = authConfigAnalysis.findings.map((f) => f.recommendation ||
325
325
  `Review ${f.type}: ${f.message} (${f.file || "unknown file"})`);
326
- this.log(`Assessment complete: auth=${authMethod}, localDeps=${hasLocalDependencies}, tlsEnforced=${transportSecurity.tlsEnforced}, authConfigFindings=${authConfigAnalysis.totalFindings}`);
326
+ this.logger.info(`Assessment complete: auth=${authMethod}, localDeps=${hasLocalDependencies}, tlsEnforced=${transportSecurity.tlsEnforced}, authConfigFindings=${authConfigAnalysis.totalFindings}`);
327
327
  return {
328
328
  authMethod,
329
329
  hasLocalDependencies,
@@ -594,7 +594,7 @@ export class AuthenticationAssessor extends BaseAssessor {
594
594
  // Issue #65: Apply file limit to prevent performance issues on large codebases
595
595
  let sourceFiles = Array.from(context.sourceCodeFiles);
596
596
  if (sourceFiles.length > MAX_FILES) {
597
- this.log(`Rate limiting: Analyzing ${MAX_FILES} of ${sourceFiles.length} files`);
597
+ this.logger.info(`Rate limiting: Analyzing ${MAX_FILES} of ${sourceFiles.length} files`);
598
598
  sourceFiles = sourceFiles.slice(0, MAX_FILES);
599
599
  }
600
600
  for (const [filePath, content] of sourceFiles) {
@@ -776,7 +776,7 @@ export class AuthenticationAssessor extends BaseAssessor {
776
776
  }
777
777
  catch (error) {
778
778
  // Warning 4 fix: Handle malformed files gracefully
779
- this.log(`Error analyzing ${filePath}: ${error}`);
779
+ this.logger.info(`Error analyzing ${filePath}: ${error}`);
780
780
  continue;
781
781
  }
782
782
  }
@@ -10,7 +10,6 @@ export declare abstract class BaseAssessor<T = unknown> {
10
10
  protected config: AssessmentConfiguration;
11
11
  protected logger: Logger;
12
12
  protected testCount: number;
13
- private deprecationWarningsEmitted;
14
13
  constructor(config: AssessmentConfiguration);
15
14
  /**
16
15
  * Abstract method that each assessor must implement
@@ -20,19 +19,6 @@ export declare abstract class BaseAssessor<T = unknown> {
20
19
  * Common method to determine status based on pass rate
21
20
  */
22
21
  protected determineStatus(passed: number, total: number, threshold?: number): AssessmentStatus;
23
- /**
24
- * Log assessment progress
25
- * @deprecated Use this.logger.info() directly for structured logging with context. Will be removed in v2.0.0.
26
- */
27
- protected log(message: string): void;
28
- /**
29
- * Log error with optional context
30
- * @deprecated Use this.logger.error() directly for structured logging with context. Will be removed in v2.0.0.
31
- *
32
- * @param message - Description of what operation failed
33
- * @param error - The error that occurred (optional)
34
- */
35
- protected logError(message: string, error?: unknown): void;
36
22
  /**
37
23
  * Handle an error with logging and structured result
38
24
  *
@@ -1 +1 @@
1
- {"version":3,"file":"BaseAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/BaseAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAEjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAwC,MAAM,eAAe,CAAC;AAC7E,OAAO,EAGL,WAAW,EAEZ,MAAM,eAAe,CAAC;AAGvB,8BAAsB,YAAY,CAAC,CAAC,GAAG,OAAO;IAC5C,SAAS,CAAC,MAAM,EAAE,uBAAuB,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,SAAS,EAAE,MAAM,CAAK;IAGhC,OAAO,CAAC,0BAA0B,CAGhC;gBAEU,MAAM,EAAE,uBAAuB;IAS3C;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;IAEvD;;OAEG;IACH,SAAS,CAAC,eAAe,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAY,GACtB,gBAAgB;IAUnB;;;OAGG;IACH,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAWpC;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,GAAG,IAAI;IAW1D;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EACzC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,OAAO,CAAC,CAAC,CAAM,GACxB,CAAC;IAsBJ;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CACxB,OAAO,EAAE,MAAM,uBAAuB,CAAC,sBAAsB,CAAC,GAC7D,OAAO;IAIV;;OAEG;cACa,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;;;;;;;;;OAUG;cACa,kBAAkB,CAAC,CAAC,EAClC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,GAAE,MAAgC,GAC1C,OAAO,CAAC,CAAC,CAAC;IAOb;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAS9C;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAgBrD;;;;;;OAMG;IACH,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,OAAO,EACjB,UAAU,GAAE,OAAe,GAC1B,OAAO;IA+CV;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG;QAC7C,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;CA2BF"}
1
+ {"version":3,"file":"BaseAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/BaseAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EAEjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,EAAE,MAAM,EAAwC,MAAM,eAAe,CAAC;AAC7E,OAAO,EAGL,WAAW,EAEZ,MAAM,eAAe,CAAC;AAGvB,8BAAsB,YAAY,CAAC,CAAC,GAAG,OAAO;IAC5C,SAAS,CAAC,MAAM,EAAE,uBAAuB,CAAC;IAC1C,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,SAAS,EAAE,MAAM,CAAK;gBAEpB,MAAM,EAAE,uBAAuB;IAS3C;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,CAAC,CAAC;IAEvD;;OAEG;IACH,SAAS,CAAC,eAAe,CACvB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EACb,SAAS,GAAE,MAAY,GACtB,gBAAgB;IAUnB;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,SAAS,CAAC,WAAW,CAAC,CAAC,SAAS,WAAW,EACzC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,OAAO,CAAC,CAAC,CAAM,GACxB,CAAC;IAsBJ;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;OAEG;IACH,cAAc,IAAI,IAAI;IAItB;;OAEG;IACH,SAAS,CAAC,gBAAgB,CACxB,OAAO,EAAE,MAAM,uBAAuB,CAAC,sBAAsB,CAAC,GAC7D,OAAO;IAIV;;OAEG;cACa,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhD;;;;;;;;;;OAUG;cACa,kBAAkB,CAAC,CAAC,EAClC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,SAAS,GAAE,MAAgC,GAC1C,OAAO,CAAC,CAAC,CAAC;IAOb;;OAEG;IACH,SAAS,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAS9C;;OAEG;IACH,SAAS,CAAC,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAgBrD;;;;;;OAMG;IACH,SAAS,CAAC,eAAe,CACvB,QAAQ,EAAE,OAAO,EACjB,UAAU,GAAE,OAAe,GAC1B,OAAO;IA+CV;;OAEG;IACH,SAAS,CAAC,gBAAgB,CAAC,QAAQ,EAAE,OAAO,GAAG;QAC7C,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB;CA2BF"}
@@ -9,11 +9,6 @@ export class BaseAssessor {
9
9
  config;
10
10
  logger;
11
11
  testCount = 0;
12
- // Track deprecation warnings to emit only once per instance
13
- deprecationWarningsEmitted = {
14
- log: false,
15
- logError: false,
16
- };
17
12
  constructor(config) {
18
13
  this.config = config;
19
14
  // Create logger from config, using class name as prefix
@@ -32,33 +27,6 @@ export class BaseAssessor {
32
27
  return "NEED_MORE_INFO";
33
28
  return "FAIL";
34
29
  }
35
- /**
36
- * Log assessment progress
37
- * @deprecated Use this.logger.info() directly for structured logging with context. Will be removed in v2.0.0.
38
- */
39
- log(message) {
40
- if (!this.deprecationWarningsEmitted.log) {
41
- this.logger.warn("BaseAssessor.log() is deprecated. Use this.logger.info() instead. " +
42
- "This method will be removed in v2.0.0.");
43
- this.deprecationWarningsEmitted.log = true;
44
- }
45
- this.logger.info(message);
46
- }
47
- /**
48
- * Log error with optional context
49
- * @deprecated Use this.logger.error() directly for structured logging with context. Will be removed in v2.0.0.
50
- *
51
- * @param message - Description of what operation failed
52
- * @param error - The error that occurred (optional)
53
- */
54
- logError(message, error) {
55
- if (!this.deprecationWarningsEmitted.logError) {
56
- this.logger.warn("BaseAssessor.logError() is deprecated. Use this.logger.error() instead. " +
57
- "This method will be removed in v2.0.0.");
58
- this.deprecationWarningsEmitted.logError = true;
59
- }
60
- this.logger.error(message, error ? { error: String(error) } : undefined);
61
- }
62
30
  /**
63
31
  * Handle an error with logging and structured result
64
32
  *
@@ -147,7 +115,7 @@ export class BaseAssessor {
147
115
  return JSON.parse(text);
148
116
  }
149
117
  catch (error) {
150
- this.logError(`Failed to parse JSON: ${text}`, error);
118
+ this.logger.error(`Failed to parse JSON: ${text}`, { error });
151
119
  return null;
152
120
  }
153
121
  }
@@ -65,7 +65,7 @@ export class CrossCapabilitySecurityAssessor extends BaseAssessor {
65
65
  const tools = context.tools || [];
66
66
  const resources = context.resources || [];
67
67
  const prompts = context.prompts || [];
68
- this.log(`Testing cross-capability security: ${tools.length} tools, ${resources.length} resources, ${prompts.length} prompts`);
68
+ this.logger.info(`Testing cross-capability security: ${tools.length} tools, ${resources.length} resources, ${prompts.length} prompts`);
69
69
  // Test 1: Tool->Resource access patterns
70
70
  const toolResourceResults = this.testToolResourceAccess(tools, resources);
71
71
  results.push(...toolResourceResults);
@@ -15,7 +15,7 @@
15
15
  import { BaseAssessor } from "./BaseAssessor.js";
16
16
  export class DeveloperExperienceAssessor extends BaseAssessor {
17
17
  async assess(context) {
18
- this.log("Starting developer experience assessment");
18
+ this.logger.info("Starting developer experience assessment");
19
19
  const readmeContent = context.readmeContent || "";
20
20
  // Assess documentation
21
21
  const documentationMetrics = this.analyzeDocumentation(readmeContent, context.tools, "verbose");
@@ -16,7 +16,7 @@ export class DocumentationAssessor extends BaseAssessor {
16
16
  });
17
17
  }
18
18
  async assess(context) {
19
- this.log("Starting documentation assessment");
19
+ this.logger.info("Starting documentation assessment");
20
20
  const readmeContent = context.readmeContent || "";
21
21
  const validVerbosityLevels = ["minimal", "standard", "verbose"];
22
22
  const configVerbosity = this.config.documentationVerbosity;
@@ -27,7 +27,7 @@ export class DocumentationAssessor extends BaseAssessor {
27
27
  verbosity = configVerbosity;
28
28
  }
29
29
  else {
30
- this.log(`Warning: Invalid documentationVerbosity "${configVerbosity}". ` +
30
+ this.logger.info(`Warning: Invalid documentationVerbosity "${configVerbosity}". ` +
31
31
  `Valid options: ${validVerbosityLevels.join(", ")}. Using "verbose".`);
32
32
  }
33
33
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ErrorHandlingAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ErrorHandlingAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,uBAAuB,EAIxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,qBAAa,qBAAsB,SAAQ,YAAY;IAC/C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAiE1E,OAAO,CAAC,qBAAqB;YAqDf,qBAAqB;YAuBrB,qBAAqB;YAmGrB,cAAc;YAmFd,iBAAiB;YA8DjB,kBAAkB;IA6DhC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,0BAA0B;IAgClC,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,gBAAgB;IAoGxB,OAAO,CAAC,4BAA4B;IAapC,OAAO,CAAC,mBAAmB;IAuE3B,OAAO,CAAC,uBAAuB;CA4ChC"}
1
+ {"version":3,"file":"ErrorHandlingAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ErrorHandlingAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,uBAAuB,EAIxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,qBAAa,qBAAsB,SAAQ,YAAY;IAC/C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;IAiE1E,OAAO,CAAC,qBAAqB;YAuDf,qBAAqB;YAuBrB,qBAAqB;YAmGrB,cAAc;YAmFd,iBAAiB;YA8DjB,kBAAkB;IA6DhC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,uBAAuB;IAgC/B,OAAO,CAAC,0BAA0B;IAgClC,OAAO,CAAC,uBAAuB;IA4B/B,OAAO,CAAC,gBAAgB;IAoGxB,OAAO,CAAC,4BAA4B;IAapC,OAAO,CAAC,mBAAmB;IAuE3B,OAAO,CAAC,uBAAuB;CA4ChC"}
@@ -6,7 +6,7 @@ import { BaseAssessor } from "./BaseAssessor.js";
6
6
  import { createConcurrencyLimit } from "../lib/concurrencyLimit.js";
7
7
  export class ErrorHandlingAssessor extends BaseAssessor {
8
8
  async assess(context) {
9
- this.log("Starting error handling assessment");
9
+ this.logger.info("Starting error handling assessment");
10
10
  const testDetails = [];
11
11
  let passedTests = 0;
12
12
  // Test a sample of tools for error handling
@@ -14,7 +14,7 @@ export class ErrorHandlingAssessor extends BaseAssessor {
14
14
  // Parallel tool testing with concurrency limit
15
15
  const concurrency = this.config.maxParallelTests ?? 5;
16
16
  const limit = createConcurrencyLimit(concurrency, this.logger);
17
- this.log(`Testing ${toolsToTest.length} tools for error handling with concurrency limit of ${concurrency}`);
17
+ this.logger.info(`Testing ${toolsToTest.length} tools for error handling with concurrency limit of ${concurrency}`);
18
18
  const allToolTests = await Promise.all(toolsToTest.map((tool) => limit(async () => {
19
19
  const toolTests = await this.testToolErrorHandling(tool, context.callTool);
20
20
  // Add delay between tests to avoid rate limiting
@@ -50,34 +50,34 @@ export class ErrorHandlingAssessor extends BaseAssessor {
50
50
  if (this.config.selectedToolsForTesting !== undefined) {
51
51
  // Warn if deprecated maxToolsToTestForErrors is also set
52
52
  if (this.config.maxToolsToTestForErrors !== undefined) {
53
- this.log(`Warning: Both selectedToolsForTesting and maxToolsToTestForErrors are set. ` +
53
+ this.logger.info(`Warning: Both selectedToolsForTesting and maxToolsToTestForErrors are set. ` +
54
54
  `Using selectedToolsForTesting (maxToolsToTestForErrors is deprecated).`);
55
55
  }
56
56
  const selectedNames = new Set(this.config.selectedToolsForTesting);
57
57
  const selectedTools = tools.filter((tool) => selectedNames.has(tool.name));
58
58
  // Empty array means user explicitly selected 0 tools
59
59
  if (this.config.selectedToolsForTesting.length === 0) {
60
- this.log(`User selected 0 tools for error handling - skipping tests`);
60
+ this.logger.info(`User selected 0 tools for error handling - skipping tests`);
61
61
  return [];
62
62
  }
63
63
  // If no tools matched the names (config out of sync), log warning but respect selection
64
64
  if (selectedTools.length === 0) {
65
- this.log(`Warning: No tools matched selection (${this.config.selectedToolsForTesting.join(", ")})`);
65
+ this.logger.info(`Warning: No tools matched selection (${this.config.selectedToolsForTesting.join(", ")})`);
66
66
  return [];
67
67
  }
68
- this.log(`Testing ${selectedTools.length} selected tools out of ${tools.length} for error handling`);
68
+ this.logger.info(`Testing ${selectedTools.length} selected tools out of ${tools.length} for error handling`);
69
69
  return selectedTools;
70
70
  }
71
71
  // Backward compatibility: use old maxToolsToTestForErrors configuration
72
72
  const configLimit = this.config.maxToolsToTestForErrors;
73
73
  // If -1, test all tools
74
74
  if (configLimit === -1) {
75
- this.log(`Testing all ${tools.length} tools for error handling`);
75
+ this.logger.info(`Testing all ${tools.length} tools for error handling`);
76
76
  return tools;
77
77
  }
78
78
  // Otherwise use the configured limit (default to 5 if not set)
79
79
  const maxTools = Math.min(configLimit ?? 5, tools.length);
80
- this.log(`Testing ${maxTools} out of ${tools.length} tools for error handling`);
80
+ this.logger.info(`Testing ${maxTools} out of ${tools.length} tools for error handling`);
81
81
  return tools.slice(0, maxTools);
82
82
  }
83
83
  async testToolErrorHandling(tool, callTool) {
@@ -1 +1 @@
1
- {"version":3,"file":"ExternalAPIScannerAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ExternalAPIScannerAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAEV,4BAA4B,EAE7B,MAAM,uBAAuB,CAAC;AAmE/B,qBAAa,0BAA2B,SAAQ,YAAY;IACpD,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,4BAA4B,CAAC;IA6DxC;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAa7B"}
1
+ {"version":3,"file":"ExternalAPIScannerAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ExternalAPIScannerAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,KAAK,EAEV,4BAA4B,EAE7B,MAAM,uBAAuB,CAAC;AAmE/B,qBAAa,0BAA2B,SAAQ,YAAY;IACpD,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,4BAA4B,CAAC;IA+DxC;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,eAAe;IA0BvB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAsBxB;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA2B/B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAa7B"}
@@ -74,13 +74,13 @@ const SKIP_FILE_PATTERNS = [
74
74
  ];
75
75
  export class ExternalAPIScannerAssessor extends BaseAssessor {
76
76
  async assess(context) {
77
- this.log("Starting external API scanner assessment");
77
+ this.logger.info("Starting external API scanner assessment");
78
78
  this.resetTestCount();
79
79
  const detectedAPIs = [];
80
80
  let scannedFiles = 0;
81
81
  // Check if source code analysis is enabled
82
82
  if (!context.sourceCodeFiles || !context.config.enableSourceCodeAnalysis) {
83
- this.log("Source code analysis not enabled, skipping external API scan");
83
+ this.logger.info("Source code analysis not enabled, skipping external API scan");
84
84
  return this.createNoSourceResult();
85
85
  }
86
86
  // Scan each source file
@@ -100,7 +100,7 @@ export class ExternalAPIScannerAssessor extends BaseAssessor {
100
100
  const status = this.computeStatus(detectedAPIs, affiliationWarning);
101
101
  const explanation = this.generateExplanation(detectedAPIs, uniqueServices, affiliationWarning, scannedFiles);
102
102
  const recommendations = this.generateRecommendations(uniqueServices, affiliationWarning);
103
- this.log(`External API scan complete: ${detectedAPIs.length} APIs found in ${scannedFiles} files`);
103
+ this.logger.info(`External API scan complete: ${detectedAPIs.length} APIs found in ${scannedFiles} files`);
104
104
  return {
105
105
  detectedAPIs,
106
106
  uniqueServices,
@@ -23,23 +23,23 @@ export class FunctionalityAssessor extends BaseAssessor {
23
23
  const selectedTools = tools.filter((tool) => selectedNames.has(tool.name));
24
24
  // Empty array means user explicitly selected 0 tools
25
25
  if (this.config.selectedToolsForTesting.length === 0) {
26
- this.log(`User selected 0 tools for functionality testing - skipping tests`);
26
+ this.logger.info(`User selected 0 tools for functionality testing - skipping tests`);
27
27
  return [];
28
28
  }
29
29
  // If no tools matched the names (config out of sync), log warning but respect selection
30
30
  if (selectedTools.length === 0) {
31
- this.log(`Warning: No tools matched selection (${this.config.selectedToolsForTesting.join(", ")})`);
31
+ this.logger.info(`Warning: No tools matched selection (${this.config.selectedToolsForTesting.join(", ")})`);
32
32
  return [];
33
33
  }
34
- this.log(`Testing ${selectedTools.length} selected tools out of ${tools.length} for functionality`);
34
+ this.logger.info(`Testing ${selectedTools.length} selected tools out of ${tools.length} for functionality`);
35
35
  return selectedTools;
36
36
  }
37
37
  // Default: test all tools
38
- this.log(`Testing all ${tools.length} tools for functionality`);
38
+ this.logger.info(`Testing all ${tools.length} tools for functionality`);
39
39
  return tools;
40
40
  }
41
41
  async assess(context) {
42
- this.log(`Starting functionality assessment${this.config.reviewerMode ? " (reviewer mode - quick verification)" : ""}`);
42
+ this.logger.info(`Starting functionality assessment${this.config.reviewerMode ? " (reviewer mode - quick verification)" : ""}`);
43
43
  const toolResults = [];
44
44
  const brokenTools = [];
45
45
  let workingTools = 0;
@@ -71,7 +71,7 @@ export class FunctionalityAssessor extends BaseAssessor {
71
71
  batchCount = 0;
72
72
  lastBatchTime = Date.now();
73
73
  };
74
- this.log(`Testing ${toolsToTest.length} tools with concurrency limit of ${concurrency}`);
74
+ this.logger.info(`Testing ${toolsToTest.length} tools with concurrency limit of ${concurrency}`);
75
75
  const results = await Promise.all(toolsToTest.map((tool) => limit(async () => {
76
76
  this.testCount++;
77
77
  completedTests++;
@@ -103,7 +103,7 @@ export class FunctionalityAssessor extends BaseAssessor {
103
103
  else if (result.status === "broken") {
104
104
  brokenTools.push(result.toolName);
105
105
  if (this.config.skipBrokenTools) {
106
- this.log(`Skipping further tests for broken tool: ${result.toolName}`);
106
+ this.logger.info(`Skipping further tests for broken tool: ${result.toolName}`);
107
107
  }
108
108
  }
109
109
  }
@@ -141,7 +141,7 @@ export class FunctionalityAssessor extends BaseAssessor {
141
141
  const cleanedParams = schema
142
142
  ? cleanParams(testParams, schema)
143
143
  : testParams;
144
- this.log(`Testing tool: ${tool.name} with params: ${JSON.stringify(cleanedParams)}`);
144
+ this.logger.info(`Testing tool: ${tool.name} with params: ${JSON.stringify(cleanedParams)}`);
145
145
  // Execute tool with timeout
146
146
  const response = await this.executeWithTimeout(callTool(tool.name, cleanedParams), this.config.testTimeout);
147
147
  const executionTime = Date.now() - startTime;
@@ -197,7 +197,7 @@ export class FunctionalityAssessor extends BaseAssessor {
197
197
  };
198
198
  }
199
199
  catch (error) {
200
- this.logError(`Tool execution failed: ${tool.name}`, error);
200
+ this.logger.error(`Tool execution failed: ${tool.name}`, { error });
201
201
  return {
202
202
  toolName: tool.name,
203
203
  tested: true,
@@ -1 +1 @@
1
- {"version":3,"file":"MCPSpecComplianceAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/MCPSpecComplianceAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,2BAA2B,EAM3B,uBAAuB,EAKxB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAY;IACzD,OAAO,CAAC,GAAG,CAAc;gBAEb,MAAM,EAAE,uBAAuB;IAa3C;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,2BAA2B,CAAC;IAyHvC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAwB9B;;;OAGG;YACW,sBAAsB;IA6BpC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B;;;OAGG;YACW,mBAAmB;IAsCjC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAoDnC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IA0FnC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyFjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2C7B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoF5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyBjC;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA0DtC"}
1
+ {"version":3,"file":"MCPSpecComplianceAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/MCPSpecComplianceAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,2BAA2B,EAM3B,uBAAuB,EAKxB,MAAM,uBAAuB,CAAC;AAO/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D;;GAEG;AACH,qBAAa,yBAA0B,SAAQ,YAAY;IACzD,OAAO,CAAC,GAAG,CAAc;gBAEb,MAAM,EAAE,uBAAuB;IAa3C;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,2BAA2B,CAAC;IAyHvC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;;OAGG;YACW,sBAAsB;IA6BpC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAyB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA0C7B;;;OAGG;YACW,mBAAmB;IAsCjC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAoDnC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IA8FnC;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyFjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IA4B9B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA2C7B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAoF5B;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAyBjC;;OAEG;IACH,OAAO,CAAC,6BAA6B;CA0DtC"}
@@ -90,7 +90,7 @@ export class MCPSpecComplianceAssessor extends BaseAssessor {
90
90
  const totalChecks = checksArray.length;
91
91
  const complianceScore = (passedCount / totalChecks) * 100;
92
92
  // Log score/check consistency for debugging
93
- this.log(`MCP Compliance: ${passedCount}/${totalChecks} checks passed (${complianceScore.toFixed(1)}%)`);
93
+ this.logger.info(`MCP Compliance: ${passedCount}/${totalChecks} checks passed (${complianceScore.toFixed(1)}%)`);
94
94
  // Determine status based on protocol checks only
95
95
  let status;
96
96
  if (!protocolChecks.serverInfoValidity.passed) {
@@ -135,16 +135,16 @@ export class MCPSpecComplianceAssessor extends BaseAssessor {
135
135
  const metadata = context.serverInfo?.metadata;
136
136
  const protocolVersion = metadata?.protocolVersion;
137
137
  if (protocolVersion) {
138
- this.log(`Using protocol version from metadata: ${protocolVersion}`);
138
+ this.logger.info(`Using protocol version from metadata: ${protocolVersion}`);
139
139
  return protocolVersion;
140
140
  }
141
141
  // Fall back to server version
142
142
  if (context.serverInfo?.version) {
143
- this.log(`Using server version as protocol version: ${context.serverInfo.version}`);
143
+ this.logger.info(`Using server version as protocol version: ${context.serverInfo.version}`);
144
144
  return context.serverInfo.version;
145
145
  }
146
146
  // Default if no version information available
147
- this.log("No protocol version information available, using default");
147
+ this.logger.info("No protocol version information available, using default");
148
148
  return "2025-06-18"; // Current MCP spec version as fallback
149
149
  }
150
150
  /**
@@ -183,14 +183,14 @@ export class MCPSpecComplianceAssessor extends BaseAssessor {
183
183
  // Check if name is properly set (should be a string, not null/undefined)
184
184
  if (serverInfo.name !== undefined && serverInfo.name !== null) {
185
185
  if (typeof serverInfo.name !== "string") {
186
- this.log("Server info name is not a string");
186
+ this.logger.info("Server info name is not a string");
187
187
  return false;
188
188
  }
189
189
  }
190
190
  // Check if metadata is properly formatted (should be an object if present)
191
191
  if (serverInfo.metadata !== undefined && serverInfo.metadata !== null) {
192
192
  if (typeof serverInfo.metadata !== "object") {
193
- this.log("Server info metadata is not an object");
193
+ this.logger.info("Server info metadata is not an object");
194
194
  return false;
195
195
  }
196
196
  }
@@ -297,7 +297,7 @@ export class MCPSpecComplianceAssessor extends BaseAssessor {
297
297
  const totalTools = tools.length;
298
298
  const coveragePercent = totalTools > 0 ? Math.round((withOutputSchema / totalTools) * 100) : 0;
299
299
  // Log for debugging
300
- this.log(`Structured output support: ${withOutputSchema}/${totalTools} tools (${coveragePercent}%)`);
300
+ this.logger.info(`Structured output support: ${withOutputSchema}/${totalTools} tools (${coveragePercent}%)`);
301
301
  const coverage = {
302
302
  totalTools,
303
303
  withOutputSchema,
@@ -344,11 +344,11 @@ export class MCPSpecComplianceAssessor extends BaseAssessor {
344
344
  }
345
345
  // Check listChanged notification support
346
346
  if (capabilities.resources.listChanged) {
347
- this.log("Server declares resources.listChanged notification support");
347
+ this.logger.info("Server declares resources.listChanged notification support");
348
348
  }
349
349
  // Check subscribe support
350
350
  if (capabilities.resources.subscribe) {
351
- this.log("Server declares resource subscription support");
351
+ this.logger.info("Server declares resource subscription support");
352
352
  }
353
353
  this.testCount++;
354
354
  }
@@ -362,13 +362,13 @@ export class MCPSpecComplianceAssessor extends BaseAssessor {
362
362
  }
363
363
  // Check listChanged notification support
364
364
  if (capabilities.prompts.listChanged) {
365
- this.log("Server declares prompts.listChanged notification support");
365
+ this.logger.info("Server declares prompts.listChanged notification support");
366
366
  }
367
367
  this.testCount++;
368
368
  }
369
369
  // Check logging capability
370
370
  if (capabilities.logging) {
371
- this.log("Server declares logging capability");
371
+ this.logger.info("Server declares logging capability");
372
372
  this.testCount++;
373
373
  }
374
374
  // Determine pass/fail
@@ -433,7 +433,7 @@ export class MCPSpecComplianceAssessor extends BaseAssessor {
433
433
  (transport === "http" || transport === "streamable-http")) {
434
434
  // For HTTP transport on 2025-06-18+, headers are required
435
435
  // We assume compliance if using the new protocol version
436
- this.log(`HTTP transport detected with protocol ${protocolVersion} - header compliance assumed`);
436
+ this.logger.info(`HTTP transport detected with protocol ${protocolVersion} - header compliance assumed`);
437
437
  }
438
438
  // Determine confidence based on detection method
439
439
  const confidence = hasTransportMetadata ? "medium" : "low";
@@ -1 +1 @@
1
- {"version":3,"file":"ManifestValidationAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ManifestValidationAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,4BAA4B,EAK7B,MAAM,uBAAuB,CAAC;AAM/B,qBAAa,0BAA2B,SAAQ,YAAY;IAC1D;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,4BAA4B,CAAC;IA6JxC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyB9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAiChC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+CzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqCpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;YACW,yBAAyB;IAoFvC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CA+ChC"}
1
+ {"version":3,"file":"ManifestValidationAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ManifestValidationAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,4BAA4B,EAK7B,MAAM,uBAAuB,CAAC;AAM/B,qBAAa,0BAA2B,SAAQ,YAAY;IAC1D;;OAEG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,4BAA4B,CAAC;IA6JxC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyB9B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAmB/B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgC/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAiC7B;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAiChC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA+CzB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqCpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA+B1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;YACW,yBAAyB;IAqFvC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IA0C3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CA+ChC"}
@@ -19,7 +19,7 @@ export class ManifestValidationAssessor extends BaseAssessor {
19
19
  * Run manifest validation assessment
20
20
  */
21
21
  async assess(context) {
22
- this.log("Starting manifest validation assessment");
22
+ this.logger.info("Starting manifest validation assessment");
23
23
  this.testCount = 0;
24
24
  // Check if manifest is available
25
25
  if (!context.manifestJson && !context.manifestRaw) {
@@ -91,7 +91,7 @@ export class ManifestValidationAssessor extends BaseAssessor {
91
91
  if (manifest.privacy_policies &&
92
92
  Array.isArray(manifest.privacy_policies) &&
93
93
  manifest.privacy_policies.length > 0) {
94
- this.log(`Validating ${manifest.privacy_policies.length} privacy policy URL(s)`);
94
+ this.logger.info(`Validating ${manifest.privacy_policies.length} privacy policy URL(s)`);
95
95
  const policyResults = await this.validatePrivacyPolicyUrls(manifest.privacy_policies);
96
96
  privacyPolicies = {
97
97
  declared: manifest.privacy_policies,
@@ -121,7 +121,7 @@ export class ManifestValidationAssessor extends BaseAssessor {
121
121
  const status = this.determineManifestStatus(validationResults, hasRequiredFields);
122
122
  const explanation = this.generateExplanation(validationResults, hasRequiredFields, hasIcon, privacyPolicies);
123
123
  const recommendations = this.generateRecommendations(validationResults, privacyPolicies);
124
- this.log(`Assessment complete: ${validationResults.filter((r) => r.valid).length}/${validationResults.length} checks passed`);
124
+ this.logger.info(`Assessment complete: ${validationResults.filter((r) => r.valid).length}/${validationResults.length} checks passed`);
125
125
  return {
126
126
  hasManifest: true,
127
127
  manifestVersion: manifest.manifest_version,
@@ -413,7 +413,9 @@ export class ManifestValidationAssessor extends BaseAssessor {
413
413
  new URL(url);
414
414
  }
415
415
  catch (error) {
416
- this.logError(`Invalid privacy policy URL format: ${url}`, error);
416
+ this.logger.error(`Invalid privacy policy URL format: ${url}`, {
417
+ error,
418
+ });
417
419
  results.push({
418
420
  url,
419
421
  accessible: false,
@@ -460,7 +462,9 @@ export class ManifestValidationAssessor extends BaseAssessor {
460
462
  });
461
463
  }
462
464
  catch (fetchError) {
463
- this.logError(`Failed to fetch privacy policy URL: ${url}`, fetchError);
465
+ this.logger.error(`Failed to fetch privacy policy URL: ${url}`, {
466
+ error: fetchError,
467
+ });
464
468
  results.push({
465
469
  url,
466
470
  accessible: false,
@@ -1 +1 @@
1
- {"version":3,"file":"PortabilityAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/PortabilityAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,qBAAqB,EAGtB,MAAM,uBAAuB,CAAC;AA8H/B,qBAAa,mBAAoB,SAAQ,YAAY;IACnD;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAuHxE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiD5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuE/B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAiIhB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAmClC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAmDhC"}
1
+ {"version":3,"file":"PortabilityAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/PortabilityAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EACV,qBAAqB,EAGtB,MAAM,uBAAuB,CAAC;AA8H/B,qBAAa,mBAAoB,SAAQ,YAAY;IACnD;;OAEG;IACG,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAyHxE;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAiD5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAuE/B;;OAEG;IACH,OAAO,CAAC,QAAQ;IAiIhB;;OAEG;IACH,OAAO,CAAC,cAAc;IAkBtB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAmClC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqC3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAmDhC"}
@@ -124,7 +124,7 @@ export class PortabilityAssessor extends BaseAssessor {
124
124
  * Run portability assessment
125
125
  */
126
126
  async assess(context) {
127
- this.log("Starting portability assessment");
127
+ this.logger.info("Starting portability assessment");
128
128
  this.testCount = 0;
129
129
  const issues = [];
130
130
  let scannedFiles = 0;
@@ -159,7 +159,7 @@ export class PortabilityAssessor extends BaseAssessor {
159
159
  }
160
160
  // Check source code files if available
161
161
  if (context.sourceCodeFiles && context.config.enableSourceCodeAnalysis) {
162
- this.log("Scanning source code files for portability issues...");
162
+ this.logger.info("Scanning source code files for portability issues...");
163
163
  for (const [filePath, content] of context.sourceCodeFiles) {
164
164
  // Skip irrelevant files
165
165
  if (this.shouldSkipFile(filePath))
@@ -185,7 +185,7 @@ export class PortabilityAssessor extends BaseAssessor {
185
185
  const status = this.determinePortabilityStatus(issues, usesDirname, usesBundleRoot);
186
186
  const explanation = this.generateExplanation(issues, usesDirname, usesBundleRoot, scannedFiles);
187
187
  const recommendations = this.generateRecommendations(issues, usesDirname, usesBundleRoot);
188
- this.log(`Assessment complete: ${issues.length} portability issues found`);
188
+ this.logger.info(`Assessment complete: ${issues.length} portability issues found`);
189
189
  // NEW: Analyze shell commands and platform coverage (Issue #9)
190
190
  const shellCommands = this.analyzeShellCommands(context);
191
191
  const platformCoverage = this.analyzePlatformCoverage(issues);
@@ -16,7 +16,7 @@ export class ProhibitedLibrariesAssessor extends BaseAssessor {
16
16
  * Run prohibited libraries assessment
17
17
  */
18
18
  async assess(context) {
19
- this.log("Starting prohibited libraries assessment");
19
+ this.logger.info("Starting prohibited libraries assessment");
20
20
  this.testCount = 0;
21
21
  const matches = [];
22
22
  const scannedFiles = [];
@@ -24,7 +24,7 @@ export class ProhibitedLibrariesAssessor extends BaseAssessor {
24
24
  let hasMediaLibraries = false;
25
25
  // Check package.json dependencies
26
26
  if (context.packageJson) {
27
- this.log("Scanning package.json dependencies...");
27
+ this.logger.info("Scanning package.json dependencies...");
28
28
  this.testCount++;
29
29
  scannedFiles.push("package.json");
30
30
  const packageJson = context.packageJson;
@@ -64,7 +64,7 @@ export class ProhibitedLibrariesAssessor extends BaseAssessor {
64
64
  }
65
65
  // Check source code files if available
66
66
  if (context.sourceCodeFiles && context.config.enableSourceCodeAnalysis) {
67
- this.log("Scanning source code files...");
67
+ this.logger.info("Scanning source code files...");
68
68
  for (const [filePath, content] of context.sourceCodeFiles) {
69
69
  // Check Python requirements files
70
70
  if (filePath.endsWith("requirements.txt") ||
@@ -126,7 +126,7 @@ export class ProhibitedLibrariesAssessor extends BaseAssessor {
126
126
  const status = this.calculateStatusFromMatches(uniqueMatches);
127
127
  const explanation = this.generateExplanation(uniqueMatches, hasFinancialLibraries, hasMediaLibraries, scannedFiles);
128
128
  const recommendations = this.generateRecommendations(uniqueMatches);
129
- this.log(`Assessment complete: ${uniqueMatches.length} prohibited libraries found`);
129
+ this.logger.info(`Assessment complete: ${uniqueMatches.length} prohibited libraries found`);
130
130
  return {
131
131
  matches: uniqueMatches,
132
132
  scannedFiles,
@@ -67,7 +67,7 @@ export class PromptAssessor extends BaseAssessor {
67
67
  if (!context.prompts || context.prompts.length === 0) {
68
68
  return this.createNoPromptsResponse();
69
69
  }
70
- this.log(`Testing ${context.prompts.length} prompts`);
70
+ this.logger.info(`Testing ${context.prompts.length} prompts`);
71
71
  // Test each prompt
72
72
  for (const prompt of context.prompts) {
73
73
  this.testCount++;
@@ -216,7 +216,7 @@ export class PromptAssessor extends BaseAssessor {
216
216
  return { success: true, unsafeContent, executionTime };
217
217
  }
218
218
  catch (error) {
219
- this.logError(`Prompt execution failed: ${prompt.name}`, error);
219
+ this.logger.error(`Prompt execution failed: ${prompt.name}`, { error });
220
220
  return {
221
221
  success: false,
222
222
  unsafeContent: false,
@@ -1 +1 @@
1
- {"version":3,"file":"ProtocolComplianceAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ProtocolComplianceAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,2BAA2B,EAM3B,uBAAuB,EAKxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAOpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAmB9D;;;GAGG;AACH,MAAM,WAAW,4BAA6B,SAAQ,2BAA2B;IAC/E,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE;QAClB,mBAAmB,EAAE,aAAa,CAAC;QACnC,kBAAkB,EAAE,aAAa,CAAC;QAClC,uBAAuB,EAAE,aAAa,CAAC;KACxC,CAAC;CACH;AAED,qBAAa,0BAA2B,SAAQ,YAAY,CAAC,4BAA4B,CAAC;IACxF,OAAO,CAAC,GAAG,CAAc;gBAEb,MAAM,EAAE,uBAAuB;IAK3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,4BAA4B,CAAC;IAyIxC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAqB9B;;OAEG;YACW,sBAAsB;IAuBpC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwC7B;;OAEG;YACW,mBAAmB;IAiCjC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAiDnC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkEnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;OAEG;YACW,wBAAwB;IA4GtC;;OAEG;YACW,uBAAuB;IA2FrC;;OAEG;YACW,4BAA4B;IAoD1C,OAAO,CAAC,yBAAyB;IAkEjC,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,oBAAoB;IA8E5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAqEhC"}
1
+ {"version":3,"file":"ProtocolComplianceAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/ProtocolComplianceAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EACL,2BAA2B,EAM3B,uBAAuB,EAKxB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAOpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAmB9D;;;GAGG;AACH,MAAM,WAAW,4BAA6B,SAAQ,2BAA2B;IAC/E,2EAA2E;IAC3E,iBAAiB,CAAC,EAAE;QAClB,mBAAmB,EAAE,aAAa,CAAC;QACnC,kBAAkB,EAAE,aAAa,CAAC;QAClC,uBAAuB,EAAE,aAAa,CAAC;KACxC,CAAC;CACH;AAED,qBAAa,0BAA2B,SAAQ,YAAY,CAAC,4BAA4B,CAAC;IACxF,OAAO,CAAC,GAAG,CAAc;gBAEb,MAAM,EAAE,uBAAuB;IAK3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;;OAGG;IACG,MAAM,CACV,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,4BAA4B,CAAC;IAyIxC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAyB9B;;OAEG;YACW,sBAAsB;IAuBpC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAsB/B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAwC7B;;OAEG;YACW,mBAAmB;IAiCjC;;;OAGG;IACH,OAAO,CAAC,2BAA2B;IAiDnC;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkEnC;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;OAEG;YACW,wBAAwB;IA4GtC;;OAEG;YACW,uBAAuB;IA2FrC;;OAEG;YACW,4BAA4B;IAoD1C,OAAO,CAAC,yBAAyB;IAkEjC,OAAO,CAAC,uBAAuB;IAqB/B,OAAO,CAAC,sBAAsB;IA0B9B,OAAO,CAAC,qBAAqB;IAgC7B,OAAO,CAAC,oBAAoB;IA8E5B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAoC3B;;OAEG;IACH,OAAO,CAAC,uBAAuB;CAqEhC"}