@bryan-thompson/inspector-assessment-client 1.9.0 → 1.11.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/dist/assets/{OAuthCallback-D2E2dbOQ.js → OAuthCallback-DQS8ZWD9.js} +1 -1
- package/dist/assets/{OAuthDebugCallback-MOpPBsSR.js → OAuthDebugCallback-CeG1zXQt.js} +1 -1
- package/dist/assets/{index-Kd1EJzEn.js → index-C89qxkOz.js} +120 -6
- package/dist/index.html +1 -1
- package/lib/lib/assessmentTypes.d.ts +57 -0
- package/lib/lib/assessmentTypes.d.ts.map +1 -1
- package/lib/lib/assessmentTypes.js +3 -0
- package/lib/services/assessment/AssessmentOrchestrator.d.ts +2 -1
- package/lib/services/assessment/AssessmentOrchestrator.d.ts.map +1 -1
- package/lib/services/assessment/AssessmentOrchestrator.js +80 -25
- package/lib/services/assessment/modules/FunctionalityAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/FunctionalityAssessor.js +34 -0
- package/lib/services/assessment/modules/SecurityAssessor.d.ts.map +1 -1
- package/lib/services/assessment/modules/SecurityAssessor.js +96 -2
- package/package.json +1 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { u as useToast, r as reactExports, j as jsxRuntimeExports, p as parseOAuthCallbackParams, g as generateOAuthErrorDescription, S as SESSION_KEYS, I as InspectorOAuthClientProvider, a as auth } from "./index-
|
|
1
|
+
import { u as useToast, r as reactExports, j as jsxRuntimeExports, p as parseOAuthCallbackParams, g as generateOAuthErrorDescription, S as SESSION_KEYS, I as InspectorOAuthClientProvider, a as auth } from "./index-C89qxkOz.js";
|
|
2
2
|
const OAuthCallback = ({ onConnect }) => {
|
|
3
3
|
const { toast } = useToast();
|
|
4
4
|
const hasProcessedRef = reactExports.useRef(false);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { r as reactExports, S as SESSION_KEYS, p as parseOAuthCallbackParams, j as jsxRuntimeExports, g as generateOAuthErrorDescription } from "./index-
|
|
1
|
+
import { r as reactExports, S as SESSION_KEYS, p as parseOAuthCallbackParams, j as jsxRuntimeExports, g as generateOAuthErrorDescription } from "./index-C89qxkOz.js";
|
|
2
2
|
const OAuthDebugCallback = ({ onConnect }) => {
|
|
3
3
|
reactExports.useEffect(() => {
|
|
4
4
|
let isProcessed = false;
|
|
@@ -16320,7 +16320,7 @@ object({
|
|
|
16320
16320
|
token_type_hint: string().optional()
|
|
16321
16321
|
}).strip();
|
|
16322
16322
|
const name = "@bryan-thompson/inspector-assessment-client";
|
|
16323
|
-
const version$1 = "1.
|
|
16323
|
+
const version$1 = "1.11.0";
|
|
16324
16324
|
const packageJson = {
|
|
16325
16325
|
name,
|
|
16326
16326
|
version: version$1
|
|
@@ -48863,7 +48863,7 @@ const useTheme = () => {
|
|
|
48863
48863
|
[theme, setThemeWithSideEffect]
|
|
48864
48864
|
);
|
|
48865
48865
|
};
|
|
48866
|
-
const version = "1.
|
|
48866
|
+
const version = "1.11.0";
|
|
48867
48867
|
var [createTooltipContext] = createContextScope("Tooltip", [
|
|
48868
48868
|
createPopperScope
|
|
48869
48869
|
]);
|
|
@@ -53648,6 +53648,27 @@ class FunctionalityAssessor extends BaseAssessor {
|
|
|
53648
53648
|
const toolsToTest = this.selectToolsForTesting(context.tools);
|
|
53649
53649
|
const concurrency = this.config.maxParallelTests ?? 5;
|
|
53650
53650
|
const limit2 = createConcurrencyLimit(concurrency);
|
|
53651
|
+
const totalEstimate = toolsToTest.length;
|
|
53652
|
+
let completedTests = 0;
|
|
53653
|
+
let lastBatchTime = Date.now();
|
|
53654
|
+
const startTime = Date.now();
|
|
53655
|
+
const BATCH_INTERVAL = 500;
|
|
53656
|
+
const BATCH_SIZE = 5;
|
|
53657
|
+
let batchCount = 0;
|
|
53658
|
+
const emitProgressBatch = () => {
|
|
53659
|
+
if (context.onProgress) {
|
|
53660
|
+
context.onProgress({
|
|
53661
|
+
type: "test_batch",
|
|
53662
|
+
module: "functionality",
|
|
53663
|
+
completed: completedTests,
|
|
53664
|
+
total: totalEstimate,
|
|
53665
|
+
batchSize: batchCount,
|
|
53666
|
+
elapsed: Date.now() - startTime
|
|
53667
|
+
});
|
|
53668
|
+
}
|
|
53669
|
+
batchCount = 0;
|
|
53670
|
+
lastBatchTime = Date.now();
|
|
53671
|
+
};
|
|
53651
53672
|
this.log(
|
|
53652
53673
|
`Testing ${toolsToTest.length} tools with concurrency limit of ${concurrency}`
|
|
53653
53674
|
);
|
|
@@ -53655,7 +53676,13 @@ class FunctionalityAssessor extends BaseAssessor {
|
|
|
53655
53676
|
toolsToTest.map(
|
|
53656
53677
|
(tool) => limit2(async () => {
|
|
53657
53678
|
this.testCount++;
|
|
53679
|
+
completedTests++;
|
|
53680
|
+
batchCount++;
|
|
53658
53681
|
const result = await this.testTool(tool, context.callTool);
|
|
53682
|
+
const timeSinceLastBatch = Date.now() - lastBatchTime;
|
|
53683
|
+
if (batchCount >= BATCH_SIZE || timeSinceLastBatch >= BATCH_INTERVAL) {
|
|
53684
|
+
emitProgressBatch();
|
|
53685
|
+
}
|
|
53659
53686
|
if (this.config.delayBetweenTests && this.config.delayBetweenTests > 0) {
|
|
53660
53687
|
await this.sleep(this.config.delayBetweenTests);
|
|
53661
53688
|
}
|
|
@@ -53663,6 +53690,9 @@ class FunctionalityAssessor extends BaseAssessor {
|
|
|
53663
53690
|
})
|
|
53664
53691
|
)
|
|
53665
53692
|
);
|
|
53693
|
+
if (batchCount > 0) {
|
|
53694
|
+
emitProgressBatch();
|
|
53695
|
+
}
|
|
53666
53696
|
for (const result of results) {
|
|
53667
53697
|
toolResults.push(result);
|
|
53668
53698
|
if (result.status === "working") {
|
|
@@ -54712,8 +54742,29 @@ class SecurityAssessor extends BaseAssessor {
|
|
|
54712
54742
|
const toolsToTest = this.selectToolsForTesting(context.tools);
|
|
54713
54743
|
const concurrency = this.config.maxParallelTests ?? 5;
|
|
54714
54744
|
const limit2 = createConcurrencyLimit(concurrency);
|
|
54745
|
+
const totalEstimate = toolsToTest.length * attackPatterns.length * 3;
|
|
54746
|
+
let completedTests = 0;
|
|
54747
|
+
let lastBatchTime = Date.now();
|
|
54748
|
+
const startTime = Date.now();
|
|
54749
|
+
const BATCH_INTERVAL = 500;
|
|
54750
|
+
const BATCH_SIZE = 10;
|
|
54751
|
+
let batchCount = 0;
|
|
54752
|
+
const emitProgressBatch = () => {
|
|
54753
|
+
if (context.onProgress) {
|
|
54754
|
+
context.onProgress({
|
|
54755
|
+
type: "test_batch",
|
|
54756
|
+
module: "security",
|
|
54757
|
+
completed: completedTests,
|
|
54758
|
+
total: totalEstimate,
|
|
54759
|
+
batchSize: batchCount,
|
|
54760
|
+
elapsed: Date.now() - startTime
|
|
54761
|
+
});
|
|
54762
|
+
}
|
|
54763
|
+
batchCount = 0;
|
|
54764
|
+
lastBatchTime = Date.now();
|
|
54765
|
+
};
|
|
54715
54766
|
this.log(
|
|
54716
|
-
`Starting ADVANCED security assessment - testing ${toolsToTest.length} tools with ${attackPatterns.length} security patterns (~${
|
|
54767
|
+
`Starting ADVANCED security assessment - testing ${toolsToTest.length} tools with ${attackPatterns.length} security patterns (~${totalEstimate} tests) [concurrency: ${concurrency}]`
|
|
54717
54768
|
);
|
|
54718
54769
|
const allToolResults = await Promise.all(
|
|
54719
54770
|
toolsToTest.map(
|
|
@@ -54744,6 +54795,8 @@ class SecurityAssessor extends BaseAssessor {
|
|
|
54744
54795
|
const payloads = getPayloadsForAttack(attackPattern.attackName);
|
|
54745
54796
|
for (const payload of payloads) {
|
|
54746
54797
|
this.testCount++;
|
|
54798
|
+
completedTests++;
|
|
54799
|
+
batchCount++;
|
|
54747
54800
|
try {
|
|
54748
54801
|
const result = await this.testPayload(
|
|
54749
54802
|
tool,
|
|
@@ -54756,6 +54809,18 @@ class SecurityAssessor extends BaseAssessor {
|
|
|
54756
54809
|
this.log(
|
|
54757
54810
|
`🚨 VULNERABILITY: ${tool.name} - ${attackPattern.attackName} (${payload.payloadType}: ${payload.description})`
|
|
54758
54811
|
);
|
|
54812
|
+
if (context.onProgress) {
|
|
54813
|
+
context.onProgress({
|
|
54814
|
+
type: "vulnerability_found",
|
|
54815
|
+
tool: tool.name,
|
|
54816
|
+
pattern: attackPattern.attackName,
|
|
54817
|
+
confidence: result.confidence || "medium",
|
|
54818
|
+
evidence: result.evidence || "Vulnerability detected",
|
|
54819
|
+
riskLevel: payload.riskLevel,
|
|
54820
|
+
requiresReview: result.requiresManualReview || false,
|
|
54821
|
+
payload: payload.payload
|
|
54822
|
+
});
|
|
54823
|
+
}
|
|
54759
54824
|
}
|
|
54760
54825
|
} catch (error) {
|
|
54761
54826
|
this.logError(
|
|
@@ -54763,6 +54828,10 @@ class SecurityAssessor extends BaseAssessor {
|
|
|
54763
54828
|
error
|
|
54764
54829
|
);
|
|
54765
54830
|
}
|
|
54831
|
+
const timeSinceLastBatch = Date.now() - lastBatchTime;
|
|
54832
|
+
if (batchCount >= BATCH_SIZE || timeSinceLastBatch >= BATCH_INTERVAL) {
|
|
54833
|
+
emitProgressBatch();
|
|
54834
|
+
}
|
|
54766
54835
|
if (this.testCount % 5 === 0) {
|
|
54767
54836
|
await this.sleep(100);
|
|
54768
54837
|
}
|
|
@@ -54775,6 +54844,9 @@ class SecurityAssessor extends BaseAssessor {
|
|
|
54775
54844
|
for (const toolResults of allToolResults) {
|
|
54776
54845
|
results.push(...toolResults);
|
|
54777
54846
|
}
|
|
54847
|
+
if (batchCount > 0) {
|
|
54848
|
+
emitProgressBatch();
|
|
54849
|
+
}
|
|
54778
54850
|
this.log(
|
|
54779
54851
|
`ADVANCED security assessment complete: ${results.length} tests executed, ${results.filter((r2) => r2.vulnerable).length} vulnerabilities found`
|
|
54780
54852
|
);
|
|
@@ -54798,8 +54870,29 @@ class SecurityAssessor extends BaseAssessor {
|
|
|
54798
54870
|
(p2) => criticalPatterns.includes(p2.attackName)
|
|
54799
54871
|
);
|
|
54800
54872
|
const toolsToTest = this.selectToolsForTesting(context.tools);
|
|
54873
|
+
const totalEstimate = toolsToTest.length * basicPatterns.length;
|
|
54874
|
+
let completedTests = 0;
|
|
54875
|
+
let lastBatchTime = Date.now();
|
|
54876
|
+
const startTime = Date.now();
|
|
54877
|
+
const BATCH_INTERVAL = 500;
|
|
54878
|
+
const BATCH_SIZE = 10;
|
|
54879
|
+
let batchCount = 0;
|
|
54880
|
+
const emitProgressBatch = () => {
|
|
54881
|
+
if (context.onProgress) {
|
|
54882
|
+
context.onProgress({
|
|
54883
|
+
type: "test_batch",
|
|
54884
|
+
module: "security",
|
|
54885
|
+
completed: completedTests,
|
|
54886
|
+
total: totalEstimate,
|
|
54887
|
+
batchSize: batchCount,
|
|
54888
|
+
elapsed: Date.now() - startTime
|
|
54889
|
+
});
|
|
54890
|
+
}
|
|
54891
|
+
batchCount = 0;
|
|
54892
|
+
lastBatchTime = Date.now();
|
|
54893
|
+
};
|
|
54801
54894
|
this.log(
|
|
54802
|
-
`Starting BASIC security assessment - testing ${toolsToTest.length} tools with ${basicPatterns.length} critical injection patterns (~${
|
|
54895
|
+
`Starting BASIC security assessment - testing ${toolsToTest.length} tools with ${basicPatterns.length} critical injection patterns (~${totalEstimate} tests)`
|
|
54803
54896
|
);
|
|
54804
54897
|
for (const tool of toolsToTest) {
|
|
54805
54898
|
if (!this.hasInputParameters(tool)) {
|
|
@@ -54831,6 +54924,8 @@ class SecurityAssessor extends BaseAssessor {
|
|
|
54831
54924
|
const payload = allPayloads[0];
|
|
54832
54925
|
if (!payload) continue;
|
|
54833
54926
|
this.testCount++;
|
|
54927
|
+
completedTests++;
|
|
54928
|
+
batchCount++;
|
|
54834
54929
|
try {
|
|
54835
54930
|
const result = await this.testPayload(
|
|
54836
54931
|
tool,
|
|
@@ -54843,6 +54938,18 @@ class SecurityAssessor extends BaseAssessor {
|
|
|
54843
54938
|
this.log(
|
|
54844
54939
|
`🚨 VULNERABILITY: ${tool.name} - ${attackPattern.attackName}`
|
|
54845
54940
|
);
|
|
54941
|
+
if (context.onProgress) {
|
|
54942
|
+
context.onProgress({
|
|
54943
|
+
type: "vulnerability_found",
|
|
54944
|
+
tool: tool.name,
|
|
54945
|
+
pattern: attackPattern.attackName,
|
|
54946
|
+
confidence: result.confidence || "medium",
|
|
54947
|
+
evidence: result.evidence || "Vulnerability detected",
|
|
54948
|
+
riskLevel: payload.riskLevel,
|
|
54949
|
+
requiresReview: result.requiresManualReview || false,
|
|
54950
|
+
payload: payload.payload
|
|
54951
|
+
});
|
|
54952
|
+
}
|
|
54846
54953
|
}
|
|
54847
54954
|
} catch (error) {
|
|
54848
54955
|
this.logError(
|
|
@@ -54850,11 +54957,18 @@ class SecurityAssessor extends BaseAssessor {
|
|
|
54850
54957
|
error
|
|
54851
54958
|
);
|
|
54852
54959
|
}
|
|
54960
|
+
const timeSinceLastBatch = Date.now() - lastBatchTime;
|
|
54961
|
+
if (batchCount >= BATCH_SIZE || timeSinceLastBatch >= BATCH_INTERVAL) {
|
|
54962
|
+
emitProgressBatch();
|
|
54963
|
+
}
|
|
54853
54964
|
if (this.testCount % 5 === 0) {
|
|
54854
54965
|
await this.sleep(100);
|
|
54855
54966
|
}
|
|
54856
54967
|
}
|
|
54857
54968
|
}
|
|
54969
|
+
if (batchCount > 0) {
|
|
54970
|
+
emitProgressBatch();
|
|
54971
|
+
}
|
|
54858
54972
|
this.log(
|
|
54859
54973
|
`BASIC security assessment complete: ${results.length} tests executed, ${results.filter((r2) => r2.vulnerable).length} vulnerabilities found`
|
|
54860
54974
|
);
|
|
@@ -60816,13 +60930,13 @@ const App = () => {
|
|
|
60816
60930
|
) });
|
|
60817
60931
|
if (window.location.pathname === "/oauth/callback") {
|
|
60818
60932
|
const OAuthCallback = React.lazy(
|
|
60819
|
-
() => __vitePreload(() => import("./OAuthCallback-
|
|
60933
|
+
() => __vitePreload(() => import("./OAuthCallback-DQS8ZWD9.js"), true ? [] : void 0)
|
|
60820
60934
|
);
|
|
60821
60935
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthCallback, { onConnect: onOAuthConnect }) });
|
|
60822
60936
|
}
|
|
60823
60937
|
if (window.location.pathname === "/oauth/callback/debug") {
|
|
60824
60938
|
const OAuthDebugCallback = React.lazy(
|
|
60825
|
-
() => __vitePreload(() => import("./OAuthDebugCallback-
|
|
60939
|
+
() => __vitePreload(() => import("./OAuthDebugCallback-CeG1zXQt.js"), true ? [] : void 0)
|
|
60826
60940
|
);
|
|
60827
60941
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(reactExports.Suspense, { fallback: /* @__PURE__ */ jsxRuntimeExports.jsx("div", { children: "Loading..." }), children: /* @__PURE__ */ jsxRuntimeExports.jsx(OAuthDebugCallback, { onConnect: onOAuthDebugConnect }) });
|
|
60828
60942
|
}
|
package/dist/index.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
<link rel="icon" type="image/svg+xml" href="/mcp.svg" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
7
|
<title>MCP Inspector</title>
|
|
8
|
-
<script type="module" crossorigin src="/assets/index-
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-C89qxkOz.js"></script>
|
|
9
9
|
<link rel="stylesheet" crossorigin href="/assets/index-Cuc9GxjD.css">
|
|
10
10
|
</head>
|
|
11
11
|
<body>
|
|
@@ -662,6 +662,63 @@ export interface AssessmentConfiguration {
|
|
|
662
662
|
portability?: boolean;
|
|
663
663
|
};
|
|
664
664
|
}
|
|
665
|
+
/**
|
|
666
|
+
* Progress callback for assessment modules to report test execution progress.
|
|
667
|
+
* Used by CLI to emit batched JSONL events.
|
|
668
|
+
*/
|
|
669
|
+
export interface ProgressCallback {
|
|
670
|
+
(event: ProgressEvent): void;
|
|
671
|
+
}
|
|
672
|
+
/**
|
|
673
|
+
* Union type for all progress events emitted during assessment.
|
|
674
|
+
*/
|
|
675
|
+
export type ProgressEvent = ModuleStartedProgress | TestBatchProgress | ModuleCompleteProgress | VulnerabilityFoundProgress;
|
|
676
|
+
/**
|
|
677
|
+
* Emitted when an assessment module begins execution.
|
|
678
|
+
*/
|
|
679
|
+
export interface ModuleStartedProgress {
|
|
680
|
+
type: "module_started";
|
|
681
|
+
module: string;
|
|
682
|
+
estimatedTests: number;
|
|
683
|
+
toolCount: number;
|
|
684
|
+
}
|
|
685
|
+
/**
|
|
686
|
+
* Emitted periodically during module execution with batched test results.
|
|
687
|
+
* Batching reduces event volume for large assessments.
|
|
688
|
+
*/
|
|
689
|
+
export interface TestBatchProgress {
|
|
690
|
+
type: "test_batch";
|
|
691
|
+
module: string;
|
|
692
|
+
completed: number;
|
|
693
|
+
total: number;
|
|
694
|
+
batchSize: number;
|
|
695
|
+
elapsed: number;
|
|
696
|
+
}
|
|
697
|
+
/**
|
|
698
|
+
* Emitted when an assessment module completes with final stats.
|
|
699
|
+
*/
|
|
700
|
+
export interface ModuleCompleteProgress {
|
|
701
|
+
type: "module_complete";
|
|
702
|
+
module: string;
|
|
703
|
+
status: AssessmentStatus;
|
|
704
|
+
score: number;
|
|
705
|
+
testsRun: number;
|
|
706
|
+
duration: number;
|
|
707
|
+
}
|
|
708
|
+
/**
|
|
709
|
+
* Emitted when a security vulnerability is detected during assessment.
|
|
710
|
+
* Provides real-time alerts for security findings.
|
|
711
|
+
*/
|
|
712
|
+
export interface VulnerabilityFoundProgress {
|
|
713
|
+
type: "vulnerability_found";
|
|
714
|
+
tool: string;
|
|
715
|
+
pattern: string;
|
|
716
|
+
confidence: "high" | "medium" | "low";
|
|
717
|
+
evidence: string;
|
|
718
|
+
riskLevel: "HIGH" | "MEDIUM" | "LOW";
|
|
719
|
+
requiresReview: boolean;
|
|
720
|
+
payload?: string;
|
|
721
|
+
}
|
|
665
722
|
export declare const DEFAULT_ASSESSMENT_CONFIG: AssessmentConfiguration;
|
|
666
723
|
export declare const REVIEWER_MODE_CONFIG: AssessmentConfiguration;
|
|
667
724
|
export declare const DEVELOPER_MODE_CONFIG: AssessmentConfiguration;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"assessmentTypes.d.ts","sourceRoot":"","sources":["../../src/lib/assessmentTypes.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"assessmentTypes.d.ts","sourceRoot":"","sources":["../../src/lib/assessmentTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,6 +59,9 @@ export const PROMPT_INJECTION_TESTS = [
|
|
|
59
59
|
riskLevel: "LOW",
|
|
60
60
|
},
|
|
61
61
|
];
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// End Progress Event Types
|
|
64
|
+
// ============================================================================
|
|
62
65
|
export const DEFAULT_ASSESSMENT_CONFIG = {
|
|
63
66
|
testTimeout: 30000, // 30 seconds per tool
|
|
64
67
|
delayBetweenTests: 0, // No delay by default
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Assessment Orchestrator
|
|
3
3
|
* Coordinates all assessment modules and manages the assessment workflow
|
|
4
4
|
*/
|
|
5
|
-
import { MCPDirectoryAssessment, AssessmentConfiguration, ManifestJsonSchema } from "../../lib/assessmentTypes.js";
|
|
5
|
+
import { MCPDirectoryAssessment, AssessmentConfiguration, ManifestJsonSchema, ProgressCallback } from "../../lib/assessmentTypes.js";
|
|
6
6
|
import { Tool, CompatibilityCallToolResult } from "@modelcontextprotocol/sdk/types.js";
|
|
7
7
|
import { ClaudeCodeBridge, ClaudeCodeBridgeConfig } from "./lib/claudeCodeBridge.js";
|
|
8
8
|
export interface AssessmentContext {
|
|
@@ -23,6 +23,7 @@ export interface AssessmentContext {
|
|
|
23
23
|
sourceCodeFiles?: Map<string, string>;
|
|
24
24
|
manifestJson?: ManifestJsonSchema;
|
|
25
25
|
manifestRaw?: string;
|
|
26
|
+
onProgress?: ProgressCallback;
|
|
26
27
|
}
|
|
27
28
|
export declare class AssessmentOrchestrator {
|
|
28
29
|
private config;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AssessmentOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/AssessmentOrchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"AssessmentOrchestrator.d.ts","sourceRoot":"","sources":["../../../src/services/assessment/AssessmentOrchestrator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EAGvB,kBAAkB,EAClB,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,IAAI,EACJ,2BAA2B,EAC5B,MAAM,oCAAoC,CAAC;AAoB5C,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EAEvB,MAAM,wBAAwB,CAAC;AAsFhC,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,2BAA2B,CAAC,CAAC;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,EAAE,uBAAuB,CAAC;IAChC,UAAU,CAAC,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IAIF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAGtC,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IAIrB,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,MAAM,CAA0B;IACxC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAa;IAGlC,OAAO,CAAC,YAAY,CAAC,CAAmB;IACxC,OAAO,CAAC,aAAa,CAAkB;IAGvC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,iBAAiB,CAAoB;IAG7C,OAAO,CAAC,eAAe,CAAC,CAA4B;IAGpD,OAAO,CAAC,qBAAqB,CAAC,CAAwB;IACtD,OAAO,CAAC,sBAAsB,CAAC,CAAyB;IACxD,OAAO,CAAC,2BAA2B,CAAC,CAA8B;IAClE,OAAO,CAAC,0BAA0B,CAAC,CAA6B;IAChE,OAAO,CAAC,mBAAmB,CAAC,CAAsB;gBAEtC,MAAM,GAAE,OAAO,CAAC,uBAAuB,CAAM;IAyDzD;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;OAGG;IACH,gBAAgB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,sBAAsB,CAAC,GAAG,IAAI;IAqBhE;;OAEG;IACH,eAAe,IAAI,OAAO;IAI1B;;OAEG;IACH,eAAe,IAAI,gBAAgB,GAAG,SAAS;IAI/C;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA2B1B;;OAEG;IACG,iBAAiB,CACrB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,sBAAsB,CAAC;IAkUlC;;OAEG;IACG,MAAM,CACV,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,IAAI,EAAE,EACb,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,OAAO,CAAC,2BAA2B,CAAC,EACzC,UAAU,CAAC,EAAE,GAAG,EAChB,aAAa,CAAC,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,GAAG,GAChB,OAAO,CAAC,sBAAsB,CAAC;IAclC,OAAO,CAAC,qBAAqB;IAmD7B,OAAO,CAAC,sBAAsB;IAoB9B,OAAO,CAAC,eAAe;IA8DvB,OAAO,CAAC,uBAAuB;IAc/B;;OAEG;IACH,SAAS,IAAI,uBAAuB;IAIpC;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,uBAAuB,CAAC,GAAG,IAAI;CAG7D"}
|
|
@@ -20,12 +20,28 @@ import { PortabilityAssessor } from "./modules/PortabilityAssessor.js";
|
|
|
20
20
|
// Claude Code integration for intelligent analysis
|
|
21
21
|
import { ClaudeCodeBridge, FULL_CLAUDE_CODE_CONFIG, } from "./lib/claudeCodeBridge.js";
|
|
22
22
|
import { TestDataGenerator } from "./TestDataGenerator.js";
|
|
23
|
+
// Track module start times for duration calculation
|
|
24
|
+
const moduleStartTimes = new Map();
|
|
25
|
+
/**
|
|
26
|
+
* Emit module_started event before assessment module begins.
|
|
27
|
+
* Format: {"event":"module_started","module":"<name>","estimatedTests":<n>,"toolCount":<n>}
|
|
28
|
+
*/
|
|
29
|
+
function emitModuleStartedEvent(moduleName, estimatedTests, toolCount) {
|
|
30
|
+
const moduleKey = moduleName.toLowerCase().replace(/ /g, "_");
|
|
31
|
+
moduleStartTimes.set(moduleKey, Date.now());
|
|
32
|
+
console.error(JSON.stringify({
|
|
33
|
+
event: "module_started",
|
|
34
|
+
module: moduleKey,
|
|
35
|
+
estimatedTests,
|
|
36
|
+
toolCount,
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
23
39
|
/**
|
|
24
40
|
* Emit module progress to stderr in JSONL format for machine parsing.
|
|
25
|
-
* Format: {"event":"module_complete","module":"<name>","status":"<STATUS>","score":<0-100>}
|
|
41
|
+
* Format: {"event":"module_complete","module":"<name>","status":"<STATUS>","score":<0-100>,"testsRun":<n>,"duration":<ms>}
|
|
26
42
|
*/
|
|
27
43
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
|
-
function emitModuleProgress(moduleName, status, result) {
|
|
44
|
+
function emitModuleProgress(moduleName, status, result, testsRun = 0) {
|
|
29
45
|
// Compute score based on module type
|
|
30
46
|
let score = 0;
|
|
31
47
|
const metrics = result?.metrics;
|
|
@@ -57,12 +73,18 @@ function emitModuleProgress(moduleName, status, result) {
|
|
|
57
73
|
}
|
|
58
74
|
// Convert module name to snake_case key for consistent machine parsing
|
|
59
75
|
const moduleKey = moduleName.toLowerCase().replace(/ /g, "_");
|
|
76
|
+
// Calculate duration from module start time
|
|
77
|
+
const startTime = moduleStartTimes.get(moduleKey);
|
|
78
|
+
const duration = startTime ? Date.now() - startTime : 0;
|
|
79
|
+
moduleStartTimes.delete(moduleKey);
|
|
60
80
|
// Emit JSONL to stderr (not stdout) so it doesn't interfere with JSON output
|
|
61
81
|
console.error(JSON.stringify({
|
|
62
82
|
event: "module_complete",
|
|
63
83
|
module: moduleKey,
|
|
64
84
|
status,
|
|
65
85
|
score,
|
|
86
|
+
testsRun,
|
|
87
|
+
duration,
|
|
66
88
|
}));
|
|
67
89
|
}
|
|
68
90
|
export class AssessmentOrchestrator {
|
|
@@ -222,109 +244,142 @@ export class AssessmentOrchestrator {
|
|
|
222
244
|
const assessmentPromises = [];
|
|
223
245
|
const assessmentResults = {};
|
|
224
246
|
if (this.config.parallelTesting) {
|
|
247
|
+
// Calculate estimates for module_started events
|
|
248
|
+
const toolCount = context.tools.length;
|
|
249
|
+
const securityPatterns = this.config.securityPatternsToTest || 17;
|
|
250
|
+
// Emit all module_started events before launching parallel assessments
|
|
251
|
+
emitModuleStartedEvent("Functionality", toolCount * 10, toolCount);
|
|
252
|
+
emitModuleStartedEvent("Security", securityPatterns * toolCount, toolCount);
|
|
253
|
+
emitModuleStartedEvent("Documentation", 5, toolCount);
|
|
254
|
+
emitModuleStartedEvent("Error Handling", toolCount * 5, toolCount);
|
|
255
|
+
emitModuleStartedEvent("Usability", 10, toolCount);
|
|
225
256
|
// Core assessments
|
|
226
257
|
assessmentPromises.push(this.functionalityAssessor.assess(context).then((r) => {
|
|
227
|
-
emitModuleProgress("Functionality", r.status, r);
|
|
258
|
+
emitModuleProgress("Functionality", r.status, r, this.functionalityAssessor.getTestCount());
|
|
228
259
|
return (assessmentResults.functionality = r);
|
|
229
260
|
}), this.securityAssessor.assess(context).then((r) => {
|
|
230
|
-
emitModuleProgress("Security", r.status, r);
|
|
261
|
+
emitModuleProgress("Security", r.status, r, this.securityAssessor.getTestCount());
|
|
231
262
|
return (assessmentResults.security = r);
|
|
232
263
|
}), this.documentationAssessor.assess(context).then((r) => {
|
|
233
|
-
emitModuleProgress("Documentation", r.status, r);
|
|
264
|
+
emitModuleProgress("Documentation", r.status, r, this.documentationAssessor.getTestCount());
|
|
234
265
|
return (assessmentResults.documentation = r);
|
|
235
266
|
}), this.errorHandlingAssessor.assess(context).then((r) => {
|
|
236
|
-
emitModuleProgress("Error Handling", r.status, r);
|
|
267
|
+
emitModuleProgress("Error Handling", r.status, r, this.errorHandlingAssessor.getTestCount());
|
|
237
268
|
return (assessmentResults.errorHandling = r);
|
|
238
269
|
}), this.usabilityAssessor.assess(context).then((r) => {
|
|
239
|
-
emitModuleProgress("Usability", r.status, r);
|
|
270
|
+
emitModuleProgress("Usability", r.status, r, this.usabilityAssessor.getTestCount());
|
|
240
271
|
return (assessmentResults.usability = r);
|
|
241
272
|
}));
|
|
242
273
|
// Extended assessments
|
|
243
274
|
if (this.mcpSpecAssessor) {
|
|
275
|
+
emitModuleStartedEvent("MCP Spec", 10, toolCount);
|
|
244
276
|
assessmentPromises.push(this.mcpSpecAssessor.assess(context).then((r) => {
|
|
245
|
-
emitModuleProgress("MCP Spec", r.status, r);
|
|
277
|
+
emitModuleProgress("MCP Spec", r.status, r, this.mcpSpecAssessor.getTestCount());
|
|
246
278
|
return (assessmentResults.mcpSpecCompliance = r);
|
|
247
279
|
}));
|
|
248
280
|
}
|
|
249
281
|
// New MCP Directory Compliance Gap assessments
|
|
250
282
|
if (this.aupComplianceAssessor) {
|
|
283
|
+
emitModuleStartedEvent("AUP", 20, toolCount);
|
|
251
284
|
assessmentPromises.push(this.aupComplianceAssessor.assess(context).then((r) => {
|
|
252
|
-
emitModuleProgress("AUP", r.status, r);
|
|
285
|
+
emitModuleProgress("AUP", r.status, r, this.aupComplianceAssessor.getTestCount());
|
|
253
286
|
return (assessmentResults.aupCompliance = r);
|
|
254
287
|
}));
|
|
255
288
|
}
|
|
256
289
|
if (this.toolAnnotationAssessor) {
|
|
290
|
+
emitModuleStartedEvent("Annotations", toolCount, toolCount);
|
|
257
291
|
assessmentPromises.push(this.toolAnnotationAssessor.assess(context).then((r) => {
|
|
258
|
-
emitModuleProgress("Annotations", r.status, r);
|
|
292
|
+
emitModuleProgress("Annotations", r.status, r, this.toolAnnotationAssessor.getTestCount());
|
|
259
293
|
return (assessmentResults.toolAnnotations = r);
|
|
260
294
|
}));
|
|
261
295
|
}
|
|
262
296
|
if (this.prohibitedLibrariesAssessor) {
|
|
297
|
+
emitModuleStartedEvent("Libraries", 5, toolCount);
|
|
263
298
|
assessmentPromises.push(this.prohibitedLibrariesAssessor.assess(context).then((r) => {
|
|
264
|
-
emitModuleProgress("Libraries", r.status, r);
|
|
299
|
+
emitModuleProgress("Libraries", r.status, r, this.prohibitedLibrariesAssessor.getTestCount());
|
|
265
300
|
return (assessmentResults.prohibitedLibraries = r);
|
|
266
301
|
}));
|
|
267
302
|
}
|
|
268
303
|
if (this.manifestValidationAssessor) {
|
|
304
|
+
emitModuleStartedEvent("Manifest", 10, toolCount);
|
|
269
305
|
assessmentPromises.push(this.manifestValidationAssessor.assess(context).then((r) => {
|
|
270
|
-
emitModuleProgress("Manifest", r.status, r);
|
|
306
|
+
emitModuleProgress("Manifest", r.status, r, this.manifestValidationAssessor.getTestCount());
|
|
271
307
|
return (assessmentResults.manifestValidation = r);
|
|
272
308
|
}));
|
|
273
309
|
}
|
|
274
310
|
if (this.portabilityAssessor) {
|
|
311
|
+
emitModuleStartedEvent("Portability", 10, toolCount);
|
|
275
312
|
assessmentPromises.push(this.portabilityAssessor.assess(context).then((r) => {
|
|
276
|
-
emitModuleProgress("Portability", r.status, r);
|
|
313
|
+
emitModuleProgress("Portability", r.status, r, this.portabilityAssessor.getTestCount());
|
|
277
314
|
return (assessmentResults.portability = r);
|
|
278
315
|
}));
|
|
279
316
|
}
|
|
280
317
|
await Promise.all(assessmentPromises);
|
|
281
318
|
}
|
|
282
319
|
else {
|
|
283
|
-
// Sequential execution
|
|
320
|
+
// Sequential execution with module_started events
|
|
321
|
+
const toolCount = context.tools.length;
|
|
322
|
+
const securityPatterns = this.config.securityPatternsToTest || 17;
|
|
323
|
+
// Functionality: ~10 scenarios per tool
|
|
324
|
+
emitModuleStartedEvent("Functionality", toolCount * 10, toolCount);
|
|
284
325
|
assessmentResults.functionality =
|
|
285
326
|
await this.functionalityAssessor.assess(context);
|
|
286
|
-
emitModuleProgress("Functionality", assessmentResults.functionality.status, assessmentResults.functionality);
|
|
327
|
+
emitModuleProgress("Functionality", assessmentResults.functionality.status, assessmentResults.functionality, this.functionalityAssessor.getTestCount());
|
|
328
|
+
// Security: patterns × tools
|
|
329
|
+
emitModuleStartedEvent("Security", securityPatterns * toolCount, toolCount);
|
|
287
330
|
assessmentResults.security = await this.securityAssessor.assess(context);
|
|
288
|
-
emitModuleProgress("Security", assessmentResults.security.status, assessmentResults.security);
|
|
331
|
+
emitModuleProgress("Security", assessmentResults.security.status, assessmentResults.security, this.securityAssessor.getTestCount());
|
|
332
|
+
// Documentation: ~5 static tests
|
|
333
|
+
emitModuleStartedEvent("Documentation", 5, toolCount);
|
|
289
334
|
assessmentResults.documentation =
|
|
290
335
|
await this.documentationAssessor.assess(context);
|
|
291
|
-
emitModuleProgress("Documentation", assessmentResults.documentation.status, assessmentResults.documentation);
|
|
336
|
+
emitModuleProgress("Documentation", assessmentResults.documentation.status, assessmentResults.documentation, this.documentationAssessor.getTestCount());
|
|
337
|
+
// Error Handling: ~5 tests per tool
|
|
338
|
+
emitModuleStartedEvent("Error Handling", toolCount * 5, toolCount);
|
|
292
339
|
assessmentResults.errorHandling =
|
|
293
340
|
await this.errorHandlingAssessor.assess(context);
|
|
294
|
-
emitModuleProgress("Error Handling", assessmentResults.errorHandling.status, assessmentResults.errorHandling);
|
|
341
|
+
emitModuleProgress("Error Handling", assessmentResults.errorHandling.status, assessmentResults.errorHandling, this.errorHandlingAssessor.getTestCount());
|
|
342
|
+
// Usability: ~10 static tests
|
|
343
|
+
emitModuleStartedEvent("Usability", 10, toolCount);
|
|
295
344
|
assessmentResults.usability =
|
|
296
345
|
await this.usabilityAssessor.assess(context);
|
|
297
|
-
emitModuleProgress("Usability", assessmentResults.usability.status, assessmentResults.usability);
|
|
346
|
+
emitModuleProgress("Usability", assessmentResults.usability.status, assessmentResults.usability, this.usabilityAssessor.getTestCount());
|
|
298
347
|
if (this.mcpSpecAssessor) {
|
|
348
|
+
emitModuleStartedEvent("MCP Spec", 10, toolCount);
|
|
299
349
|
assessmentResults.mcpSpecCompliance =
|
|
300
350
|
await this.mcpSpecAssessor.assess(context);
|
|
301
|
-
emitModuleProgress("MCP Spec", assessmentResults.mcpSpecCompliance.status, assessmentResults.mcpSpecCompliance);
|
|
351
|
+
emitModuleProgress("MCP Spec", assessmentResults.mcpSpecCompliance.status, assessmentResults.mcpSpecCompliance, this.mcpSpecAssessor.getTestCount());
|
|
302
352
|
}
|
|
303
353
|
// New MCP Directory Compliance Gap assessments (sequential)
|
|
304
354
|
if (this.aupComplianceAssessor) {
|
|
355
|
+
emitModuleStartedEvent("AUP", 20, toolCount);
|
|
305
356
|
assessmentResults.aupCompliance =
|
|
306
357
|
await this.aupComplianceAssessor.assess(context);
|
|
307
|
-
emitModuleProgress("AUP", assessmentResults.aupCompliance.status, assessmentResults.aupCompliance);
|
|
358
|
+
emitModuleProgress("AUP", assessmentResults.aupCompliance.status, assessmentResults.aupCompliance, this.aupComplianceAssessor.getTestCount());
|
|
308
359
|
}
|
|
309
360
|
if (this.toolAnnotationAssessor) {
|
|
361
|
+
emitModuleStartedEvent("Annotations", toolCount, toolCount);
|
|
310
362
|
assessmentResults.toolAnnotations =
|
|
311
363
|
await this.toolAnnotationAssessor.assess(context);
|
|
312
|
-
emitModuleProgress("Annotations", assessmentResults.toolAnnotations.status, assessmentResults.toolAnnotations);
|
|
364
|
+
emitModuleProgress("Annotations", assessmentResults.toolAnnotations.status, assessmentResults.toolAnnotations, this.toolAnnotationAssessor.getTestCount());
|
|
313
365
|
}
|
|
314
366
|
if (this.prohibitedLibrariesAssessor) {
|
|
367
|
+
emitModuleStartedEvent("Libraries", 5, toolCount);
|
|
315
368
|
assessmentResults.prohibitedLibraries =
|
|
316
369
|
await this.prohibitedLibrariesAssessor.assess(context);
|
|
317
|
-
emitModuleProgress("Libraries", assessmentResults.prohibitedLibraries.status, assessmentResults.prohibitedLibraries);
|
|
370
|
+
emitModuleProgress("Libraries", assessmentResults.prohibitedLibraries.status, assessmentResults.prohibitedLibraries, this.prohibitedLibrariesAssessor.getTestCount());
|
|
318
371
|
}
|
|
319
372
|
if (this.manifestValidationAssessor) {
|
|
373
|
+
emitModuleStartedEvent("Manifest", 10, toolCount);
|
|
320
374
|
assessmentResults.manifestValidation =
|
|
321
375
|
await this.manifestValidationAssessor.assess(context);
|
|
322
|
-
emitModuleProgress("Manifest", assessmentResults.manifestValidation.status, assessmentResults.manifestValidation);
|
|
376
|
+
emitModuleProgress("Manifest", assessmentResults.manifestValidation.status, assessmentResults.manifestValidation, this.manifestValidationAssessor.getTestCount());
|
|
323
377
|
}
|
|
324
378
|
if (this.portabilityAssessor) {
|
|
379
|
+
emitModuleStartedEvent("Portability", 10, toolCount);
|
|
325
380
|
assessmentResults.portability =
|
|
326
381
|
await this.portabilityAssessor.assess(context);
|
|
327
|
-
emitModuleProgress("Portability", assessmentResults.portability.status, assessmentResults.portability);
|
|
382
|
+
emitModuleProgress("Portability", assessmentResults.portability.status, assessmentResults.portability, this.portabilityAssessor.getTestCount());
|
|
328
383
|
}
|
|
329
384
|
}
|
|
330
385
|
// Collect test counts from all assessors
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FunctionalityAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/FunctionalityAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,uBAAuB,EAAkB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAI9D,qBAAa,qBAAsB,SAAQ,YAAY;IACrD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoCvB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"FunctionalityAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/FunctionalityAssessor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,uBAAuB,EAAkB,MAAM,uBAAuB,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAI9D,qBAAa,qBAAsB,SAAQ,YAAY;IACrD;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAoCvB,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,uBAAuB,CAAC;YA0H5D,QAAQ;IA6EtB,OAAO,CAAC,qBAAqB;IA2B7B,OAAO,CAAC,kBAAkB;IA0FnB,iBAAiB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO;IAI9C,OAAO,CAAC,mBAAmB;CA+B5B"}
|
|
@@ -42,10 +42,40 @@ export class FunctionalityAssessor extends BaseAssessor {
|
|
|
42
42
|
// Parallel tool testing with concurrency limit
|
|
43
43
|
const concurrency = this.config.maxParallelTests ?? 5;
|
|
44
44
|
const limit = createConcurrencyLimit(concurrency);
|
|
45
|
+
// Progress tracking for batched events
|
|
46
|
+
const totalEstimate = toolsToTest.length;
|
|
47
|
+
let completedTests = 0;
|
|
48
|
+
let lastBatchTime = Date.now();
|
|
49
|
+
const startTime = Date.now();
|
|
50
|
+
const BATCH_INTERVAL = 500;
|
|
51
|
+
const BATCH_SIZE = 5; // Smaller batch for functionality (fewer tests)
|
|
52
|
+
let batchCount = 0;
|
|
53
|
+
const emitProgressBatch = () => {
|
|
54
|
+
if (context.onProgress) {
|
|
55
|
+
context.onProgress({
|
|
56
|
+
type: "test_batch",
|
|
57
|
+
module: "functionality",
|
|
58
|
+
completed: completedTests,
|
|
59
|
+
total: totalEstimate,
|
|
60
|
+
batchSize: batchCount,
|
|
61
|
+
elapsed: Date.now() - startTime,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
batchCount = 0;
|
|
65
|
+
lastBatchTime = Date.now();
|
|
66
|
+
};
|
|
45
67
|
this.log(`Testing ${toolsToTest.length} tools with concurrency limit of ${concurrency}`);
|
|
46
68
|
const results = await Promise.all(toolsToTest.map((tool) => limit(async () => {
|
|
47
69
|
this.testCount++;
|
|
70
|
+
completedTests++;
|
|
71
|
+
batchCount++;
|
|
48
72
|
const result = await this.testTool(tool, context.callTool);
|
|
73
|
+
// Emit progress batch if threshold reached
|
|
74
|
+
const timeSinceLastBatch = Date.now() - lastBatchTime;
|
|
75
|
+
if (batchCount >= BATCH_SIZE ||
|
|
76
|
+
timeSinceLastBatch >= BATCH_INTERVAL) {
|
|
77
|
+
emitProgressBatch();
|
|
78
|
+
}
|
|
49
79
|
// Add delay between tests to avoid rate limiting
|
|
50
80
|
if (this.config.delayBetweenTests &&
|
|
51
81
|
this.config.delayBetweenTests > 0) {
|
|
@@ -53,6 +83,10 @@ export class FunctionalityAssessor extends BaseAssessor {
|
|
|
53
83
|
}
|
|
54
84
|
return result;
|
|
55
85
|
})));
|
|
86
|
+
// Final flush of any remaining progress
|
|
87
|
+
if (batchCount > 0) {
|
|
88
|
+
emitProgressBatch();
|
|
89
|
+
}
|
|
56
90
|
// Post-process results after parallel execution
|
|
57
91
|
for (const result of results) {
|
|
58
92
|
toolResults.push(result);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecurityAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/SecurityAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,kBAAkB,EAInB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAU9D,qBAAa,gBAAiB,SAAQ,YAAY;IAC1C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuFrE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkC7B;;;;OAIG;YACW,yBAAyB;
|
|
1
|
+
{"version":3,"file":"SecurityAssessor.d.ts","sourceRoot":"","sources":["../../../../src/services/assessment/modules/SecurityAssessor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,kBAAkB,EAInB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAU9D,qBAAa,gBAAiB,SAAQ,YAAY;IAC1C,MAAM,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAuFrE;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAkC7B;;;;OAIG;YACW,yBAAyB;IAuKvC;;;;OAIG;YACW,qBAAqB;IA2JnC;;OAEG;YACW,WAAW;IA2HzB;;;;;OAKG;IACH,OAAO,CAAC,iBAAiB;IAkDzB;;;OAGG;IACH,OAAO,CAAC,8BAA8B;IAmDtC;;OAEG;IACH,OAAO,CAAC,aAAa;IA+BrB;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAgClC;;;OAGG;IACH,OAAO,CAAC,eAAe;IA6HvB;;;;;;;OAOG;IACH,OAAO,CAAC,qBAAqB;IAiE7B;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;IAqC5B;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;IAsB3B;;;;;;;OAOG;IACH,OAAO,CAAC,oBAAoB;IAkC5B;;OAEG;YACW,+BAA+B;IAiC7C;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAYjC;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA0B/B;;OAEG;IACH,OAAO,CAAC,2BAA2B;IAkEnC;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAuI3B;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAsB5B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,oBAAoB;IAiM5B;;;;;;OAMG;IACH,OAAO,CAAC,wBAAwB;IAiDhC;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IA8BhC;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAW9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,oBAAoB;IAoE5B;;OAEG;IACH,OAAO,CAAC,YAAY;IASpB;;;OAGG;IACH,OAAO,CAAC,eAAe;IASvB;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAiB9B;;;OAGG;IACH,OAAO,CAAC,kBAAkB;CAmB3B"}
|
|
@@ -112,7 +112,30 @@ export class SecurityAssessor extends BaseAssessor {
|
|
|
112
112
|
// Parallel tool testing with concurrency limit
|
|
113
113
|
const concurrency = this.config.maxParallelTests ?? 5;
|
|
114
114
|
const limit = createConcurrencyLimit(concurrency);
|
|
115
|
-
|
|
115
|
+
// Progress tracking for batched events
|
|
116
|
+
const totalEstimate = toolsToTest.length * attackPatterns.length * 3; // ~3 payloads per pattern
|
|
117
|
+
let completedTests = 0;
|
|
118
|
+
let lastBatchTime = Date.now();
|
|
119
|
+
const startTime = Date.now();
|
|
120
|
+
const BATCH_INTERVAL = 500; // ms
|
|
121
|
+
const BATCH_SIZE = 10; // tests
|
|
122
|
+
let batchCount = 0;
|
|
123
|
+
// Helper to emit batched progress
|
|
124
|
+
const emitProgressBatch = () => {
|
|
125
|
+
if (context.onProgress) {
|
|
126
|
+
context.onProgress({
|
|
127
|
+
type: "test_batch",
|
|
128
|
+
module: "security",
|
|
129
|
+
completed: completedTests,
|
|
130
|
+
total: totalEstimate,
|
|
131
|
+
batchSize: batchCount,
|
|
132
|
+
elapsed: Date.now() - startTime,
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
batchCount = 0;
|
|
136
|
+
lastBatchTime = Date.now();
|
|
137
|
+
};
|
|
138
|
+
this.log(`Starting ADVANCED security assessment - testing ${toolsToTest.length} tools with ${attackPatterns.length} security patterns (~${totalEstimate} tests) [concurrency: ${concurrency}]`);
|
|
116
139
|
const allToolResults = await Promise.all(toolsToTest.map((tool) => limit(async () => {
|
|
117
140
|
const toolResults = [];
|
|
118
141
|
// Tools with no input parameters can't be exploited via payload injection
|
|
@@ -145,16 +168,37 @@ export class SecurityAssessor extends BaseAssessor {
|
|
|
145
168
|
// Test tool with each payload variation
|
|
146
169
|
for (const payload of payloads) {
|
|
147
170
|
this.testCount++;
|
|
171
|
+
completedTests++;
|
|
172
|
+
batchCount++;
|
|
148
173
|
try {
|
|
149
174
|
const result = await this.testPayload(tool, attackPattern.attackName, payload, context.callTool);
|
|
150
175
|
toolResults.push(result);
|
|
151
176
|
if (result.vulnerable) {
|
|
152
177
|
this.log(`🚨 VULNERABILITY: ${tool.name} - ${attackPattern.attackName} (${payload.payloadType}: ${payload.description})`);
|
|
178
|
+
// Emit real-time vulnerability_found event
|
|
179
|
+
if (context.onProgress) {
|
|
180
|
+
context.onProgress({
|
|
181
|
+
type: "vulnerability_found",
|
|
182
|
+
tool: tool.name,
|
|
183
|
+
pattern: attackPattern.attackName,
|
|
184
|
+
confidence: result.confidence || "medium",
|
|
185
|
+
evidence: result.evidence || "Vulnerability detected",
|
|
186
|
+
riskLevel: payload.riskLevel,
|
|
187
|
+
requiresReview: result.requiresManualReview || false,
|
|
188
|
+
payload: payload.payload,
|
|
189
|
+
});
|
|
190
|
+
}
|
|
153
191
|
}
|
|
154
192
|
}
|
|
155
193
|
catch (error) {
|
|
156
194
|
this.logError(`Error testing ${tool.name} with ${attackPattern.attackName}`, error);
|
|
157
195
|
}
|
|
196
|
+
// Emit progress batch if threshold reached
|
|
197
|
+
const timeSinceLastBatch = Date.now() - lastBatchTime;
|
|
198
|
+
if (batchCount >= BATCH_SIZE ||
|
|
199
|
+
timeSinceLastBatch >= BATCH_INTERVAL) {
|
|
200
|
+
emitProgressBatch();
|
|
201
|
+
}
|
|
158
202
|
// Rate limiting
|
|
159
203
|
if (this.testCount % 5 === 0) {
|
|
160
204
|
await this.sleep(100);
|
|
@@ -167,6 +211,10 @@ export class SecurityAssessor extends BaseAssessor {
|
|
|
167
211
|
for (const toolResults of allToolResults) {
|
|
168
212
|
results.push(...toolResults);
|
|
169
213
|
}
|
|
214
|
+
// Final flush of any remaining progress
|
|
215
|
+
if (batchCount > 0) {
|
|
216
|
+
emitProgressBatch();
|
|
217
|
+
}
|
|
170
218
|
this.log(`ADVANCED security assessment complete: ${results.length} tests executed, ${results.filter((r) => r.vulnerable).length} vulnerabilities found`);
|
|
171
219
|
return results;
|
|
172
220
|
}
|
|
@@ -188,7 +236,29 @@ export class SecurityAssessor extends BaseAssessor {
|
|
|
188
236
|
const basicPatterns = allPatterns.filter((p) => criticalPatterns.includes(p.attackName));
|
|
189
237
|
// Select tools for testing
|
|
190
238
|
const toolsToTest = this.selectToolsForTesting(context.tools);
|
|
191
|
-
|
|
239
|
+
// Progress tracking for batched events
|
|
240
|
+
const totalEstimate = toolsToTest.length * basicPatterns.length;
|
|
241
|
+
let completedTests = 0;
|
|
242
|
+
let lastBatchTime = Date.now();
|
|
243
|
+
const startTime = Date.now();
|
|
244
|
+
const BATCH_INTERVAL = 500;
|
|
245
|
+
const BATCH_SIZE = 10;
|
|
246
|
+
let batchCount = 0;
|
|
247
|
+
const emitProgressBatch = () => {
|
|
248
|
+
if (context.onProgress) {
|
|
249
|
+
context.onProgress({
|
|
250
|
+
type: "test_batch",
|
|
251
|
+
module: "security",
|
|
252
|
+
completed: completedTests,
|
|
253
|
+
total: totalEstimate,
|
|
254
|
+
batchSize: batchCount,
|
|
255
|
+
elapsed: Date.now() - startTime,
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
batchCount = 0;
|
|
259
|
+
lastBatchTime = Date.now();
|
|
260
|
+
};
|
|
261
|
+
this.log(`Starting BASIC security assessment - testing ${toolsToTest.length} tools with ${basicPatterns.length} critical injection patterns (~${totalEstimate} tests)`);
|
|
192
262
|
for (const tool of toolsToTest) {
|
|
193
263
|
// Tools with no input parameters can't be exploited via payload injection
|
|
194
264
|
// Add passing results so they appear in the UI
|
|
@@ -221,22 +291,46 @@ export class SecurityAssessor extends BaseAssessor {
|
|
|
221
291
|
if (!payload)
|
|
222
292
|
continue;
|
|
223
293
|
this.testCount++;
|
|
294
|
+
completedTests++;
|
|
295
|
+
batchCount++;
|
|
224
296
|
try {
|
|
225
297
|
const result = await this.testPayload(tool, attackPattern.attackName, payload, context.callTool);
|
|
226
298
|
results.push(result);
|
|
227
299
|
if (result.vulnerable) {
|
|
228
300
|
this.log(`🚨 VULNERABILITY: ${tool.name} - ${attackPattern.attackName}`);
|
|
301
|
+
// Emit real-time vulnerability_found event
|
|
302
|
+
if (context.onProgress) {
|
|
303
|
+
context.onProgress({
|
|
304
|
+
type: "vulnerability_found",
|
|
305
|
+
tool: tool.name,
|
|
306
|
+
pattern: attackPattern.attackName,
|
|
307
|
+
confidence: result.confidence || "medium",
|
|
308
|
+
evidence: result.evidence || "Vulnerability detected",
|
|
309
|
+
riskLevel: payload.riskLevel,
|
|
310
|
+
requiresReview: result.requiresManualReview || false,
|
|
311
|
+
payload: payload.payload,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
229
314
|
}
|
|
230
315
|
}
|
|
231
316
|
catch (error) {
|
|
232
317
|
this.logError(`Error testing ${tool.name} with ${attackPattern.attackName}`, error);
|
|
233
318
|
}
|
|
319
|
+
// Emit progress batch if threshold reached
|
|
320
|
+
const timeSinceLastBatch = Date.now() - lastBatchTime;
|
|
321
|
+
if (batchCount >= BATCH_SIZE || timeSinceLastBatch >= BATCH_INTERVAL) {
|
|
322
|
+
emitProgressBatch();
|
|
323
|
+
}
|
|
234
324
|
// Rate limiting
|
|
235
325
|
if (this.testCount % 5 === 0) {
|
|
236
326
|
await this.sleep(100);
|
|
237
327
|
}
|
|
238
328
|
}
|
|
239
329
|
}
|
|
330
|
+
// Final flush of any remaining progress
|
|
331
|
+
if (batchCount > 0) {
|
|
332
|
+
emitProgressBatch();
|
|
333
|
+
}
|
|
240
334
|
this.log(`BASIC security assessment complete: ${results.length} tests executed, ${results.filter((r) => r.vulnerable).length} vulnerabilities found`);
|
|
241
335
|
return results;
|
|
242
336
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bryan-thompson/inspector-assessment-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.11.0",
|
|
4
4
|
"description": "Client-side application for the Enhanced MCP Inspector with assessment capabilities",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Bryan Thompson <bryan@triepod.ai>",
|