@provartesting/provardx-cli 1.5.0-beta.7 → 1.5.0-beta.9
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 +1 -1
- package/lib/commands/provar/auth/status.js +19 -1
- package/lib/commands/provar/auth/status.js.map +1 -1
- package/lib/mcp/docs/PROVAR_TEST_STEP_REFERENCE.md +1430 -0
- package/lib/mcp/licensing/licenseValidator.d.ts +3 -3
- package/lib/mcp/licensing/licenseValidator.js +4 -4
- package/lib/mcp/prompts/index.d.ts +2 -0
- package/lib/mcp/prompts/index.js +19 -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/server.js +36 -0
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/tools/qualityHubApiTools.js +11 -6
- package/lib/mcp/tools/qualityHubApiTools.js.map +1 -1
- package/lib/mcp/tools/testCaseGenerate.js +10 -30
- package/lib/mcp/tools/testCaseGenerate.js.map +1 -1
- package/lib/services/auth/loginFlow.js +5 -5
- package/lib/services/auth/loginFlow.js.map +1 -1
- package/oclif.manifest.json +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2024 Provar Limited.
|
|
3
|
+
* All rights reserved.
|
|
4
|
+
* Licensed under the BSD 3-Clause license.
|
|
5
|
+
* For full license text, see LICENSE.md file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
// Source-framework context injected into each migration prompt.
|
|
9
|
+
// Lightweight: just enough to interpret the source. Format knowledge lives
|
|
10
|
+
// in the corpus (provar.qualityhub.examples.retrieve) and the validator
|
|
11
|
+
// (provar.testcase.validate) — not hardcoded here.
|
|
12
|
+
const CRT_CONTEXT = `
|
|
13
|
+
CRT (Copado Robotic Testing) is a keyword-driven framework built on Robot Framework.
|
|
14
|
+
Tests are authored in QEditor using QWords:
|
|
15
|
+
- ClickText <label> → click an element by visible label
|
|
16
|
+
- TypeText <field> <value> → type a value into a field
|
|
17
|
+
- VerifyText <text> → assert text is present on the page
|
|
18
|
+
- SelectDropdown <field> <val> → choose a picklist option
|
|
19
|
+
- OpenBrowser <url> → open a browser session (maps to Salesforce login)
|
|
20
|
+
|
|
21
|
+
Robot Framework sections: *** Keywords *** define reusable blocks; *** Test Cases *** are the test entries.
|
|
22
|
+
Suite Setup/Teardown → login at the start and cleanup at the end.
|
|
23
|
+
`.trim();
|
|
24
|
+
const SELENIUM_CONTEXT = `
|
|
25
|
+
Selenium WebDriver test patterns (Java/Python/JavaScript):
|
|
26
|
+
- driver.get(url) / navigate().to() → navigate to a URL (maps to Salesforce login)
|
|
27
|
+
- findElement(By.linkText/name).click() → click by visible label
|
|
28
|
+
- findElement(...).sendKeys(value) → type into a field
|
|
29
|
+
- Select.selectByVisibleText(val) → select a picklist option
|
|
30
|
+
- findElement(...).getText() + assertion → verify a field value
|
|
31
|
+
- WebDriverWait / ExpectedConditions → wait for element visibility
|
|
32
|
+
- @Before / setUp() → test setup including login
|
|
33
|
+
- @After / tearDown() → cleanup
|
|
34
|
+
`.trim();
|
|
35
|
+
const PLAYWRIGHT_CONTEXT = `
|
|
36
|
+
Playwright test patterns (TypeScript/JavaScript):
|
|
37
|
+
- page.goto(url) / login fixture → navigate to Salesforce (maps to login)
|
|
38
|
+
- getByLabel(label).click() → click by visible label
|
|
39
|
+
- getByRole('button', {name}).click() → click by button name
|
|
40
|
+
- getByLabel(label).fill(value) → fill a field by label
|
|
41
|
+
- locator(selector).fill(value) → fill by XPath/CSS selector
|
|
42
|
+
- locator.selectOption(value) → choose a picklist option
|
|
43
|
+
- expect(locator).toHaveValue(val) → assert a field value
|
|
44
|
+
- expect(locator).toBeVisible() → assert element is visible
|
|
45
|
+
- expect(page).toContainText(text) → assert text on page
|
|
46
|
+
- page.waitForLoadState() / waitForSelector() → wait conditions
|
|
47
|
+
- beforeEach → test setup including login
|
|
48
|
+
`.trim();
|
|
49
|
+
// ── Shared orchestration instructions ────────────────────────────────────────
|
|
50
|
+
function migrationOrchestration(projectPath) {
|
|
51
|
+
const projectHint = projectPath
|
|
52
|
+
? `The target Provar project is at: ${projectPath}`
|
|
53
|
+
: 'Ask the user for the Provar project path if needed.';
|
|
54
|
+
return `
|
|
55
|
+
## Migration workflow
|
|
56
|
+
|
|
57
|
+
Follow these steps in order:
|
|
58
|
+
|
|
59
|
+
1. **Get corpus examples** — call \`provar.qualityhub.examples.retrieve\` with keywords that
|
|
60
|
+
describe the source test's main scenario (e.g. "create opportunity", "close case", "convert lead").
|
|
61
|
+
Use the returned examples as few-shot grounding for the Provar XML format and step patterns.
|
|
62
|
+
If the response has \`"count": 0\` with a \`"warning"\` field (API unavailable or not configured),
|
|
63
|
+
fall back: read the \`provar://docs/step-reference\` MCP resource for step types and attribute
|
|
64
|
+
formats, then continue with generation based on that reference.
|
|
65
|
+
|
|
66
|
+
2. **Generate the test case** — produce a valid Provar XML test case that faithfully captures
|
|
67
|
+
the intent of the source test. Base the structure entirely on the corpus examples, not on
|
|
68
|
+
prior knowledge of Provar XML. Omit Salesforce login/navigation setup — Provar handles
|
|
69
|
+
that via Connection Manager.
|
|
70
|
+
|
|
71
|
+
3. **Write the file** — save the generated XML to the appropriate \`tests/\` subdirectory
|
|
72
|
+
inside the Provar project. ${projectHint}
|
|
73
|
+
|
|
74
|
+
4. **Validate** — call \`provar.testcase.validate\` on the saved file. If it reports errors,
|
|
75
|
+
fix them and re-validate until the file passes clean.
|
|
76
|
+
|
|
77
|
+
5. **Report** — summarise what was migrated, any steps that could not be mapped (add them
|
|
78
|
+
as \`<!-- TODO: manual step -->\` comments in the XML), and any validation warnings.
|
|
79
|
+
`.trim();
|
|
80
|
+
}
|
|
81
|
+
// ── Prompt: provar.migrate.crt ────────────────────────────────────────────────
|
|
82
|
+
export function registerCrtMigrationPrompt(server) {
|
|
83
|
+
server.prompt('provar.migrate.crt', 'Convert a Copado Robotic Testing (CRT) test — either a QWord step sequence or a Robot Framework .robot file — into a Provar XML test case. Retrieves corpus examples for grounding, generates the test case, then validates it with provar.testcase.validate.', {
|
|
84
|
+
source: z
|
|
85
|
+
.string()
|
|
86
|
+
.describe('The CRT test content to migrate. Accepts either: (1) a numbered QWord step sequence (e.g. "Step 1: ClickText Accounts"), or (2) a Robot Framework .robot file with *** Settings ***, *** Keywords ***, and *** Test Cases *** sections.'),
|
|
87
|
+
projectPath: z
|
|
88
|
+
.string()
|
|
89
|
+
.optional()
|
|
90
|
+
.describe('Absolute path to the Provar project root. Used to locate the tests/ directory when writing the output file.'),
|
|
91
|
+
testName: z
|
|
92
|
+
.string()
|
|
93
|
+
.optional()
|
|
94
|
+
.describe('Optional name for the output Provar test case. Inferred from the source if omitted.'),
|
|
95
|
+
}, ({ source, projectPath, testName }) => ({
|
|
96
|
+
messages: [
|
|
97
|
+
{
|
|
98
|
+
role: 'user',
|
|
99
|
+
content: {
|
|
100
|
+
type: 'text',
|
|
101
|
+
text: `You are a Provar test migration expert. Migrate the following CRT test to Provar.
|
|
102
|
+
|
|
103
|
+
## Source format — CRT
|
|
104
|
+
|
|
105
|
+
${CRT_CONTEXT}
|
|
106
|
+
|
|
107
|
+
${migrationOrchestration(projectPath)}
|
|
108
|
+
|
|
109
|
+
## Source CRT Test
|
|
110
|
+
|
|
111
|
+
\`\`\`
|
|
112
|
+
${source}
|
|
113
|
+
\`\`\`
|
|
114
|
+
|
|
115
|
+
${testName ? `Target test case name: ${testName}` : 'Infer the test case name from the source content.'}
|
|
116
|
+
|
|
117
|
+
Begin with step 1: call provar.qualityhub.examples.retrieve.`,
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
],
|
|
121
|
+
}));
|
|
122
|
+
}
|
|
123
|
+
// ── Prompt: provar.migrate.selenium ──────────────────────────────────────────
|
|
124
|
+
export function registerSeleniumMigrationPrompt(server) {
|
|
125
|
+
server.prompt('provar.migrate.selenium', 'Convert a Selenium WebDriver test (Java, Python, or JavaScript) that tests a Salesforce org into a Provar XML test case. Retrieves corpus examples for grounding, generates the test case, then validates it with provar.testcase.validate.', {
|
|
126
|
+
source: z
|
|
127
|
+
.string()
|
|
128
|
+
.describe('The Selenium test file content to migrate. Accepts Java (JUnit/TestNG), Python (unittest/pytest), or JavaScript (Jest/Mocha) with selenium-webdriver. Include the full file or the relevant test method(s).'),
|
|
129
|
+
projectPath: z
|
|
130
|
+
.string()
|
|
131
|
+
.optional()
|
|
132
|
+
.describe('Absolute path to the Provar project root. Used to locate the tests/ directory when writing the output file.'),
|
|
133
|
+
testName: z
|
|
134
|
+
.string()
|
|
135
|
+
.optional()
|
|
136
|
+
.describe('Optional name for the output Provar test case. Inferred from the source class/method name if omitted.'),
|
|
137
|
+
}, ({ source, projectPath, testName }) => ({
|
|
138
|
+
messages: [
|
|
139
|
+
{
|
|
140
|
+
role: 'user',
|
|
141
|
+
content: {
|
|
142
|
+
type: 'text',
|
|
143
|
+
text: `You are a Provar test migration expert. Migrate the following Selenium WebDriver test to Provar.
|
|
144
|
+
|
|
145
|
+
## Source format — Selenium WebDriver
|
|
146
|
+
|
|
147
|
+
${SELENIUM_CONTEXT}
|
|
148
|
+
|
|
149
|
+
${migrationOrchestration(projectPath)}
|
|
150
|
+
|
|
151
|
+
## Source Selenium Test
|
|
152
|
+
|
|
153
|
+
\`\`\`
|
|
154
|
+
${source}
|
|
155
|
+
\`\`\`
|
|
156
|
+
|
|
157
|
+
${testName ? `Target test case name: ${testName}` : 'Infer the test case name from the class and method name.'}
|
|
158
|
+
|
|
159
|
+
Begin with step 1: call provar.qualityhub.examples.retrieve.`,
|
|
160
|
+
},
|
|
161
|
+
},
|
|
162
|
+
],
|
|
163
|
+
}));
|
|
164
|
+
}
|
|
165
|
+
// ── Prompt: provar.migrate.playwright ────────────────────────────────────────
|
|
166
|
+
export function registerPlaywrightMigrationPrompt(server) {
|
|
167
|
+
server.prompt('provar.migrate.playwright', 'Convert a Playwright test (TypeScript or JavaScript) that tests a Salesforce org into a Provar XML test case. Retrieves corpus examples for grounding, generates the test case, then validates it with provar.testcase.validate.', {
|
|
168
|
+
source: z
|
|
169
|
+
.string()
|
|
170
|
+
.describe('The Playwright test file content to migrate. Accepts TypeScript or JavaScript using @playwright/test or the playwright library. Include the full file or the relevant test block(s).'),
|
|
171
|
+
projectPath: z
|
|
172
|
+
.string()
|
|
173
|
+
.optional()
|
|
174
|
+
.describe('Absolute path to the Provar project root. Used to locate the tests/ directory when writing the output file.'),
|
|
175
|
+
testName: z
|
|
176
|
+
.string()
|
|
177
|
+
.optional()
|
|
178
|
+
.describe('Optional name for the output Provar test case. Inferred from the test() block description if omitted.'),
|
|
179
|
+
}, ({ source, projectPath, testName }) => ({
|
|
180
|
+
messages: [
|
|
181
|
+
{
|
|
182
|
+
role: 'user',
|
|
183
|
+
content: {
|
|
184
|
+
type: 'text',
|
|
185
|
+
text: `You are a Provar test migration expert. Migrate the following Playwright test to Provar.
|
|
186
|
+
|
|
187
|
+
## Source format — Playwright
|
|
188
|
+
|
|
189
|
+
${PLAYWRIGHT_CONTEXT}
|
|
190
|
+
|
|
191
|
+
${migrationOrchestration(projectPath)}
|
|
192
|
+
|
|
193
|
+
## Source Playwright Test
|
|
194
|
+
|
|
195
|
+
\`\`\`
|
|
196
|
+
${source}
|
|
197
|
+
\`\`\`
|
|
198
|
+
|
|
199
|
+
${testName ? `Target test case name: ${testName}` : 'Infer the test case name from the test() block description.'}
|
|
200
|
+
|
|
201
|
+
Begin with step 1: call provar.qualityhub.examples.retrieve.`,
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
],
|
|
205
|
+
}));
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=migrationPrompts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrationPrompts.js","sourceRoot":"","sources":["../../../src/mcp/prompts/migrationPrompts.ts"],"names":[],"mappings":"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"}
|
package/lib/mcp/server.js
CHANGED
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* For full license text, see LICENSE.md file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
|
6
6
|
*/
|
|
7
7
|
import { createRequire } from 'node:module';
|
|
8
|
+
import { readFileSync } from 'node:fs';
|
|
9
|
+
import { fileURLToPath } from 'node:url';
|
|
10
|
+
import { dirname, join } from 'node:path';
|
|
8
11
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
9
12
|
import { z } from 'zod';
|
|
10
13
|
import { log } from './logging/logger.js';
|
|
@@ -27,6 +30,7 @@ import { registerAllAntTools } from './tools/antTools.js';
|
|
|
27
30
|
import { registerAllRcaTools } from './tools/rcaTools.js';
|
|
28
31
|
import { registerAllTestPlanTools } from './tools/testPlanTools.js';
|
|
29
32
|
import { registerAllNitroXTools } from './tools/nitroXTools.js';
|
|
33
|
+
import { registerAllPrompts } from './prompts/index.js';
|
|
30
34
|
export function createProvarMcpServer(config) {
|
|
31
35
|
log('info', 'Creating Provar MCP server', { allowedPaths: config.allowedPaths });
|
|
32
36
|
const server = new McpServer({
|
|
@@ -61,6 +65,38 @@ export function createProvarMcpServer(config) {
|
|
|
61
65
|
registerAllRcaTools(server);
|
|
62
66
|
registerAllTestPlanTools(server, config);
|
|
63
67
|
registerAllNitroXTools(server, config);
|
|
68
|
+
// ── Provar prompts ───────────────────────────────────────────────────────────
|
|
69
|
+
registerAllPrompts(server);
|
|
70
|
+
// ── Documentation resources ──────────────────────────────────────────────────
|
|
71
|
+
const docsDir = join(dirname(fileURLToPath(import.meta.url)), 'docs');
|
|
72
|
+
server.resource('provar-step-reference', 'provar://docs/step-reference', {
|
|
73
|
+
description: 'Canonical reference for all Provar XML test step API IDs, argument formats, validation rules, and corpus-verified examples. Use this to understand correct step structure when generating or reviewing test cases.',
|
|
74
|
+
mimeType: 'text/markdown',
|
|
75
|
+
}, () => {
|
|
76
|
+
try {
|
|
77
|
+
const content = readFileSync(join(docsDir, 'PROVAR_TEST_STEP_REFERENCE.md'), 'utf-8');
|
|
78
|
+
return {
|
|
79
|
+
contents: [
|
|
80
|
+
{
|
|
81
|
+
uri: 'provar://docs/step-reference',
|
|
82
|
+
mimeType: 'text/markdown',
|
|
83
|
+
text: content,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return {
|
|
90
|
+
contents: [
|
|
91
|
+
{
|
|
92
|
+
uri: 'provar://docs/step-reference',
|
|
93
|
+
mimeType: 'text/markdown',
|
|
94
|
+
text: '# Provar Test Step Reference\n\nReference doc not found. If you are developing from source, rebuild the package. Otherwise, reinstall or upgrade the plugin/package and try again.',
|
|
95
|
+
},
|
|
96
|
+
],
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
});
|
|
64
100
|
return server;
|
|
65
101
|
}
|
|
66
102
|
//# sourceMappingURL=server.js.map
|
package/lib/mcp/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnD,MAAM,cAAc,GAAY,WAAW,CAAC,oBAAoB,CAAyB,CAAC,OAAO,CAAC;AAClG,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,wBAAwB,EAAE,MAAM,6BAA6B,CAAC;AACvE,OAAO,EAAE,+BAA+B,EAAE,MAAM,oCAAoC,CAAC;AACrF,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,6BAA6B,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,20 +10,25 @@ import { makeError, makeRequestId } from '../schemas/common.js';
|
|
|
10
10
|
import { log } from '../logging/logger.js';
|
|
11
11
|
import { credentialsService } from '../../services/auth/credentials.js';
|
|
12
12
|
import { qualityHubClient, getQualityHubBaseUrl, QualityHubAuthError, QualityHubRateLimitError, REQUEST_ACCESS_URL, } from '../../services/qualityHub/client.js';
|
|
13
|
+
const CORPUS_FALLBACK_HINT = 'Fallback: read the provar://docs/step-reference MCP resource for step types and attribute formats, then continue.';
|
|
13
14
|
const CORPUS_ONBOARDING_WARNING = 'Corpus retrieval skipped — no Provar API key configured. Continuing without example grounding.\n' +
|
|
14
15
|
'To enable corpus retrieval: run sf provar auth login\n' +
|
|
15
|
-
`No account? Request access at: ${REQUEST_ACCESS_URL}
|
|
16
|
+
`No account? Request access at: ${REQUEST_ACCESS_URL}\n` +
|
|
17
|
+
CORPUS_FALLBACK_HINT;
|
|
16
18
|
const CORPUS_AUTH_WARNING = 'Corpus retrieval skipped — API key is invalid or expired. Continuing without example grounding.\n' +
|
|
17
|
-
`Run sf provar auth login to get a new key, or request access at: ${REQUEST_ACCESS_URL}
|
|
18
|
-
|
|
19
|
+
`Run sf provar auth login to get a new key, or request access at: ${REQUEST_ACCESS_URL}\n` +
|
|
20
|
+
CORPUS_FALLBACK_HINT;
|
|
21
|
+
const CORPUS_RATE_LIMIT_WARNING = 'Corpus retrieval skipped — rate limit reached. Continuing without example grounding. Try again shortly.\n' +
|
|
22
|
+
CORPUS_FALLBACK_HINT;
|
|
19
23
|
const CORPUS_UNREACHABLE_WARNING = 'Corpus retrieval skipped — API unreachable. Continuing without example grounding.\n' +
|
|
20
|
-
'Check your network connection or try again later
|
|
24
|
+
'Check your network connection or try again later.\n' +
|
|
25
|
+
CORPUS_FALLBACK_HINT;
|
|
21
26
|
// ── Tool: provar.qualityhub.examples.retrieve ─────────────────────────────────
|
|
22
27
|
export function registerCorpusExamplesRetrieve(server) {
|
|
23
28
|
server.tool('provar.qualityhub.examples.retrieve', [
|
|
24
29
|
'Retrieve N similar Provar test case examples from the Quality Hub corpus (1000+ tests in Bedrock KB).',
|
|
25
|
-
'Use this BEFORE
|
|
26
|
-
'Pass a user story, requirement,
|
|
30
|
+
'Use this BEFORE writing any Provar .testcase XML — whether via provar.testcase.generate, Write, or Edit.',
|
|
31
|
+
'Pass a user story, requirement, source test file content, or step type keywords as the query.',
|
|
27
32
|
'Returns up to N example Provar XML test cases ordered by similarity score.',
|
|
28
33
|
'If retrieval fails (no auth, network error, rate limit), returns empty examples with a warning — the',
|
|
29
34
|
'generation workflow can still continue without grounding. Never hard-errors on API failure.',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"qualityHubApiTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/qualityHubApiTools.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,wBAAwB,EACxB,kBAAkB,GACnB,MAAM,qCAAqC,CAAC;AAE7C,MAAM,yBAAyB,GAC7B,kGAAkG;IAClG,wDAAwD;IACxD,kCAAkC,kBAAkB,
|
|
1
|
+
{"version":3,"file":"qualityHubApiTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/qualityHubApiTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -87,28 +87,17 @@ const TOOL_DESCRIPTION = [
|
|
|
87
87
|
'AssertValues on SOQL results: index paths like "ResultList[0].Field" are not supported.',
|
|
88
88
|
'Use ForEach to iterate the result list, or SetValues to extract a field into a variable first.',
|
|
89
89
|
'Validation: the response always includes a validation field with is_valid, validity_score, quality_score, and any structural issues — check this before attempting to run the test case.',
|
|
90
|
+
'Grounding: call provar.qualityhub.examples.retrieve before generating to get corpus examples for the scenario — correct XML structure for the step types you need.',
|
|
90
91
|
].join(' ');
|
|
91
92
|
export function registerTestCaseGenerate(server, config) {
|
|
92
93
|
server.tool('provar.testcase.generate', TOOL_DESCRIPTION, {
|
|
93
94
|
test_case_name: z.string().describe('Test case name (human-readable label)'),
|
|
94
|
-
test_case_id: z
|
|
95
|
-
.string()
|
|
96
|
-
.optional()
|
|
97
|
-
.describe('Explicit test case id; auto-generated UUID v4 if omitted'),
|
|
95
|
+
test_case_id: z.string().optional().describe('Explicit test case id; auto-generated UUID v4 if omitted'),
|
|
98
96
|
steps: z.array(StepSchema).default([]).describe('Ordered list of test steps'),
|
|
99
|
-
output_path: z
|
|
100
|
-
.string()
|
|
101
|
-
.optional()
|
|
102
|
-
.describe('Suggested file path for the .xml file (returned in response)'),
|
|
97
|
+
output_path: z.string().optional().describe('Suggested file path for the .xml file (returned in response)'),
|
|
103
98
|
overwrite: z.boolean().default(false).describe('Overwrite if output_path file already exists'),
|
|
104
|
-
dry_run: z
|
|
105
|
-
|
|
106
|
-
.default(true)
|
|
107
|
-
.describe('true = return XML only (default); false = write to output_path'),
|
|
108
|
-
idempotency_key: z
|
|
109
|
-
.string()
|
|
110
|
-
.optional()
|
|
111
|
-
.describe('Caller-provided key echoed back for deduplication tracking'),
|
|
99
|
+
dry_run: z.boolean().default(true).describe('true = return XML only (default); false = write to output_path'),
|
|
100
|
+
idempotency_key: z.string().optional().describe('Caller-provided key echoed back for deduplication tracking'),
|
|
112
101
|
}, (input) => {
|
|
113
102
|
const requestId = makeRequestId();
|
|
114
103
|
log('info', 'provar.testcase.generate', {
|
|
@@ -118,9 +107,7 @@ export function registerTestCaseGenerate(server, config) {
|
|
|
118
107
|
});
|
|
119
108
|
try {
|
|
120
109
|
const xmlContent = buildTestCaseXml(input);
|
|
121
|
-
const filePath = input.output_path
|
|
122
|
-
? path.resolve(input.output_path)
|
|
123
|
-
: undefined;
|
|
110
|
+
const filePath = input.output_path ? path.resolve(input.output_path) : undefined;
|
|
124
111
|
let written = false;
|
|
125
112
|
if (filePath && !input.dry_run) {
|
|
126
113
|
assertPathAllowed(filePath, config.allowedPaths);
|
|
@@ -161,7 +148,7 @@ export function registerTestCaseGenerate(server, config) {
|
|
|
161
148
|
}
|
|
162
149
|
catch (err) {
|
|
163
150
|
const error = err;
|
|
164
|
-
const errResult = makeError(error instanceof PathPolicyError ? error.code :
|
|
151
|
+
const errResult = makeError(error instanceof PathPolicyError ? error.code : error.code ?? 'GENERATE_ERROR', error.message, requestId, false);
|
|
165
152
|
log('error', 'provar.testcase.generate failed', { requestId, error: error.message });
|
|
166
153
|
return { isError: true, content: [{ type: 'text', text: JSON.stringify(errResult) }] };
|
|
167
154
|
}
|
|
@@ -174,7 +161,7 @@ function buildArgumentsXml(attributes) {
|
|
|
174
161
|
return '';
|
|
175
162
|
const argLines = entries
|
|
176
163
|
.map(([k, v]) => ` <argument id="${escapeXmlAttr(k)}">\n` +
|
|
177
|
-
` <value class="value" valueClass="
|
|
164
|
+
` <value class="value" valueClass="string">${escapeXmlContent(v)}</value>\n` +
|
|
178
165
|
' </argument>')
|
|
179
166
|
.join('\n');
|
|
180
167
|
return `\n <arguments>\n${argLines}\n </arguments>\n `;
|
|
@@ -206,16 +193,9 @@ function buildTestCaseXml(input) {
|
|
|
206
193
|
'</testCase>\n');
|
|
207
194
|
}
|
|
208
195
|
function escapeXmlAttr(value) {
|
|
209
|
-
return value
|
|
210
|
-
.replace(/&/g, '&')
|
|
211
|
-
.replace(/"/g, '"')
|
|
212
|
-
.replace(/</g, '<')
|
|
213
|
-
.replace(/>/g, '>');
|
|
196
|
+
return value.replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>');
|
|
214
197
|
}
|
|
215
198
|
function escapeXmlContent(value) {
|
|
216
|
-
return value
|
|
217
|
-
.replace(/&/g, '&')
|
|
218
|
-
.replace(/</g, '<')
|
|
219
|
-
.replace(/>/g, '>');
|
|
199
|
+
return value.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
|
220
200
|
}
|
|
221
201
|
//# sourceMappingURL=testCaseGenerate.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testCaseGenerate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseGenerate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,8BAA8B;AAC9B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC/E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,iFAAiF;AACjF,iFAAiF;AACjF,iDAAiD;AAEjD,MAAM,iBAAiB,GAA2B;IAChD,SAAS,
|
|
1
|
+
{"version":3,"file":"testCaseGenerate.js","sourceRoot":"","sources":["../../../src/mcp/tools/testCaseGenerate.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,8 +10,8 @@ import http from 'node:http';
|
|
|
10
10
|
import https from 'node:https';
|
|
11
11
|
import { spawn } from 'node:child_process';
|
|
12
12
|
import { URL } from 'node:url';
|
|
13
|
-
// All three ports must be pre-registered in the Cognito App Client.
|
|
14
|
-
//
|
|
13
|
+
// All three ports must be pre-registered in both the Cognito App Client and the Salesforce External Client Application (SF ECA).
|
|
14
|
+
// Both providers require redirect_uri to exactly match a registered callback URL — no wildcards.
|
|
15
15
|
export const CALLBACK_PORTS = [1717, 7890, 8080];
|
|
16
16
|
// ── PKCE ─────────────────────────────────────────────────────────────────────
|
|
17
17
|
/**
|
|
@@ -140,7 +140,7 @@ export function listenForCallback(port, expectedState) {
|
|
|
140
140
|
resolve(code);
|
|
141
141
|
}
|
|
142
142
|
else {
|
|
143
|
-
reject(new Error(description ?? error ?? 'No authorisation code received from
|
|
143
|
+
reject(new Error(description ?? error ?? 'No authorisation code received from identity provider'));
|
|
144
144
|
}
|
|
145
145
|
});
|
|
146
146
|
server.on('connection', (socket) => {
|
|
@@ -167,7 +167,7 @@ export async function exchangeCodeForTokens(opts) {
|
|
|
167
167
|
'Content-Type': 'application/x-www-form-urlencoded',
|
|
168
168
|
});
|
|
169
169
|
if (status !== 200) {
|
|
170
|
-
throw new Error(`
|
|
170
|
+
throw new Error(`Token exchange failed (${status}): ${responseBody}`);
|
|
171
171
|
}
|
|
172
172
|
return JSON.parse(responseBody);
|
|
173
173
|
}
|
|
@@ -193,7 +193,7 @@ function httpsPost(url, body, headers) {
|
|
|
193
193
|
res.on('end', () => resolve({ status: res.statusCode ?? 0, responseBody: data }));
|
|
194
194
|
});
|
|
195
195
|
req.setTimeout(REQUEST_TIMEOUT_MS, () => {
|
|
196
|
-
req.destroy(new Error(`
|
|
196
|
+
req.destroy(new Error(`Token exchange timed out after ${REQUEST_TIMEOUT_MS / 1000}s`));
|
|
197
197
|
});
|
|
198
198
|
req.on('error', reject);
|
|
199
199
|
req.write(body);
|
|
@@ -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;AAE/B,OAAO,EAAE,KAAK,EAAqB,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,
|
|
1
|
+
{"version":3,"file":"loginFlow.js","sourceRoot":"","sources":["../../../src/services/auth/loginFlow.ts"],"names":[],"mappings":"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"}
|
package/oclif.manifest.json
CHANGED
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
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.9",
|
|
5
|
+
"mcpName": "io.github.provartesting/provar",
|
|
5
6
|
"license": "BSD-3-Clause",
|
|
6
7
|
"plugins": [
|
|
7
8
|
"@provartesting/provardx-plugins-automation",
|
|
@@ -145,7 +146,7 @@
|
|
|
145
146
|
]
|
|
146
147
|
},
|
|
147
148
|
"compile": {
|
|
148
|
-
"command": "tsc -p . --pretty --incremental && shx mkdir -p lib/mcp/rules && shx cp src/mcp/rules/*.json lib/mcp/rules/",
|
|
149
|
+
"command": "tsc -p . --pretty --incremental && shx mkdir -p lib/mcp/rules && shx cp src/mcp/rules/*.json lib/mcp/rules/ && shx mkdir -p lib/mcp/docs && shx cp docs/PROVAR_TEST_STEP_REFERENCE.md lib/mcp/docs/",
|
|
149
150
|
"files": [
|
|
150
151
|
"src/**/*.ts",
|
|
151
152
|
"src/mcp/rules/*.json",
|