@provartesting/provardx-cli 1.5.0-beta.5 → 1.5.0-beta.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.
- package/lib/commands/provar/auth/login.js +3 -1
- package/lib/commands/provar/auth/login.js.map +1 -1
- package/lib/mcp/server.js +2 -0
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/tools/automationTools.d.ts +33 -2
- package/lib/mcp/tools/automationTools.js +232 -38
- package/lib/mcp/tools/automationTools.js.map +1 -1
- package/lib/mcp/tools/qualityHubApiTools.d.ts +3 -0
- package/lib/mcp/tools/qualityHubApiTools.js +129 -0
- package/lib/mcp/tools/qualityHubApiTools.js.map +1 -0
- package/lib/mcp/tools/rcaTools.js +94 -19
- package/lib/mcp/tools/rcaTools.js.map +1 -1
- package/lib/mcp/tools/testCaseValidate.js +34 -2
- package/lib/mcp/tools/testCaseValidate.js.map +1 -1
- package/lib/services/auth/credentials.d.ts +3 -0
- package/lib/services/auth/credentials.js +6 -2
- package/lib/services/auth/credentials.js.map +1 -1
- package/lib/services/auth/loginFlow.d.ts +3 -6
- package/lib/services/auth/loginFlow.js +26 -13
- package/lib/services/auth/loginFlow.js.map +1 -1
- package/lib/services/qualityHub/client.d.ts +30 -0
- package/lib/services/qualityHub/client.js +32 -2
- package/lib/services/qualityHub/client.js.map +1 -1
- package/messages/sf.provar.auth.clear.md +3 -0
- package/messages/sf.provar.auth.status.md +3 -0
- package/oclif.manifest.json +64 -64
- package/package.json +1 -1
|
@@ -60,14 +60,11 @@ function isPortFree(port) {
|
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
// ── Browser open ──────────────────────────────────────────────────────────────
|
|
63
|
-
/**
|
|
64
|
-
* Open a URL in the system browser. The URL is passed as an argument — not
|
|
65
|
-
* interpolated into a shell string — to avoid command injection.
|
|
66
|
-
*/
|
|
67
63
|
/**
|
|
68
64
|
* Return the platform-specific command and argument list for opening a URL
|
|
69
|
-
* in the system browser.
|
|
70
|
-
*
|
|
65
|
+
* in the system browser. The URL is passed as an argument — never interpolated
|
|
66
|
+
* into a shell string — to avoid command injection. Exported so tests can
|
|
67
|
+
* assert the correct command is chosen without actually spawning a process.
|
|
71
68
|
*/
|
|
72
69
|
export function getBrowserCommand(url, platform = process.platform) {
|
|
73
70
|
switch (platform) {
|
|
@@ -88,7 +85,9 @@ export function openBrowser(url) {
|
|
|
88
85
|
const child = spawn(cmd, args, { detached: true, stdio: 'ignore' });
|
|
89
86
|
// Suppress unhandled-error crashes if the browser executable is not found.
|
|
90
87
|
// The login URL is already printed to the terminal so the user can open it manually.
|
|
91
|
-
child.on('error', () => {
|
|
88
|
+
child.on('error', () => {
|
|
89
|
+
/* intentional no-op */
|
|
90
|
+
});
|
|
92
91
|
child.unref();
|
|
93
92
|
}
|
|
94
93
|
// ── Localhost callback server ─────────────────────────────────────────────────
|
|
@@ -98,6 +97,20 @@ export function openBrowser(url) {
|
|
|
98
97
|
*/
|
|
99
98
|
export function listenForCallback(port, expectedState) {
|
|
100
99
|
return new Promise((resolve, reject) => {
|
|
100
|
+
// Track open sockets so we can forcibly destroy them on shutdown.
|
|
101
|
+
// This is a Node 18.0/18.1 fallback for server.closeAllConnections(), which
|
|
102
|
+
// was added in Node 18.2. Without it a browser that ignores Connection:close
|
|
103
|
+
// could keep the event loop alive after server.close() returns.
|
|
104
|
+
const openSockets = new Set();
|
|
105
|
+
const closeServer = (srv) => {
|
|
106
|
+
srv.close();
|
|
107
|
+
if (typeof srv.closeAllConnections === 'function') {
|
|
108
|
+
srv.closeAllConnections();
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
openSockets.forEach((s) => s.destroy());
|
|
112
|
+
}
|
|
113
|
+
};
|
|
101
114
|
const server = http.createServer((req, res) => {
|
|
102
115
|
const parsed = new URL(req.url ?? '/', `http://localhost:${port}`);
|
|
103
116
|
const code = parsed.searchParams.get('code');
|
|
@@ -110,8 +123,7 @@ export function listenForCallback(port, expectedState) {
|
|
|
110
123
|
'<h2 style="color:#c23934">Authentication failed</h2>' +
|
|
111
124
|
'<p>Invalid state parameter — possible CSRF attack. Please try again.</p>' +
|
|
112
125
|
'</body></html>');
|
|
113
|
-
server
|
|
114
|
-
server.closeAllConnections?.();
|
|
126
|
+
closeServer(server);
|
|
115
127
|
reject(new Error('OAuth callback state mismatch — possible CSRF. Try again.'));
|
|
116
128
|
return;
|
|
117
129
|
}
|
|
@@ -123,10 +135,7 @@ export function listenForCallback(port, expectedState) {
|
|
|
123
135
|
'<h2 style="color:#0070d2">Authentication complete</h2>' +
|
|
124
136
|
'<p>You can close this tab and return to the terminal.</p>' +
|
|
125
137
|
'</body></html>');
|
|
126
|
-
server
|
|
127
|
-
// Destroy any sockets that are still open (e.g. a browser that ignores
|
|
128
|
-
// the Connection:close header). Requires Node 18.2+.
|
|
129
|
-
server.closeAllConnections?.();
|
|
138
|
+
closeServer(server);
|
|
130
139
|
if (code) {
|
|
131
140
|
resolve(code);
|
|
132
141
|
}
|
|
@@ -134,6 +143,10 @@ export function listenForCallback(port, expectedState) {
|
|
|
134
143
|
reject(new Error(description ?? error ?? 'No authorisation code received from Cognito'));
|
|
135
144
|
}
|
|
136
145
|
});
|
|
146
|
+
server.on('connection', (socket) => {
|
|
147
|
+
openSockets.add(socket);
|
|
148
|
+
socket.once('close', () => openSockets.delete(socket));
|
|
149
|
+
});
|
|
137
150
|
server.listen(port, '127.0.0.1');
|
|
138
151
|
server.on('error', (err) => reject(err));
|
|
139
152
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loginFlow.js","sourceRoot":"","sources":["../../../src/services/auth/loginFlow.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8BAA8B;AAC9B,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,KAAK,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"loginFlow.js","sourceRoot":"","sources":["../../../src/services/auth/loginFlow.ts"],"names":[],"mappings":"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"}
|
|
@@ -117,6 +117,35 @@ export declare function revokeKey(apiKey: string, baseUrl: string): Promise<void
|
|
|
117
117
|
* On 401: key is invalid/expired — caller should direct user to sf provar auth login.
|
|
118
118
|
*/
|
|
119
119
|
export declare function rotateKey(apiKey: string, baseUrl: string): Promise<AuthExchangeResponse>;
|
|
120
|
+
export interface CorpusExample {
|
|
121
|
+
id: string;
|
|
122
|
+
name: string;
|
|
123
|
+
xml: string;
|
|
124
|
+
similarity_score: number;
|
|
125
|
+
salesforce_object: string;
|
|
126
|
+
quality_tier: string;
|
|
127
|
+
full_content?: boolean;
|
|
128
|
+
}
|
|
129
|
+
export interface CorpusRetrievalResponse {
|
|
130
|
+
retrieval_id: string;
|
|
131
|
+
examples: CorpusExample[];
|
|
132
|
+
count: number;
|
|
133
|
+
query_truncated: boolean;
|
|
134
|
+
}
|
|
135
|
+
export interface CorpusRetrievalOptions {
|
|
136
|
+
n?: number;
|
|
137
|
+
app_filter?: string;
|
|
138
|
+
prefer_high_quality?: boolean;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* POST /corpus/retrieve — fetch N similar Provar test examples from the Bedrock KB corpus.
|
|
142
|
+
* Used by provar.qualityhub.examples.retrieve as the few-shot grounding step before
|
|
143
|
+
* the client LLM synthesises a new test case.
|
|
144
|
+
*
|
|
145
|
+
* Throws QualityHubAuthError on 401, QualityHubRateLimitError on 429.
|
|
146
|
+
* All other non-2xx responses throw a generic Error with status + body.
|
|
147
|
+
*/
|
|
148
|
+
export declare function retrieveCorpusExamples(query: string, apiKey: string, baseUrl: string, options?: CorpusRetrievalOptions): Promise<CorpusRetrievalResponse>;
|
|
120
149
|
/**
|
|
121
150
|
* MCP tools and auth commands call qualityHubClient.X() so tests can replace
|
|
122
151
|
* properties with stubs without ESM re-export issues.
|
|
@@ -127,5 +156,6 @@ export declare const qualityHubClient: {
|
|
|
127
156
|
fetchKeyStatus: typeof fetchKeyStatus;
|
|
128
157
|
revokeKey: typeof revokeKey;
|
|
129
158
|
rotateKey: typeof rotateKey;
|
|
159
|
+
retrieveCorpusExamples: typeof retrieveCorpusExamples;
|
|
130
160
|
};
|
|
131
161
|
export {};
|
|
@@ -24,14 +24,14 @@ export function normaliseApiResponse(raw) {
|
|
|
24
24
|
rule_id: v.rule_id,
|
|
25
25
|
severity: 'ERROR',
|
|
26
26
|
message: v.message,
|
|
27
|
-
applies_to: v.applies_to[0],
|
|
27
|
+
applies_to: v.applies_to?.[0],
|
|
28
28
|
suggestion: v.recommendation,
|
|
29
29
|
})),
|
|
30
30
|
...raw.warnings.map((v) => ({
|
|
31
31
|
rule_id: v.rule_id,
|
|
32
32
|
severity: 'WARNING',
|
|
33
33
|
message: v.message,
|
|
34
|
-
applies_to: v.applies_to[0],
|
|
34
|
+
applies_to: v.applies_to?.[0],
|
|
35
35
|
suggestion: v.recommendation,
|
|
36
36
|
})),
|
|
37
37
|
];
|
|
@@ -147,6 +147,35 @@ export async function rotateKey(apiKey, baseUrl) {
|
|
|
147
147
|
throw new Error(`Key rotation failed (${status}): ${responseBody}`);
|
|
148
148
|
return JSON.parse(responseBody);
|
|
149
149
|
}
|
|
150
|
+
// ── Corpus retrieval function ─────────────────────────────────────────────────
|
|
151
|
+
/**
|
|
152
|
+
* POST /corpus/retrieve — fetch N similar Provar test examples from the Bedrock KB corpus.
|
|
153
|
+
* Used by provar.qualityhub.examples.retrieve as the few-shot grounding step before
|
|
154
|
+
* the client LLM synthesises a new test case.
|
|
155
|
+
*
|
|
156
|
+
* Throws QualityHubAuthError on 401, QualityHubRateLimitError on 429.
|
|
157
|
+
* All other non-2xx responses throw a generic Error with status + body.
|
|
158
|
+
*/
|
|
159
|
+
export async function retrieveCorpusExamples(query, apiKey, baseUrl, options = {}) {
|
|
160
|
+
const n = Math.min(Math.max(options.n ?? 5, 1), 10);
|
|
161
|
+
const body = JSON.stringify({
|
|
162
|
+
query,
|
|
163
|
+
n,
|
|
164
|
+
...(options.app_filter !== undefined ? { app_filter: options.app_filter } : {}),
|
|
165
|
+
prefer_high_quality: options.prefer_high_quality ?? true,
|
|
166
|
+
});
|
|
167
|
+
const { status, responseBody } = await httpsRequest(`${baseUrl}/corpus/retrieve`, 'POST', { 'Content-Type': 'application/json', 'x-provar-key': apiKey }, body);
|
|
168
|
+
if (status === 401) {
|
|
169
|
+
throw new QualityHubAuthError('API key is invalid, expired, or revoked. Run `sf provar auth login` to get a new key.');
|
|
170
|
+
}
|
|
171
|
+
if (status === 429) {
|
|
172
|
+
throw new QualityHubRateLimitError('Quality Hub corpus retrieval rate limit exceeded. Try again later.');
|
|
173
|
+
}
|
|
174
|
+
if (!isOk(status)) {
|
|
175
|
+
throw new Error(`Corpus retrieval failed (${status}): ${responseBody}`);
|
|
176
|
+
}
|
|
177
|
+
return JSON.parse(responseBody);
|
|
178
|
+
}
|
|
150
179
|
// ── Internal HTTPS helper ─────────────────────────────────────────────────────
|
|
151
180
|
function isOk(status) {
|
|
152
181
|
return status >= 200 && status < 300;
|
|
@@ -192,5 +221,6 @@ export const qualityHubClient = {
|
|
|
192
221
|
fetchKeyStatus,
|
|
193
222
|
revokeKey,
|
|
194
223
|
rotateKey,
|
|
224
|
+
retrieveCorpusExamples,
|
|
195
225
|
};
|
|
196
226
|
//# sourceMappingURL=client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/qualityHub/client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8BAA8B;AAC9B,OAAO,KAAK,MAAM,YAAY,CAAC;AAC/B,OAAO,EAAE,GAAG,IAAI,OAAO,EAAE,MAAM,UAAU,CAAC;AAkD1C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAA0B;IAC7D,MAAM,MAAM,GAAG;QACb,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,QAAQ,EAAE,OAAgB;YAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;YAClB,UAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAuB;
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/services/qualityHub/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# summary
|
|
2
|
+
|
|
2
3
|
Remove the stored Provar API key.
|
|
3
4
|
|
|
4
5
|
# description
|
|
6
|
+
|
|
5
7
|
Deletes the API key stored at ~/.provar/credentials.json. After clearing, the
|
|
6
8
|
provar.testcase.validate MCP tool falls back to local validation (structural rules only,
|
|
7
9
|
no Quality Hub quality scoring).
|
|
@@ -9,5 +11,6 @@ no Quality Hub quality scoring).
|
|
|
9
11
|
The PROVAR_API_KEY environment variable is not affected by this command.
|
|
10
12
|
|
|
11
13
|
# examples
|
|
14
|
+
|
|
12
15
|
- Clear the stored API key:
|
|
13
16
|
<%= config.bin %> <%= command.id %>
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
# summary
|
|
2
|
+
|
|
2
3
|
Show the current Provar API key configuration status.
|
|
3
4
|
|
|
4
5
|
# description
|
|
6
|
+
|
|
5
7
|
Reports where the active API key comes from (environment variable or stored file),
|
|
6
8
|
shows the key prefix and when it was set, and states whether validation will use the
|
|
7
9
|
Quality Hub API or local rules only. The full key is never printed.
|
|
@@ -9,5 +11,6 @@ Quality Hub API or local rules only. The full key is never printed.
|
|
|
9
11
|
If no key is configured, guidance is shown for logging in or requesting access.
|
|
10
12
|
|
|
11
13
|
# examples
|
|
14
|
+
|
|
12
15
|
- Check auth status:
|
|
13
16
|
<%= config.bin %> <%= command.id %>
|
package/oclif.manifest.json
CHANGED
|
@@ -213,69 +213,6 @@
|
|
|
213
213
|
"status:auth:provar"
|
|
214
214
|
]
|
|
215
215
|
},
|
|
216
|
-
"provar:mcp:start": {
|
|
217
|
-
"aliases": [],
|
|
218
|
-
"args": {},
|
|
219
|
-
"description": "Launches a stateless MCP (Model Context Protocol) server that exposes Provar tools to\nAI assistants (Claude Desktop, Claude Code, Cursor) via stdio transport. All MCP\nJSON-RPC communication happens over stdout; all internal logging goes to stderr.\n\nAvailable tools:\n\n Project & inspection:\n - provar.project.inspect — inspect project folder inventory\n - provar.project.validate — validate full project from disk: coverage, quality scores\n\n Page Object:\n - provar.pageobject.generate — generate a Java Page Object skeleton\n - provar.pageobject.validate — validate Page Object quality and naming\n\n Test Case:\n - provar.testcase.generate — generate an XML test case skeleton\n - provar.testcase.validate — validate test case XML (validity + best-practices scores)\n\n Test Suite / Plan:\n - provar.testsuite.validate — validate test suite hierarchy\n - provar.testplan.validate — validate test plan metadata completeness\n - provar.testplan.create-suite — create a test suite under a plan\n - provar.testplan.add-instance — add a test instance to a plan\n - provar.testplan.remove-instance — remove a test instance from a plan\n\n Properties files:\n - provar.properties.read — read a Provar properties file\n - provar.properties.set — set a key in a Provar properties file\n - provar.properties.validate — validate a properties file structure\n - provar.properties.generate — generate a properties file skeleton\n\n Quality Hub (sf provar quality-hub wrappers):\n - provar.qualityhub.connect — connect to a Quality Hub org\n - provar.qualityhub.display — display connected org info\n - provar.qualityhub.testrun — trigger a Quality Hub test run\n - provar.qualityhub.testrun.report — poll test run status\n - provar.qualityhub.testrun.abort — abort a running test run\n - provar.qualityhub.testcase.retrieve — retrieve test case results\n - provar.qualityhub.defect.create — create defects for failed test executions\n\n Automation (sf provar automation wrappers):\n - provar.automation.setup — set up the Provar Automation runtime\n - provar.automation.metadata.download — download Salesforce metadata\n - provar.automation.compile — compile Provar test assets\n - provar.automation.testrun — run Provar tests\n - provar.automation.config.load — load a Provar configuration\n\n ANT build:\n - provar.ant.generate — generate an ANT build.xml\n - provar.ant.validate — validate an ANT build.xml\n\n Test result analysis:\n - provar.testrun.rca — root cause analysis on a test result\n - provar.testrun.report.locate — locate a test result report\n\nFor full tool documentation see docs/mcp.md in this repository.",
|
|
220
|
-
"examples": [
|
|
221
|
-
"Start MCP server (accepts stdio connections from Claude Desktop / Cursor):\n<%= config.bin %> <%= command.id %>",
|
|
222
|
-
"Start with explicit allowed paths:\n<%= config.bin %> <%= command.id %> --allowed-paths /workspace/provar",
|
|
223
|
-
"Allow multiple project directories:\n<%= config.bin %> <%= command.id %> -a /workspace/project-a -a /workspace/project-b"
|
|
224
|
-
],
|
|
225
|
-
"flags": {
|
|
226
|
-
"flags-dir": {
|
|
227
|
-
"helpGroup": "GLOBAL",
|
|
228
|
-
"name": "flags-dir",
|
|
229
|
-
"summary": "Import flag values from a directory.",
|
|
230
|
-
"hasDynamicHelp": false,
|
|
231
|
-
"multiple": false,
|
|
232
|
-
"type": "option"
|
|
233
|
-
},
|
|
234
|
-
"allowed-paths": {
|
|
235
|
-
"char": "a",
|
|
236
|
-
"name": "allowed-paths",
|
|
237
|
-
"summary": "Allowed base directory paths for file operations. Defaults to current directory.",
|
|
238
|
-
"default": [
|
|
239
|
-
"/home/runner/work/provardx-cli/provardx-cli"
|
|
240
|
-
],
|
|
241
|
-
"hasDynamicHelp": false,
|
|
242
|
-
"multiple": true,
|
|
243
|
-
"type": "option"
|
|
244
|
-
},
|
|
245
|
-
"auto-defects": {
|
|
246
|
-
"name": "auto-defects",
|
|
247
|
-
"summary": "When enabled, testrun.report suggestions will prompt defect creation on failures.",
|
|
248
|
-
"allowNo": false,
|
|
249
|
-
"type": "boolean"
|
|
250
|
-
}
|
|
251
|
-
},
|
|
252
|
-
"hasDynamicHelp": false,
|
|
253
|
-
"hiddenAliases": [],
|
|
254
|
-
"id": "provar:mcp:start",
|
|
255
|
-
"pluginAlias": "@provartesting/provardx-cli",
|
|
256
|
-
"pluginName": "@provartesting/provardx-cli",
|
|
257
|
-
"pluginType": "core",
|
|
258
|
-
"strict": true,
|
|
259
|
-
"summary": "Start a local MCP server for Provar tools over stdio transport.",
|
|
260
|
-
"enableJsonFlag": false,
|
|
261
|
-
"isESM": true,
|
|
262
|
-
"relativePath": [
|
|
263
|
-
"lib",
|
|
264
|
-
"commands",
|
|
265
|
-
"provar",
|
|
266
|
-
"mcp",
|
|
267
|
-
"start.js"
|
|
268
|
-
],
|
|
269
|
-
"aliasPermutations": [],
|
|
270
|
-
"permutations": [
|
|
271
|
-
"provar:mcp:start",
|
|
272
|
-
"mcp:provar:start",
|
|
273
|
-
"mcp:start:provar",
|
|
274
|
-
"provar:start:mcp",
|
|
275
|
-
"start:provar:mcp",
|
|
276
|
-
"start:mcp:provar"
|
|
277
|
-
]
|
|
278
|
-
},
|
|
279
216
|
"provar:config:get": {
|
|
280
217
|
"aliases": [],
|
|
281
218
|
"args": {},
|
|
@@ -398,6 +335,69 @@
|
|
|
398
335
|
"set:config:provar"
|
|
399
336
|
]
|
|
400
337
|
},
|
|
338
|
+
"provar:mcp:start": {
|
|
339
|
+
"aliases": [],
|
|
340
|
+
"args": {},
|
|
341
|
+
"description": "Launches a stateless MCP (Model Context Protocol) server that exposes Provar tools to\nAI assistants (Claude Desktop, Claude Code, Cursor) via stdio transport. All MCP\nJSON-RPC communication happens over stdout; all internal logging goes to stderr.\n\nAvailable tools:\n\n Project & inspection:\n - provar.project.inspect — inspect project folder inventory\n - provar.project.validate — validate full project from disk: coverage, quality scores\n\n Page Object:\n - provar.pageobject.generate — generate a Java Page Object skeleton\n - provar.pageobject.validate — validate Page Object quality and naming\n\n Test Case:\n - provar.testcase.generate — generate an XML test case skeleton\n - provar.testcase.validate — validate test case XML (validity + best-practices scores)\n\n Test Suite / Plan:\n - provar.testsuite.validate — validate test suite hierarchy\n - provar.testplan.validate — validate test plan metadata completeness\n - provar.testplan.create-suite — create a test suite under a plan\n - provar.testplan.add-instance — add a test instance to a plan\n - provar.testplan.remove-instance — remove a test instance from a plan\n\n Properties files:\n - provar.properties.read — read a Provar properties file\n - provar.properties.set — set a key in a Provar properties file\n - provar.properties.validate — validate a properties file structure\n - provar.properties.generate — generate a properties file skeleton\n\n Quality Hub (sf provar quality-hub wrappers):\n - provar.qualityhub.connect — connect to a Quality Hub org\n - provar.qualityhub.display — display connected org info\n - provar.qualityhub.testrun — trigger a Quality Hub test run\n - provar.qualityhub.testrun.report — poll test run status\n - provar.qualityhub.testrun.abort — abort a running test run\n - provar.qualityhub.testcase.retrieve — retrieve test case results\n - provar.qualityhub.defect.create — create defects for failed test executions\n\n Automation (sf provar automation wrappers):\n - provar.automation.setup — set up the Provar Automation runtime\n - provar.automation.metadata.download — download Salesforce metadata\n - provar.automation.compile — compile Provar test assets\n - provar.automation.testrun — run Provar tests\n - provar.automation.config.load — load a Provar configuration\n\n ANT build:\n - provar.ant.generate — generate an ANT build.xml\n - provar.ant.validate — validate an ANT build.xml\n\n Test result analysis:\n - provar.testrun.rca — root cause analysis on a test result\n - provar.testrun.report.locate — locate a test result report\n\nFor full tool documentation see docs/mcp.md in this repository.",
|
|
342
|
+
"examples": [
|
|
343
|
+
"Start MCP server (accepts stdio connections from Claude Desktop / Cursor):\n<%= config.bin %> <%= command.id %>",
|
|
344
|
+
"Start with explicit allowed paths:\n<%= config.bin %> <%= command.id %> --allowed-paths /workspace/provar",
|
|
345
|
+
"Allow multiple project directories:\n<%= config.bin %> <%= command.id %> -a /workspace/project-a -a /workspace/project-b"
|
|
346
|
+
],
|
|
347
|
+
"flags": {
|
|
348
|
+
"flags-dir": {
|
|
349
|
+
"helpGroup": "GLOBAL",
|
|
350
|
+
"name": "flags-dir",
|
|
351
|
+
"summary": "Import flag values from a directory.",
|
|
352
|
+
"hasDynamicHelp": false,
|
|
353
|
+
"multiple": false,
|
|
354
|
+
"type": "option"
|
|
355
|
+
},
|
|
356
|
+
"allowed-paths": {
|
|
357
|
+
"char": "a",
|
|
358
|
+
"name": "allowed-paths",
|
|
359
|
+
"summary": "Allowed base directory paths for file operations. Defaults to current directory.",
|
|
360
|
+
"default": [
|
|
361
|
+
"/home/runner/work/provardx-cli/provardx-cli"
|
|
362
|
+
],
|
|
363
|
+
"hasDynamicHelp": false,
|
|
364
|
+
"multiple": true,
|
|
365
|
+
"type": "option"
|
|
366
|
+
},
|
|
367
|
+
"auto-defects": {
|
|
368
|
+
"name": "auto-defects",
|
|
369
|
+
"summary": "When enabled, testrun.report suggestions will prompt defect creation on failures.",
|
|
370
|
+
"allowNo": false,
|
|
371
|
+
"type": "boolean"
|
|
372
|
+
}
|
|
373
|
+
},
|
|
374
|
+
"hasDynamicHelp": false,
|
|
375
|
+
"hiddenAliases": [],
|
|
376
|
+
"id": "provar:mcp:start",
|
|
377
|
+
"pluginAlias": "@provartesting/provardx-cli",
|
|
378
|
+
"pluginName": "@provartesting/provardx-cli",
|
|
379
|
+
"pluginType": "core",
|
|
380
|
+
"strict": true,
|
|
381
|
+
"summary": "Start a local MCP server for Provar tools over stdio transport.",
|
|
382
|
+
"enableJsonFlag": false,
|
|
383
|
+
"isESM": true,
|
|
384
|
+
"relativePath": [
|
|
385
|
+
"lib",
|
|
386
|
+
"commands",
|
|
387
|
+
"provar",
|
|
388
|
+
"mcp",
|
|
389
|
+
"start.js"
|
|
390
|
+
],
|
|
391
|
+
"aliasPermutations": [],
|
|
392
|
+
"permutations": [
|
|
393
|
+
"provar:mcp:start",
|
|
394
|
+
"mcp:provar:start",
|
|
395
|
+
"mcp:start:provar",
|
|
396
|
+
"provar:start:mcp",
|
|
397
|
+
"start:provar:mcp",
|
|
398
|
+
"start:mcp:provar"
|
|
399
|
+
]
|
|
400
|
+
},
|
|
401
401
|
"provar:quality-hub:connect": {
|
|
402
402
|
"aliases": [
|
|
403
403
|
"provar:manager:connect"
|
|
@@ -2024,5 +2024,5 @@
|
|
|
2024
2024
|
]
|
|
2025
2025
|
}
|
|
2026
2026
|
},
|
|
2027
|
-
"version": "1.5.0-beta.
|
|
2027
|
+
"version": "1.5.0-beta.7"
|
|
2028
2028
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@provartesting/provardx-cli",
|
|
3
3
|
"description": "A plugin for the Salesforce CLI to orchestrate testing activities and report quality metrics to Provar Quality Hub",
|
|
4
|
-
"version": "1.5.0-beta.
|
|
4
|
+
"version": "1.5.0-beta.7",
|
|
5
5
|
"license": "BSD-3-Clause",
|
|
6
6
|
"plugins": [
|
|
7
7
|
"@provartesting/provardx-plugins-automation",
|