@provartesting/provardx-cli 1.5.0-dev.2 → 1.5.1
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/README.md +163 -12
- package/bin/mcp-start.js +74 -0
- package/lib/commands/provar/auth/clear.d.ts +7 -0
- package/lib/commands/provar/auth/clear.js +36 -0
- package/lib/commands/provar/auth/clear.js.map +1 -0
- package/lib/commands/provar/auth/login.d.ts +10 -0
- package/lib/commands/provar/auth/login.js +90 -0
- package/lib/commands/provar/auth/login.js.map +1 -0
- package/lib/commands/provar/auth/rotate.d.ts +7 -0
- package/lib/commands/provar/auth/rotate.js +42 -0
- package/lib/commands/provar/auth/rotate.js.map +1 -0
- package/lib/commands/provar/auth/status.d.ts +7 -0
- package/lib/commands/provar/auth/status.js +107 -0
- package/lib/commands/provar/auth/status.js.map +1 -0
- package/lib/commands/provar/mcp/start.d.ts +2 -0
- package/lib/commands/provar/mcp/start.js +14 -1
- package/lib/commands/provar/mcp/start.js.map +1 -1
- package/lib/mcp/docs/NITROX_CATALOG_SOURCE.json +6 -0
- package/lib/mcp/docs/NITROX_COMPONENT_CATALOG.md +2001 -0
- package/lib/mcp/docs/PROVAR_TEST_STEP_REFERENCE.md +1430 -0
- package/lib/mcp/docs/PROVAR_TOOL_GUIDE.md +187 -0
- package/lib/mcp/licensing/algasClient.js +14 -5
- package/lib/mcp/licensing/algasClient.js.map +1 -1
- package/lib/mcp/licensing/ideDetection.d.ts +0 -12
- package/lib/mcp/licensing/ideDetection.js +1 -73
- package/lib/mcp/licensing/ideDetection.js.map +1 -1
- package/lib/mcp/licensing/licenseCache.js +7 -1
- package/lib/mcp/licensing/licenseCache.js.map +1 -1
- package/lib/mcp/licensing/licenseValidator.d.ts +3 -3
- package/lib/mcp/licensing/licenseValidator.js +11 -4
- package/lib/mcp/licensing/licenseValidator.js.map +1 -1
- package/lib/mcp/prompts/guidePrompts.d.ts +4 -0
- package/lib/mcp/prompts/guidePrompts.js +334 -0
- package/lib/mcp/prompts/guidePrompts.js.map +1 -0
- package/lib/mcp/prompts/index.d.ts +2 -0
- package/lib/mcp/prompts/index.js +23 -0
- package/lib/mcp/prompts/index.js.map +1 -0
- package/lib/mcp/prompts/loopPrompts.d.ts +6 -0
- package/lib/mcp/prompts/loopPrompts.js +435 -0
- package/lib/mcp/prompts/loopPrompts.js.map +1 -0
- package/lib/mcp/prompts/migrationPrompts.d.ts +4 -0
- package/lib/mcp/prompts/migrationPrompts.js +207 -0
- package/lib/mcp/prompts/migrationPrompts.js.map +1 -0
- package/lib/mcp/rules/provar_best_practices_rules.json +256 -544
- package/lib/mcp/security/pathPolicy.d.ts +5 -0
- package/lib/mcp/security/pathPolicy.js +58 -3
- package/lib/mcp/security/pathPolicy.js.map +1 -1
- package/lib/mcp/server.d.ts +18 -0
- package/lib/mcp/server.js +232 -19
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/tools/antTools.d.ts +15 -0
- package/lib/mcp/tools/antTools.js +369 -170
- package/lib/mcp/tools/antTools.js.map +1 -1
- package/lib/mcp/tools/automationTools.d.ts +18 -8
- package/lib/mcp/tools/automationTools.js +333 -176
- package/lib/mcp/tools/automationTools.js.map +1 -1
- package/lib/mcp/tools/bestPracticesEngine.js +161 -23
- package/lib/mcp/tools/bestPracticesEngine.js.map +1 -1
- package/lib/mcp/tools/connectionTools.d.ts +4 -0
- package/lib/mcp/tools/connectionTools.js +242 -0
- package/lib/mcp/tools/connectionTools.js.map +1 -0
- package/lib/mcp/tools/defectTools.d.ts +1 -1
- package/lib/mcp/tools/defectTools.js +61 -50
- package/lib/mcp/tools/defectTools.js.map +1 -1
- package/lib/mcp/tools/descHelper.d.ts +5 -0
- package/lib/mcp/tools/descHelper.js +14 -0
- package/lib/mcp/tools/descHelper.js.map +1 -0
- package/lib/mcp/tools/hierarchyValidate.d.ts +1 -1
- package/lib/mcp/tools/hierarchyValidate.js +127 -42
- package/lib/mcp/tools/hierarchyValidate.js.map +1 -1
- package/lib/mcp/tools/nitroXTools.d.ts +23 -0
- package/lib/mcp/tools/nitroXTools.js +863 -0
- package/lib/mcp/tools/nitroXTools.js.map +1 -0
- package/lib/mcp/tools/pageObjectGenerate.js +150 -57
- package/lib/mcp/tools/pageObjectGenerate.js.map +1 -1
- package/lib/mcp/tools/pageObjectValidate.js +143 -46
- package/lib/mcp/tools/pageObjectValidate.js.map +1 -1
- package/lib/mcp/tools/projectInspect.js +79 -32
- package/lib/mcp/tools/projectInspect.js.map +1 -1
- package/lib/mcp/tools/projectValidateFromPath.js +185 -58
- package/lib/mcp/tools/projectValidateFromPath.js.map +1 -1
- package/lib/mcp/tools/propertiesTools.d.ts +2 -0
- package/lib/mcp/tools/propertiesTools.js +358 -78
- package/lib/mcp/tools/propertiesTools.js.map +1 -1
- package/lib/mcp/tools/qualityHubApiTools.d.ts +3 -0
- package/lib/mcp/tools/qualityHubApiTools.js +139 -0
- package/lib/mcp/tools/qualityHubApiTools.js.map +1 -0
- package/lib/mcp/tools/qualityHubTools.js +292 -72
- package/lib/mcp/tools/qualityHubTools.js.map +1 -1
- package/lib/mcp/tools/rcaTools.d.ts +3 -2
- package/lib/mcp/tools/rcaTools.js +194 -56
- package/lib/mcp/tools/rcaTools.js.map +1 -1
- package/lib/mcp/tools/sfSpawn.d.ts +25 -3
- package/lib/mcp/tools/sfSpawn.js +154 -6
- package/lib/mcp/tools/sfSpawn.js.map +1 -1
- package/lib/mcp/tools/testCaseGenerate.js +285 -78
- package/lib/mcp/tools/testCaseGenerate.js.map +1 -1
- package/lib/mcp/tools/testCaseStepTools.d.ts +4 -0
- package/lib/mcp/tools/testCaseStepTools.js +244 -0
- package/lib/mcp/tools/testCaseStepTools.js.map +1 -0
- package/lib/mcp/tools/testCaseValidate.d.ts +11 -0
- package/lib/mcp/tools/testCaseValidate.js +381 -46
- package/lib/mcp/tools/testCaseValidate.js.map +1 -1
- package/lib/mcp/tools/testPlanTools.d.ts +1 -0
- package/lib/mcp/tools/testPlanTools.js +316 -59
- package/lib/mcp/tools/testPlanTools.js.map +1 -1
- package/lib/mcp/tools/testPlanValidate.js +114 -23
- package/lib/mcp/tools/testPlanValidate.js.map +1 -1
- package/lib/mcp/tools/testSuiteValidate.js +130 -15
- package/lib/mcp/tools/testSuiteValidate.js.map +1 -1
- package/lib/mcp/update/updateChecker.d.ts +14 -0
- package/lib/mcp/update/updateChecker.js +228 -0
- package/lib/mcp/update/updateChecker.js.map +1 -0
- package/lib/mcp/utils/detailLevel.d.ts +9 -0
- package/lib/mcp/utils/detailLevel.js +20 -0
- package/lib/mcp/utils/detailLevel.js.map +1 -0
- package/lib/mcp/utils/fieldMask.d.ts +17 -0
- package/lib/mcp/utils/fieldMask.js +75 -0
- package/lib/mcp/utils/fieldMask.js.map +1 -0
- package/lib/mcp/utils/tokenMeta.d.ts +40 -0
- package/lib/mcp/utils/tokenMeta.js +90 -0
- package/lib/mcp/utils/tokenMeta.js.map +1 -0
- package/lib/mcp/utils/validationDiff.d.ts +57 -0
- package/lib/mcp/utils/validationDiff.js +191 -0
- package/lib/mcp/utils/validationDiff.js.map +1 -0
- package/lib/mcp/utils/validationScore.d.ts +15 -0
- package/lib/mcp/utils/validationScore.js +31 -0
- package/lib/mcp/utils/validationScore.js.map +1 -0
- package/lib/services/auth/credentials.d.ts +21 -0
- package/lib/services/auth/credentials.js +75 -0
- package/lib/services/auth/credentials.js.map +1 -0
- package/lib/services/auth/loginFlow.d.ts +68 -0
- package/lib/services/auth/loginFlow.js +216 -0
- package/lib/services/auth/loginFlow.js.map +1 -0
- package/lib/services/projectValidation.d.ts +5 -2
- package/lib/services/projectValidation.js +83 -31
- package/lib/services/projectValidation.js.map +1 -1
- package/lib/services/qualityHub/client.d.ts +161 -0
- package/lib/services/qualityHub/client.js +226 -0
- package/lib/services/qualityHub/client.js.map +1 -0
- package/messages/sf.provar.auth.clear.md +16 -0
- package/messages/sf.provar.auth.login.md +31 -0
- package/messages/sf.provar.auth.rotate.md +23 -0
- package/messages/sf.provar.auth.status.md +16 -0
- package/messages/sf.provar.mcp.start.md +83 -48
- package/oclif.manifest.json +325 -28
- package/package.json +35 -12
|
@@ -7,20 +7,113 @@
|
|
|
7
7
|
/* eslint-disable camelcase */
|
|
8
8
|
import fs from 'node:fs';
|
|
9
9
|
import path from 'node:path';
|
|
10
|
+
import { createHash } from 'node:crypto';
|
|
10
11
|
import { z } from 'zod';
|
|
11
12
|
import { XMLParser } from 'fast-xml-parser';
|
|
12
13
|
import { assertPathAllowed, PathPolicyError } from '../security/pathPolicy.js';
|
|
13
14
|
import { makeError, makeRequestId } from '../schemas/common.js';
|
|
14
15
|
import { log } from '../logging/logger.js';
|
|
16
|
+
import { resolveApiKey } from '../../services/auth/credentials.js';
|
|
17
|
+
import { qualityHubClient, getQualityHubBaseUrl, QualityHubAuthError, QualityHubRateLimitError, REQUEST_ACCESS_URL, } from '../../services/qualityHub/client.js';
|
|
18
|
+
import { applyDetailLevel } from '../utils/detailLevel.js';
|
|
19
|
+
import { calcCompletenessScore, calcNextAction } from '../utils/validationScore.js';
|
|
20
|
+
import { generateRunId, saveRun, hasAnyRun, loadBaselineViolations, computeDiff, computeContextHash, resolveValidationDir, } from '../utils/validationDiff.js';
|
|
15
21
|
import { runBestPractices } from './bestPracticesEngine.js';
|
|
22
|
+
import { desc } from './descHelper.js';
|
|
23
|
+
const ONBOARDING_MESSAGE = 'Quality Hub validation unavailable — running local validation only (structural rules, no quality scoring).\n' +
|
|
24
|
+
'To enable Quality Hub (170 rules): run sf provar auth login\n' +
|
|
25
|
+
'For CI/CD: set the PROVAR_API_KEY environment variable.\n' +
|
|
26
|
+
`No account? Request access at: ${REQUEST_ACCESS_URL}`;
|
|
27
|
+
const AUTH_WARNING = 'Quality Hub API key is invalid or expired. Running local validation only.\n' +
|
|
28
|
+
`Run sf provar auth login to get a new key, or request access at: ${REQUEST_ACCESS_URL}`;
|
|
29
|
+
const RATE_LIMIT_WARNING = 'Quality Hub API rate limit reached. Running local validation only. Try again shortly.';
|
|
30
|
+
const UNREACHABLE_WARNING = 'Quality Hub API unreachable. Running local validation only (structural rules, no quality scoring).\n' +
|
|
31
|
+
'For CI/CD: set PROVAR_QUALITY_HUB_URL and PROVAR_API_KEY environment variables.';
|
|
32
|
+
const TC_VALIDATE_SUMMARY_FIELDS = [
|
|
33
|
+
'requestId',
|
|
34
|
+
'is_valid',
|
|
35
|
+
'validity_score',
|
|
36
|
+
'quality_score',
|
|
37
|
+
'validation_source',
|
|
38
|
+
'run_id',
|
|
39
|
+
'completeness_score',
|
|
40
|
+
'recommended_next_action',
|
|
41
|
+
];
|
|
42
|
+
/** Storage dir for testcase diff runs (namespaced to avoid cross-tool baseline collisions). */
|
|
43
|
+
function tcStorageDir() {
|
|
44
|
+
return resolveValidationDir('testcase');
|
|
45
|
+
}
|
|
46
|
+
/** Resolve validation result from QualityHub API or fall back to local. */
|
|
47
|
+
async function resolveBaseResult(source, apiKey, requestId) {
|
|
48
|
+
if (!apiKey) {
|
|
49
|
+
return { ...validateTestCase(source), validation_source: 'local', validation_warning: ONBOARDING_MESSAGE };
|
|
50
|
+
}
|
|
51
|
+
const baseUrl = getQualityHubBaseUrl();
|
|
52
|
+
try {
|
|
53
|
+
const apiResult = await qualityHubClient.validateTestCaseViaApi(source, apiKey, baseUrl);
|
|
54
|
+
const localMeta = validateTestCase(source);
|
|
55
|
+
log('info', 'provar_testcase_validate: quality_hub', { requestId });
|
|
56
|
+
return {
|
|
57
|
+
...apiResult,
|
|
58
|
+
issues: apiResult.issues,
|
|
59
|
+
step_count: localMeta.step_count,
|
|
60
|
+
error_count: apiResult.issues.filter((i) => i.severity === 'ERROR').length,
|
|
61
|
+
warning_count: apiResult.issues.filter((i) => i.severity === 'WARNING').length,
|
|
62
|
+
test_case_id: localMeta.test_case_id,
|
|
63
|
+
test_case_name: localMeta.test_case_name,
|
|
64
|
+
validation_source: 'quality_hub',
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
catch (apiErr) {
|
|
68
|
+
let warning;
|
|
69
|
+
if (apiErr instanceof QualityHubAuthError) {
|
|
70
|
+
warning = AUTH_WARNING;
|
|
71
|
+
log('warn', 'provar_testcase_validate: auth error, falling back', { requestId });
|
|
72
|
+
}
|
|
73
|
+
else if (apiErr instanceof QualityHubRateLimitError) {
|
|
74
|
+
warning = RATE_LIMIT_WARNING;
|
|
75
|
+
log('warn', 'provar_testcase_validate: rate limited, falling back', { requestId });
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
warning = UNREACHABLE_WARNING;
|
|
79
|
+
log('warn', 'provar_testcase_validate: api unreachable, falling back', { requestId });
|
|
80
|
+
}
|
|
81
|
+
return { ...validateTestCase(source), validation_source: 'local_fallback', validation_warning: warning };
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
/** Derive a stable context key for run ID generation. */
|
|
85
|
+
function tcRunContext(filePath, xmlContent) {
|
|
86
|
+
if (filePath)
|
|
87
|
+
return filePath;
|
|
88
|
+
return createHash('sha1').update(xmlContent.slice(0, 200)).digest('hex').slice(0, 16);
|
|
89
|
+
}
|
|
16
90
|
export function registerTestCaseValidate(server, config) {
|
|
17
|
-
server.
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
91
|
+
server.registerTool('provar_testcase_validate', {
|
|
92
|
+
title: 'Validate Test Case',
|
|
93
|
+
description: desc('Validate a Provar XML test case for structural correctness and quality. Checks XML declaration, root element, required attributes (guid UUID v4, testItemId integer), <steps> presence, and applies best-practice rules. When a Provar API key is configured (via sf provar auth login or PROVAR_API_KEY env var), calls the Quality Hub API for full 170-rule scoring. Falls back to local validation if no key is set or the API is unavailable. Returns validity_score (schema compliance), quality_score (best practices, 0–100), and validation_source indicating which ruleset was applied. Every response includes run_id — pass it as baseline_run_id in the next call to receive only new/resolved issues. When structural errors are returned, consult the provar://docs/step-reference MCP resource for correct step attribute schemas.', 'Validate a Provar XML test case: structure, UUIDs, steps, quality scoring; run_id for baseline diff.'),
|
|
94
|
+
inputSchema: {
|
|
95
|
+
content: z
|
|
96
|
+
.string()
|
|
97
|
+
.optional()
|
|
98
|
+
.describe(desc('XML content to validate directly (alias: xml)', 'string, inline content')),
|
|
99
|
+
xml: z
|
|
100
|
+
.string()
|
|
101
|
+
.optional()
|
|
102
|
+
.describe(desc('XML content to validate — API-compatible alias for content', 'string, inline content')),
|
|
103
|
+
file_path: z.string().optional().describe(desc('Path to .xml test case file', 'string, path to file')),
|
|
104
|
+
detail: z
|
|
105
|
+
.enum(['summary', 'standard', 'full'])
|
|
106
|
+
.optional()
|
|
107
|
+
.default('standard')
|
|
108
|
+
.describe(desc('Response verbosity. "summary": is_valid, scores, and stop signal only. "standard"/"full": full issues list (default).', 'enum summary|standard|full, optional; default standard')),
|
|
109
|
+
baseline_run_id: z
|
|
110
|
+
.string()
|
|
111
|
+
.optional()
|
|
112
|
+
.describe(desc('run_id from a previous call. When provided, returns only issues that are new or resolved since that run: { added, resolved, unchanged_count, run_id }. If not found, returns error BASELINE_NOT_FOUND.', 'string, optional; prev run_id for diff response')),
|
|
113
|
+
},
|
|
114
|
+
}, async ({ content, xml, file_path, detail, baseline_run_id }) => {
|
|
22
115
|
const requestId = makeRequestId();
|
|
23
|
-
log('info', '
|
|
116
|
+
log('info', 'provar_testcase_validate', { requestId, has_content: !!(content ?? xml), file_path });
|
|
24
117
|
try {
|
|
25
118
|
// Resolve xml alias: the batch validation API uses "xml", MCP originally used "content"
|
|
26
119
|
let source = content ?? xml;
|
|
@@ -37,30 +130,139 @@ export function registerTestCaseValidate(server, config) {
|
|
|
37
130
|
const err = makeError('MISSING_INPUT', 'Provide either content or file_path.', requestId);
|
|
38
131
|
return { isError: true, content: [{ type: 'text', text: JSON.stringify(err) }] };
|
|
39
132
|
}
|
|
40
|
-
const
|
|
41
|
-
const
|
|
133
|
+
const apiKey = resolveApiKey();
|
|
134
|
+
const baseResult = await resolveBaseResult(source, apiKey, requestId);
|
|
135
|
+
const storageDir = tcStorageDir();
|
|
136
|
+
const context = tcRunContext(file_path, source);
|
|
137
|
+
const contextHash = computeContextHash('tc', context);
|
|
138
|
+
const runId = generateRunId(context);
|
|
139
|
+
const bpViolations = (baseResult.best_practices_violations ?? []);
|
|
140
|
+
const currentViolations = [
|
|
141
|
+
...baseResult.issues,
|
|
142
|
+
...bpViolations,
|
|
143
|
+
];
|
|
144
|
+
// Load baseline BEFORE saving to prevent eviction of the requested baseline
|
|
145
|
+
const baseline = baseline_run_id !== undefined && baseline_run_id !== ''
|
|
146
|
+
? loadBaselineViolations(storageDir, baseline_run_id, contextHash)
|
|
147
|
+
: null;
|
|
148
|
+
const hasBaseline = hasAnyRun(storageDir);
|
|
149
|
+
try {
|
|
150
|
+
saveRun(storageDir, runId, currentViolations, contextHash);
|
|
151
|
+
}
|
|
152
|
+
catch (saveErr) {
|
|
153
|
+
log('warn', 'provar_testcase_validate: could not save run for diff', {
|
|
154
|
+
requestId,
|
|
155
|
+
error: saveErr.message,
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
// Diff mode
|
|
159
|
+
if (baseline_run_id !== undefined && baseline_run_id !== '') {
|
|
160
|
+
if (!baseline) {
|
|
161
|
+
const errResult = makeError('BASELINE_NOT_FOUND', 'Baseline run not found. Run validation without baseline_run_id first to establish a baseline.', requestId, false, { suggestion: 'Run provar_testcase_validate without baseline_run_id first to establish a baseline.' });
|
|
162
|
+
return { isError: true, content: [{ type: 'text', text: JSON.stringify(errResult) }] };
|
|
163
|
+
}
|
|
164
|
+
const diff = computeDiff(baseline, currentViolations);
|
|
165
|
+
const completeness_score = calcCompletenessScore(baseResult.is_valid ? 1 : 0, 1);
|
|
166
|
+
const recommended_next_action = calcNextAction(completeness_score, true, currentViolations.length);
|
|
167
|
+
const diffResponse = {
|
|
168
|
+
requestId,
|
|
169
|
+
run_id: runId,
|
|
170
|
+
...diff,
|
|
171
|
+
completeness_score,
|
|
172
|
+
recommended_next_action,
|
|
173
|
+
};
|
|
174
|
+
return {
|
|
175
|
+
content: [{ type: 'text', text: JSON.stringify(diffResponse) }],
|
|
176
|
+
structuredContent: diffResponse,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
const completeness_score = calcCompletenessScore(baseResult.is_valid ? 1 : 0, 1);
|
|
180
|
+
const recommended_next_action = calcNextAction(completeness_score, hasBaseline, currentViolations.length);
|
|
181
|
+
const result = {
|
|
182
|
+
requestId,
|
|
183
|
+
run_id: runId,
|
|
184
|
+
completeness_score,
|
|
185
|
+
recommended_next_action,
|
|
186
|
+
...baseResult,
|
|
187
|
+
};
|
|
188
|
+
const detailLevel = (detail ?? 'standard');
|
|
189
|
+
const finalResult = applyDetailLevel(result, detailLevel, TC_VALIDATE_SUMMARY_FIELDS);
|
|
42
190
|
return {
|
|
43
|
-
content: [{ type: 'text', text: JSON.stringify(
|
|
44
|
-
structuredContent:
|
|
191
|
+
content: [{ type: 'text', text: JSON.stringify(finalResult) }],
|
|
192
|
+
structuredContent: finalResult,
|
|
45
193
|
};
|
|
46
194
|
}
|
|
47
195
|
catch (err) {
|
|
48
196
|
const error = err;
|
|
49
197
|
const errResult = makeError(error instanceof PathPolicyError ? error.code : 'VALIDATE_ERROR', error.message, requestId, false);
|
|
50
|
-
log('error', '
|
|
198
|
+
log('error', 'provar_testcase_validate failed', { requestId, error: error.message });
|
|
51
199
|
return { isError: true, content: [{ type: 'text', text: JSON.stringify(errResult) }] };
|
|
52
200
|
}
|
|
53
201
|
});
|
|
54
202
|
}
|
|
55
203
|
// ── Validator (ported from quality-hub-agents/lambda/src/validator/handler.py) ──
|
|
56
204
|
const UUID_V4_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
|
|
205
|
+
/**
|
|
206
|
+
* Reads a test case file from disk, validates it, and returns the result.
|
|
207
|
+
* Used by Wave 2 (testCaseGenerate) and Wave 3 (testCaseStepEdit) to validate
|
|
208
|
+
* after mutations without spawning a separate MCP tool call.
|
|
209
|
+
* Throws on path-policy violation or missing file.
|
|
210
|
+
*/
|
|
211
|
+
export function validateTestCaseXml(filePath, config) {
|
|
212
|
+
assertPathAllowed(filePath, config.allowedPaths);
|
|
213
|
+
const resolved = path.resolve(filePath);
|
|
214
|
+
if (!fs.existsSync(resolved)) {
|
|
215
|
+
throw Object.assign(new Error(`File not found: ${resolved}`), { code: 'TESTCASE_FILE_NOT_FOUND' });
|
|
216
|
+
}
|
|
217
|
+
return validateTestCase(fs.readFileSync(resolved, 'utf-8'));
|
|
218
|
+
}
|
|
219
|
+
/** TC_010/TC_011: validate testCase id and guid attributes. */
|
|
220
|
+
function checkTestCaseIdAndGuid(tcId, tcGuid, issues) {
|
|
221
|
+
if (!tcId) {
|
|
222
|
+
issues.push({
|
|
223
|
+
rule_id: 'TC_010',
|
|
224
|
+
severity: 'ERROR',
|
|
225
|
+
message: 'testCase missing required id attribute.',
|
|
226
|
+
applies_to: 'testCase',
|
|
227
|
+
suggestion: 'Add id="1" to testCase element (Provar requires the integer literal "1").',
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
else if (tcId !== '1') {
|
|
231
|
+
issues.push({
|
|
232
|
+
rule_id: 'TC_010',
|
|
233
|
+
severity: 'ERROR',
|
|
234
|
+
message: `testCase id="${tcId}" is invalid — Provar requires id="1" (integer literal).`,
|
|
235
|
+
applies_to: 'testCase',
|
|
236
|
+
suggestion: 'Set id="1" on the testCase element. The unique identifier is the guid attribute, not id.',
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
if (!tcGuid) {
|
|
240
|
+
issues.push({
|
|
241
|
+
rule_id: 'TC_011',
|
|
242
|
+
severity: 'ERROR',
|
|
243
|
+
message: 'testCase missing required guid attribute.',
|
|
244
|
+
applies_to: 'testCase',
|
|
245
|
+
suggestion: 'Add guid attribute (UUID v4) to testCase element.',
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
else if (!UUID_V4_RE.test(tcGuid)) {
|
|
249
|
+
issues.push({
|
|
250
|
+
rule_id: 'TC_012',
|
|
251
|
+
severity: 'ERROR',
|
|
252
|
+
message: `testCase guid "${tcGuid}" is not a valid UUID v4.`,
|
|
253
|
+
applies_to: 'testCase',
|
|
254
|
+
suggestion: 'Replace with a valid UUID v4 — e.g. crypto.randomUUID(). The 4th segment must begin with 8, 9, a, or b.',
|
|
255
|
+
});
|
|
256
|
+
}
|
|
257
|
+
}
|
|
57
258
|
/** Pure function — exported for unit testing */
|
|
58
259
|
export function validateTestCase(xmlContent, testName) {
|
|
59
260
|
const issues = [];
|
|
60
261
|
// TC_001: XML declaration
|
|
61
262
|
if (!xmlContent.trimStart().startsWith('<?xml')) {
|
|
62
263
|
issues.push({
|
|
63
|
-
rule_id: 'TC_001',
|
|
264
|
+
rule_id: 'TC_001',
|
|
265
|
+
severity: 'ERROR',
|
|
64
266
|
message: 'Missing XML declaration. File must start with <?xml version="1.0" encoding="UTF-8"?>.',
|
|
65
267
|
applies_to: 'document',
|
|
66
268
|
suggestion: 'Add XML declaration as the first line.',
|
|
@@ -79,7 +281,8 @@ export function validateTestCase(xmlContent, testName) {
|
|
|
79
281
|
catch (e) {
|
|
80
282
|
const parseError = e;
|
|
81
283
|
issues.push({
|
|
82
|
-
rule_id: 'TC_002',
|
|
284
|
+
rule_id: 'TC_002',
|
|
285
|
+
severity: 'ERROR',
|
|
83
286
|
message: `XML parse error: ${parseError.message}`,
|
|
84
287
|
applies_to: 'document',
|
|
85
288
|
suggestion: 'Fix XML syntax errors.',
|
|
@@ -89,7 +292,8 @@ export function validateTestCase(xmlContent, testName) {
|
|
|
89
292
|
// TC_003: Root element
|
|
90
293
|
if (!('testCase' in parsed)) {
|
|
91
294
|
issues.push({
|
|
92
|
-
rule_id: 'TC_003',
|
|
295
|
+
rule_id: 'TC_003',
|
|
296
|
+
severity: 'ERROR',
|
|
93
297
|
message: 'Root element must be <testCase>.',
|
|
94
298
|
applies_to: 'document',
|
|
95
299
|
suggestion: 'Ensure root element is <testCase>.',
|
|
@@ -103,30 +307,7 @@ export function validateTestCase(xmlContent, testName) {
|
|
|
103
307
|
const tcId = tc['@_id'] ?? null;
|
|
104
308
|
const tcName = tc['@_name'] ?? null;
|
|
105
309
|
const tcGuid = tc['@_guid'];
|
|
106
|
-
|
|
107
|
-
issues.push({
|
|
108
|
-
rule_id: 'TC_010', severity: 'ERROR',
|
|
109
|
-
message: 'testCase missing required id attribute.',
|
|
110
|
-
applies_to: 'testCase',
|
|
111
|
-
suggestion: 'Add id attribute to testCase element.',
|
|
112
|
-
});
|
|
113
|
-
}
|
|
114
|
-
if (!tcGuid) {
|
|
115
|
-
issues.push({
|
|
116
|
-
rule_id: 'TC_011', severity: 'ERROR',
|
|
117
|
-
message: 'testCase missing required guid attribute.',
|
|
118
|
-
applies_to: 'testCase',
|
|
119
|
-
suggestion: 'Add guid attribute (UUID v4) to testCase element.',
|
|
120
|
-
});
|
|
121
|
-
}
|
|
122
|
-
else if (!UUID_V4_RE.test(tcGuid)) {
|
|
123
|
-
issues.push({
|
|
124
|
-
rule_id: 'TC_012', severity: 'ERROR',
|
|
125
|
-
message: `testCase guid "${tcGuid}" is not a valid UUID v4.`,
|
|
126
|
-
applies_to: 'testCase',
|
|
127
|
-
suggestion: 'Generate a proper UUID v4 for the guid attribute.',
|
|
128
|
-
});
|
|
129
|
-
}
|
|
310
|
+
checkTestCaseIdAndGuid(tcId, tcGuid, issues);
|
|
130
311
|
// TC_013 (registryId) is intentionally not checked here — registryId is a
|
|
131
312
|
// Salesforce Quality Hub record ID assigned when a test case is registered in
|
|
132
313
|
// the QH org. Local project files will never have this attribute, so checking
|
|
@@ -134,13 +315,24 @@ export function validateTestCase(xmlContent, testName) {
|
|
|
134
315
|
// TC_020: <steps> element
|
|
135
316
|
if (!('steps' in tc)) {
|
|
136
317
|
issues.push({
|
|
137
|
-
rule_id: 'TC_020',
|
|
318
|
+
rule_id: 'TC_020',
|
|
319
|
+
severity: 'ERROR',
|
|
138
320
|
message: 'testCase missing <steps> element.',
|
|
139
321
|
applies_to: 'testCase',
|
|
140
322
|
suggestion: 'Wrap all step elements in a <steps> element.',
|
|
141
323
|
});
|
|
142
324
|
return finalize(issues, tcId, tcName, 0, xmlContent, testName);
|
|
143
325
|
}
|
|
326
|
+
// DATA-001: <dataTable> binding is silently ignored in standalone CLI execution
|
|
327
|
+
if ('dataTable' in tc && tc['dataTable'] != null) {
|
|
328
|
+
issues.push({
|
|
329
|
+
rule_id: 'DATA-001',
|
|
330
|
+
severity: 'WARNING',
|
|
331
|
+
message: 'testCase declares a <dataTable> but CLI standalone execution does not bind CSV column variables — steps using <value class="variable"> references will resolve to null.',
|
|
332
|
+
applies_to: 'testCase',
|
|
333
|
+
suggestion: 'Use SetValues (Test scope) steps to bind data for standalone CLI execution, or add this test case to a test plan.',
|
|
334
|
+
});
|
|
335
|
+
}
|
|
144
336
|
// Same self-closing guard for <steps/> → fast-xml-parser yields ''
|
|
145
337
|
const rawSteps = tc['steps'];
|
|
146
338
|
const steps = rawSteps !== null && typeof rawSteps === 'object' ? rawSteps : {};
|
|
@@ -151,8 +343,53 @@ export function validateTestCase(xmlContent, testName) {
|
|
|
151
343
|
for (const call of apiCalls) {
|
|
152
344
|
validateApiCall(call, issues);
|
|
153
345
|
}
|
|
346
|
+
// VAR-REF-001 / VAR-REF-002: detect {VarName} tokens inside valueClass="string" elements.
|
|
347
|
+
// Provar does not interpolate {…} tokens in plain string values at runtime — they must use
|
|
348
|
+
// class="variable" (pure reference) or class="compound" (embedded in surrounding text).
|
|
349
|
+
const stringValueRe = /<value[^>]+valueClass="string"[^>]*>([^<]+)<\/value>/g;
|
|
350
|
+
let stringMatch;
|
|
351
|
+
while ((stringMatch = stringValueRe.exec(xmlContent)) !== null) {
|
|
352
|
+
const rawContent = stringMatch[1];
|
|
353
|
+
if (!/\{[\w.]+\}/.test(rawContent))
|
|
354
|
+
continue;
|
|
355
|
+
const isPure = /^\{[\w.]+\}$/.test(rawContent.trim());
|
|
356
|
+
const varNames = [...rawContent.matchAll(/\{([\w.]+)\}/g)].map((m) => m[1]);
|
|
357
|
+
if (isPure) {
|
|
358
|
+
const varName = varNames[0];
|
|
359
|
+
issues.push({
|
|
360
|
+
rule_id: 'VAR-REF-001',
|
|
361
|
+
severity: 'WARNING',
|
|
362
|
+
message: `Argument value "{${varName}}" looks like a variable reference but is stored as a plain string — Provar will not resolve it at runtime.`,
|
|
363
|
+
applies_to: 'argument',
|
|
364
|
+
suggestion: `Replace with <value class="variable"><path element="${varName
|
|
365
|
+
.split('.')
|
|
366
|
+
.join('"/><path element="')}"/></value>. In provar_testcase_generate, use the {VarName} syntax in the attributes object — the generator converts it automatically.`,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
else {
|
|
370
|
+
const preview = rawContent.length > 60 ? rawContent.slice(0, 57) + '…' : rawContent;
|
|
371
|
+
issues.push({
|
|
372
|
+
rule_id: 'VAR-REF-002',
|
|
373
|
+
severity: 'WARNING',
|
|
374
|
+
message: `Argument value "${preview}" contains {${varNames.join('}, {')}} embedded in a plain string — Provar does not interpolate {…} tokens in string values at runtime.`,
|
|
375
|
+
applies_to: 'argument',
|
|
376
|
+
suggestion: 'Use class="compound" with <parts> to split literal text and variable references at each {VarName} boundary. ' +
|
|
377
|
+
'In provar_testcase_generate, pass the value with {VarName} placeholders in the attributes object — the generator emits compound XML automatically.',
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
}
|
|
154
381
|
return finalize(issues, tcId, tcName, apiCalls.length, xmlContent, testName);
|
|
155
382
|
}
|
|
383
|
+
/** Normalise fast-xml-parser's single-or-array representation of <argument> children. */
|
|
384
|
+
function getArgList(call) {
|
|
385
|
+
const rawArgs = call['arguments'];
|
|
386
|
+
if (!rawArgs)
|
|
387
|
+
return [];
|
|
388
|
+
const argRaw = rawArgs['argument'];
|
|
389
|
+
if (!argRaw)
|
|
390
|
+
return [];
|
|
391
|
+
return (Array.isArray(argRaw) ? argRaw : [argRaw]);
|
|
392
|
+
}
|
|
156
393
|
function validateApiCall(call, issues) {
|
|
157
394
|
const callGuid = call['@_guid'];
|
|
158
395
|
const apiId = call['@_apiId'];
|
|
@@ -161,7 +398,8 @@ function validateApiCall(call, issues) {
|
|
|
161
398
|
const label = apiId ? ` "${apiId}"` : '';
|
|
162
399
|
if (!callGuid) {
|
|
163
400
|
issues.push({
|
|
164
|
-
rule_id: 'TC_030',
|
|
401
|
+
rule_id: 'TC_030',
|
|
402
|
+
severity: 'ERROR',
|
|
165
403
|
message: `apiCall${label} missing guid attribute.`,
|
|
166
404
|
applies_to: 'apiCall',
|
|
167
405
|
suggestion: 'Add a UUID v4 guid to each apiCall.',
|
|
@@ -169,15 +407,17 @@ function validateApiCall(call, issues) {
|
|
|
169
407
|
}
|
|
170
408
|
else if (!UUID_V4_RE.test(callGuid)) {
|
|
171
409
|
issues.push({
|
|
172
|
-
rule_id: 'TC_031',
|
|
410
|
+
rule_id: 'TC_031',
|
|
411
|
+
severity: 'ERROR',
|
|
173
412
|
message: `apiCall${label} guid "${callGuid}" is not a valid UUID v4.`,
|
|
174
413
|
applies_to: 'apiCall',
|
|
175
|
-
suggestion: '
|
|
414
|
+
suggestion: 'Replace with a valid UUID v4 — e.g. crypto.randomUUID(). The 4th segment must begin with 8, 9, a, or b.',
|
|
176
415
|
});
|
|
177
416
|
}
|
|
178
417
|
if (!apiId) {
|
|
179
418
|
issues.push({
|
|
180
|
-
rule_id: 'TC_032',
|
|
419
|
+
rule_id: 'TC_032',
|
|
420
|
+
severity: 'ERROR',
|
|
181
421
|
message: 'apiCall missing apiId attribute.',
|
|
182
422
|
applies_to: 'apiCall',
|
|
183
423
|
suggestion: 'Add apiId attribute (e.g., UiConnect, ApexSoqlQuery).',
|
|
@@ -185,7 +425,8 @@ function validateApiCall(call, issues) {
|
|
|
185
425
|
}
|
|
186
426
|
if (!name) {
|
|
187
427
|
issues.push({
|
|
188
|
-
rule_id: 'TC_033',
|
|
428
|
+
rule_id: 'TC_033',
|
|
429
|
+
severity: 'WARNING',
|
|
189
430
|
message: `apiCall${label} missing name attribute.`,
|
|
190
431
|
applies_to: 'apiCall',
|
|
191
432
|
suggestion: 'Add a descriptive name attribute.',
|
|
@@ -193,7 +434,8 @@ function validateApiCall(call, issues) {
|
|
|
193
434
|
}
|
|
194
435
|
if (!testItemId) {
|
|
195
436
|
issues.push({
|
|
196
|
-
rule_id: 'TC_034',
|
|
437
|
+
rule_id: 'TC_034',
|
|
438
|
+
severity: 'ERROR',
|
|
197
439
|
message: `apiCall${label} missing testItemId attribute.`,
|
|
198
440
|
applies_to: 'apiCall',
|
|
199
441
|
suggestion: 'Add sequential testItemId (1, 2, 3...).',
|
|
@@ -201,12 +443,102 @@ function validateApiCall(call, issues) {
|
|
|
201
443
|
}
|
|
202
444
|
else if (!/^\d+$/.test(testItemId)) {
|
|
203
445
|
issues.push({
|
|
204
|
-
rule_id: 'TC_035',
|
|
446
|
+
rule_id: 'TC_035',
|
|
447
|
+
severity: 'ERROR',
|
|
205
448
|
message: `apiCall${label} testItemId "${testItemId}" must be a whole number.`,
|
|
206
449
|
applies_to: 'apiCall',
|
|
207
450
|
suggestion: 'Use sequential integers for testItemId.',
|
|
208
451
|
});
|
|
209
452
|
}
|
|
453
|
+
if (apiId)
|
|
454
|
+
validateApiCallArgs(call, apiId, name, issues);
|
|
455
|
+
}
|
|
456
|
+
function checkUiTarget(call, apiId, stepName, issues) {
|
|
457
|
+
const targetArg = getArgList(call).find((a) => a['@_id'] === 'target');
|
|
458
|
+
if (!targetArg)
|
|
459
|
+
return;
|
|
460
|
+
const valueNode = targetArg['value'];
|
|
461
|
+
if (valueNode == null)
|
|
462
|
+
return;
|
|
463
|
+
const valClass = valueNode['@_class'];
|
|
464
|
+
if (valClass !== 'uiTarget') {
|
|
465
|
+
const apiLabel = apiId.includes('UiWithRow') ? 'UiWithRow' : 'UiWithScreen';
|
|
466
|
+
issues.push({
|
|
467
|
+
rule_id: 'UI-TARGET-001',
|
|
468
|
+
severity: 'ERROR',
|
|
469
|
+
message: `${apiLabel} step "${stepName}" target argument uses class="${valClass ?? '(missing)'}" — must be class="uiTarget".`,
|
|
470
|
+
applies_to: 'apiCall',
|
|
471
|
+
suggestion: 'Emit the target as: <value class="uiTarget" uri="sf:ui:target?..."/> or uri="ui:pageobject:target?pageId=...". ' +
|
|
472
|
+
'In provar_testcase_generate the "target" attribute is converted automatically.',
|
|
473
|
+
});
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
function validateApiCallArgs(call, apiId, name, issues) {
|
|
477
|
+
const stepName = name ?? '(unnamed)';
|
|
478
|
+
// UI-TARGET-001 (mirrors quality-hub-agents UI-SCREEN-TARGET-001):
|
|
479
|
+
// UiWithScreen / UiWithRow target argument must use class="uiTarget", not a plain string.
|
|
480
|
+
// A plain string causes: "Can not set IUiTargetValue field ... to java.lang.String"
|
|
481
|
+
if (apiId.includes('UiWithScreen') || apiId.includes('UiWithRow')) {
|
|
482
|
+
checkUiTarget(call, apiId, stepName, issues);
|
|
483
|
+
}
|
|
484
|
+
// UI-LOCATOR-001 (local rule, no direct backend equivalent):
|
|
485
|
+
// UiDoAction / UiAssert locator argument must use class="uiLocator".
|
|
486
|
+
if (apiId.includes('UiDoAction') || apiId.includes('UiAssert')) {
|
|
487
|
+
const locatorArg = getArgList(call).find((a) => a['@_id'] === 'locator');
|
|
488
|
+
if (locatorArg) {
|
|
489
|
+
const locatorNode = locatorArg['value'];
|
|
490
|
+
if (locatorNode != null) {
|
|
491
|
+
const valClass = locatorNode['@_class'];
|
|
492
|
+
if (valClass !== 'uiLocator') {
|
|
493
|
+
issues.push({
|
|
494
|
+
rule_id: 'UI-LOCATOR-001',
|
|
495
|
+
severity: 'ERROR',
|
|
496
|
+
message: `"${stepName}" locator argument uses class="${valClass ?? '(missing)'}" — must be class="uiLocator".`,
|
|
497
|
+
applies_to: 'apiCall',
|
|
498
|
+
suggestion: 'Emit the locator as: <value class="uiLocator" uri="sf:ui:locator:..."/>. ' +
|
|
499
|
+
'In provar_testcase_generate the "locator" attribute is converted automatically.',
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
// SETVALUES-STRUCTURE-001 (mirrors quality-hub-agents SETVALUES-STRUCTURE-001):
|
|
506
|
+
// SetValues values argument must use class="valueList" with <namedValues> children.
|
|
507
|
+
// A plain string value causes an immediate ClassCastException at runtime.
|
|
508
|
+
if (apiId.includes('SetValues') && !apiId.includes('AssertValues')) {
|
|
509
|
+
const valuesArg = getArgList(call).find((a) => a['@_id'] === 'values');
|
|
510
|
+
if (valuesArg) {
|
|
511
|
+
const valuesNode = valuesArg['value'];
|
|
512
|
+
if (valuesNode != null) {
|
|
513
|
+
const valClass = valuesNode['@_class'];
|
|
514
|
+
if (valClass !== 'valueList') {
|
|
515
|
+
issues.push({
|
|
516
|
+
rule_id: 'SETVALUES-STRUCTURE-001',
|
|
517
|
+
severity: 'ERROR',
|
|
518
|
+
message: `SetValues step "${stepName}" values argument uses class="${valClass ?? '(missing)'}" — must use class="valueList" with <namedValues> children.`,
|
|
519
|
+
applies_to: 'apiCall',
|
|
520
|
+
suggestion: 'Wrap variable assignments in: <value class="valueList" mutable="Mutable"><namedValues>' +
|
|
521
|
+
'<namedValue name="varName"><value class="value" valueClass="string">value</value></namedValue>' +
|
|
522
|
+
'</namedValues></value>. In provar_testcase_generate pass each variable as a flat key/value pair ' +
|
|
523
|
+
'in attributes — the generator builds the valueList structure automatically.',
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
}
|
|
527
|
+
}
|
|
528
|
+
}
|
|
529
|
+
// ASSERT-001: AssertValues using UI namedValues format instead of variable format
|
|
530
|
+
if (apiId.includes('AssertValues')) {
|
|
531
|
+
const hasValuesArg = getArgList(call).some((a) => a['@_id'] === 'values');
|
|
532
|
+
if (hasValuesArg) {
|
|
533
|
+
issues.push({
|
|
534
|
+
rule_id: 'ASSERT-001',
|
|
535
|
+
severity: 'WARNING',
|
|
536
|
+
message: `AssertValues step "${stepName}" uses namedValues format (argument id="values") — designed for UI element attribute assertions. For Apex/SOQL result or variable comparisons this silently passes as null=null.`,
|
|
537
|
+
applies_to: 'apiCall',
|
|
538
|
+
suggestion: 'Use separate expectedValue, actualValue, and comparisonType arguments for variable or Apex result comparisons.',
|
|
539
|
+
});
|
|
540
|
+
}
|
|
541
|
+
}
|
|
210
542
|
}
|
|
211
543
|
function finalize(issues, testCaseId, testCaseName, stepCount, xmlContent, testName) {
|
|
212
544
|
const errorCount = issues.filter((i) => i.severity === 'ERROR').length;
|
|
@@ -227,6 +559,9 @@ function finalize(issues, testCaseId, testCaseName, stepCount, xmlContent, testN
|
|
|
227
559
|
issues,
|
|
228
560
|
best_practices_violations: bp.violations,
|
|
229
561
|
best_practices_rules_evaluated: bp.rules_evaluated,
|
|
562
|
+
// validation_source is set by the caller (MCP tool handler or direct callers).
|
|
563
|
+
// Default to 'local' here so the pure validateTestCase() function is self-contained.
|
|
564
|
+
validation_source: 'local',
|
|
230
565
|
};
|
|
231
566
|
}
|
|
232
567
|
//# sourceMappingURL=testCaseValidate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testCaseValidate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseValidate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"testCaseValidate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseValidate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
2
|
import type { ServerConfig } from '../server.js';
|
|
3
|
+
export declare function registerTestPlanCreate(server: McpServer, config: ServerConfig): void;
|
|
3
4
|
export declare function registerTestPlanAddInstance(server: McpServer, config: ServerConfig): void;
|
|
4
5
|
export declare function registerTestPlanCreateSuite(server: McpServer, config: ServerConfig): void;
|
|
5
6
|
export declare function registerTestPlanRemoveInstance(server: McpServer, config: ServerConfig): void;
|