@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
package/oclif.manifest.json
CHANGED
|
@@ -1,58 +1,216 @@
|
|
|
1
1
|
{
|
|
2
2
|
"commands": {
|
|
3
|
-
"provar:
|
|
3
|
+
"provar:auth:clear": {
|
|
4
4
|
"aliases": [],
|
|
5
5
|
"args": {},
|
|
6
|
-
"description": "
|
|
6
|
+
"description": "Deletes the API key stored at ~/.provar/credentials.json. After clearing, the\nprovar_testcase_validate MCP tool falls back to local validation (structural rules only,\nno Quality Hub quality scoring).\n\nThe PROVAR_API_KEY environment variable is not affected by this command.",
|
|
7
7
|
"examples": [
|
|
8
|
-
"
|
|
9
|
-
"Start with explicit allowed paths:\n<%= config.bin %> <%= command.id %> --allowed-paths /workspace/provar",
|
|
10
|
-
"Allow multiple project directories:\n<%= config.bin %> <%= command.id %> -a /workspace/project-a -a /workspace/project-b"
|
|
8
|
+
"Clear the stored API key:\n<%= config.bin %> <%= command.id %>"
|
|
11
9
|
],
|
|
12
10
|
"flags": {
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
-
|
|
19
|
-
|
|
11
|
+
"json": {
|
|
12
|
+
"description": "Format output as json.",
|
|
13
|
+
"helpGroup": "GLOBAL",
|
|
14
|
+
"name": "json",
|
|
15
|
+
"allowNo": false,
|
|
16
|
+
"type": "boolean"
|
|
17
|
+
},
|
|
18
|
+
"flags-dir": {
|
|
19
|
+
"helpGroup": "GLOBAL",
|
|
20
|
+
"name": "flags-dir",
|
|
21
|
+
"summary": "Import flag values from a directory.",
|
|
20
22
|
"hasDynamicHelp": false,
|
|
21
|
-
"multiple":
|
|
23
|
+
"multiple": false,
|
|
24
|
+
"type": "option"
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
"hasDynamicHelp": false,
|
|
28
|
+
"hiddenAliases": [],
|
|
29
|
+
"id": "provar:auth:clear",
|
|
30
|
+
"pluginAlias": "@provartesting/provardx-cli",
|
|
31
|
+
"pluginName": "@provartesting/provardx-cli",
|
|
32
|
+
"pluginType": "core",
|
|
33
|
+
"strict": true,
|
|
34
|
+
"summary": "Remove the stored Provar API key.",
|
|
35
|
+
"enableJsonFlag": true,
|
|
36
|
+
"isESM": true,
|
|
37
|
+
"relativePath": [
|
|
38
|
+
"lib",
|
|
39
|
+
"commands",
|
|
40
|
+
"provar",
|
|
41
|
+
"auth",
|
|
42
|
+
"clear.js"
|
|
43
|
+
],
|
|
44
|
+
"aliasPermutations": [],
|
|
45
|
+
"permutations": [
|
|
46
|
+
"provar:auth:clear",
|
|
47
|
+
"auth:provar:clear",
|
|
48
|
+
"auth:clear:provar",
|
|
49
|
+
"provar:clear:auth",
|
|
50
|
+
"clear:provar:auth",
|
|
51
|
+
"clear:auth:provar"
|
|
52
|
+
]
|
|
53
|
+
},
|
|
54
|
+
"provar:auth:login": {
|
|
55
|
+
"aliases": [],
|
|
56
|
+
"args": {},
|
|
57
|
+
"description": "Opens a browser to the Provar login page. After you authenticate, your API key\nis stored at ~/.provar/credentials.json and used automatically by the Provar MCP\ntools and CI/CD integrations.\n\nThe Cognito session tokens are held in memory only for the duration of the key\nexchange and are then discarded — only the pv*k* API key is written to disk.\n\nRun 'sf provar auth status' after login to confirm the key is configured correctly.\n\nDon't have an account? Request access at:\nhttps://aqqlrlhga7.execute-api.us-east-1.amazonaws.com/dev/auth/request-access",
|
|
58
|
+
"examples": [
|
|
59
|
+
"Log in interactively (opens browser):\n<%= config.bin %> <%= command.id %>",
|
|
60
|
+
"Log in against a staging environment:\n<%= config.bin %> <%= command.id %> --url https://dev.api.example.com"
|
|
61
|
+
],
|
|
62
|
+
"flags": {
|
|
63
|
+
"json": {
|
|
64
|
+
"description": "Format output as json.",
|
|
65
|
+
"helpGroup": "GLOBAL",
|
|
66
|
+
"name": "json",
|
|
67
|
+
"allowNo": false,
|
|
68
|
+
"type": "boolean"
|
|
69
|
+
},
|
|
70
|
+
"flags-dir": {
|
|
71
|
+
"helpGroup": "GLOBAL",
|
|
72
|
+
"name": "flags-dir",
|
|
73
|
+
"summary": "Import flag values from a directory.",
|
|
74
|
+
"hasDynamicHelp": false,
|
|
75
|
+
"multiple": false,
|
|
22
76
|
"type": "option"
|
|
23
77
|
},
|
|
24
|
-
"
|
|
25
|
-
"name": "
|
|
26
|
-
"
|
|
78
|
+
"url": {
|
|
79
|
+
"name": "url",
|
|
80
|
+
"required": false,
|
|
81
|
+
"summary": "Override the Quality Hub API base URL (for testing against a non-production environment).",
|
|
82
|
+
"hasDynamicHelp": false,
|
|
83
|
+
"multiple": false,
|
|
84
|
+
"type": "option"
|
|
85
|
+
}
|
|
86
|
+
},
|
|
87
|
+
"hasDynamicHelp": false,
|
|
88
|
+
"hiddenAliases": [],
|
|
89
|
+
"id": "provar:auth:login",
|
|
90
|
+
"pluginAlias": "@provartesting/provardx-cli",
|
|
91
|
+
"pluginName": "@provartesting/provardx-cli",
|
|
92
|
+
"pluginType": "core",
|
|
93
|
+
"strict": true,
|
|
94
|
+
"summary": "Log in to Provar Quality Hub and store your API key.",
|
|
95
|
+
"enableJsonFlag": true,
|
|
96
|
+
"isESM": true,
|
|
97
|
+
"relativePath": [
|
|
98
|
+
"lib",
|
|
99
|
+
"commands",
|
|
100
|
+
"provar",
|
|
101
|
+
"auth",
|
|
102
|
+
"login.js"
|
|
103
|
+
],
|
|
104
|
+
"aliasPermutations": [],
|
|
105
|
+
"permutations": [
|
|
106
|
+
"provar:auth:login",
|
|
107
|
+
"auth:provar:login",
|
|
108
|
+
"auth:login:provar",
|
|
109
|
+
"provar:login:auth",
|
|
110
|
+
"login:provar:auth",
|
|
111
|
+
"login:auth:provar"
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
"provar:auth:rotate": {
|
|
115
|
+
"aliases": [],
|
|
116
|
+
"args": {},
|
|
117
|
+
"description": "Exchanges your current pv*k* key for a new one in a single atomic operation.\nThe old key is invalidated the moment the new key is issued — there is no window\nwhere both are valid.\n\nThe new key is written to ~/.provar/credentials.json automatically.\n\nUse this command to rotate your key on a regular schedule (every ~90 days) without\ngoing through the browser login flow again.\n\nIf the current key is already expired or revoked, rotation is not possible — run\nsf provar auth login instead to authenticate via browser and get a fresh key.",
|
|
118
|
+
"examples": [
|
|
119
|
+
"Rotate the stored API key:\n<%= config.bin %> <%= command.id %>"
|
|
120
|
+
],
|
|
121
|
+
"flags": {
|
|
122
|
+
"json": {
|
|
123
|
+
"description": "Format output as json.",
|
|
124
|
+
"helpGroup": "GLOBAL",
|
|
125
|
+
"name": "json",
|
|
27
126
|
"allowNo": false,
|
|
28
127
|
"type": "boolean"
|
|
128
|
+
},
|
|
129
|
+
"flags-dir": {
|
|
130
|
+
"helpGroup": "GLOBAL",
|
|
131
|
+
"name": "flags-dir",
|
|
132
|
+
"summary": "Import flag values from a directory.",
|
|
133
|
+
"hasDynamicHelp": false,
|
|
134
|
+
"multiple": false,
|
|
135
|
+
"type": "option"
|
|
29
136
|
}
|
|
30
137
|
},
|
|
31
138
|
"hasDynamicHelp": false,
|
|
32
139
|
"hiddenAliases": [],
|
|
33
|
-
"id": "provar:
|
|
140
|
+
"id": "provar:auth:rotate",
|
|
34
141
|
"pluginAlias": "@provartesting/provardx-cli",
|
|
35
142
|
"pluginName": "@provartesting/provardx-cli",
|
|
36
143
|
"pluginType": "core",
|
|
37
144
|
"strict": true,
|
|
38
|
-
"summary": "
|
|
39
|
-
"enableJsonFlag":
|
|
145
|
+
"summary": "Rotate your stored Provar Quality Hub API key.",
|
|
146
|
+
"enableJsonFlag": true,
|
|
40
147
|
"isESM": true,
|
|
41
148
|
"relativePath": [
|
|
42
149
|
"lib",
|
|
43
150
|
"commands",
|
|
44
151
|
"provar",
|
|
45
|
-
"
|
|
46
|
-
"
|
|
152
|
+
"auth",
|
|
153
|
+
"rotate.js"
|
|
47
154
|
],
|
|
48
155
|
"aliasPermutations": [],
|
|
49
156
|
"permutations": [
|
|
50
|
-
"provar:
|
|
51
|
-
"
|
|
52
|
-
"
|
|
53
|
-
"provar:
|
|
54
|
-
"
|
|
55
|
-
"
|
|
157
|
+
"provar:auth:rotate",
|
|
158
|
+
"auth:provar:rotate",
|
|
159
|
+
"auth:rotate:provar",
|
|
160
|
+
"provar:rotate:auth",
|
|
161
|
+
"rotate:provar:auth",
|
|
162
|
+
"rotate:auth:provar"
|
|
163
|
+
]
|
|
164
|
+
},
|
|
165
|
+
"provar:auth:status": {
|
|
166
|
+
"aliases": [],
|
|
167
|
+
"args": {},
|
|
168
|
+
"description": "Reports where the active API key comes from (environment variable or stored file),\nshows the key prefix and when it was set, and states whether validation will use the\nQuality Hub API or local rules only. The full key is never printed.\n\nIf no key is configured, guidance is shown for logging in or requesting access.",
|
|
169
|
+
"examples": [
|
|
170
|
+
"Check auth status:\n<%= config.bin %> <%= command.id %>"
|
|
171
|
+
],
|
|
172
|
+
"flags": {
|
|
173
|
+
"json": {
|
|
174
|
+
"description": "Format output as json.",
|
|
175
|
+
"helpGroup": "GLOBAL",
|
|
176
|
+
"name": "json",
|
|
177
|
+
"allowNo": false,
|
|
178
|
+
"type": "boolean"
|
|
179
|
+
},
|
|
180
|
+
"flags-dir": {
|
|
181
|
+
"helpGroup": "GLOBAL",
|
|
182
|
+
"name": "flags-dir",
|
|
183
|
+
"summary": "Import flag values from a directory.",
|
|
184
|
+
"hasDynamicHelp": false,
|
|
185
|
+
"multiple": false,
|
|
186
|
+
"type": "option"
|
|
187
|
+
}
|
|
188
|
+
},
|
|
189
|
+
"hasDynamicHelp": false,
|
|
190
|
+
"hiddenAliases": [],
|
|
191
|
+
"id": "provar:auth:status",
|
|
192
|
+
"pluginAlias": "@provartesting/provardx-cli",
|
|
193
|
+
"pluginName": "@provartesting/provardx-cli",
|
|
194
|
+
"pluginType": "core",
|
|
195
|
+
"strict": true,
|
|
196
|
+
"summary": "Show the current Provar API key configuration status.",
|
|
197
|
+
"enableJsonFlag": true,
|
|
198
|
+
"isESM": true,
|
|
199
|
+
"relativePath": [
|
|
200
|
+
"lib",
|
|
201
|
+
"commands",
|
|
202
|
+
"provar",
|
|
203
|
+
"auth",
|
|
204
|
+
"status.js"
|
|
205
|
+
],
|
|
206
|
+
"aliasPermutations": [],
|
|
207
|
+
"permutations": [
|
|
208
|
+
"provar:auth:status",
|
|
209
|
+
"auth:provar:status",
|
|
210
|
+
"auth:status:provar",
|
|
211
|
+
"provar:status:auth",
|
|
212
|
+
"status:provar:auth",
|
|
213
|
+
"status:auth:provar"
|
|
56
214
|
]
|
|
57
215
|
},
|
|
58
216
|
"provar:config:get": {
|
|
@@ -70,6 +228,14 @@
|
|
|
70
228
|
"allowNo": false,
|
|
71
229
|
"type": "boolean"
|
|
72
230
|
},
|
|
231
|
+
"flags-dir": {
|
|
232
|
+
"helpGroup": "GLOBAL",
|
|
233
|
+
"name": "flags-dir",
|
|
234
|
+
"summary": "Import flag values from a directory.",
|
|
235
|
+
"hasDynamicHelp": false,
|
|
236
|
+
"multiple": false,
|
|
237
|
+
"type": "option"
|
|
238
|
+
},
|
|
73
239
|
"file-path": {
|
|
74
240
|
"char": "f",
|
|
75
241
|
"name": "file-path",
|
|
@@ -124,6 +290,14 @@
|
|
|
124
290
|
"allowNo": false,
|
|
125
291
|
"type": "boolean"
|
|
126
292
|
},
|
|
293
|
+
"flags-dir": {
|
|
294
|
+
"helpGroup": "GLOBAL",
|
|
295
|
+
"name": "flags-dir",
|
|
296
|
+
"summary": "Import flag values from a directory.",
|
|
297
|
+
"hasDynamicHelp": false,
|
|
298
|
+
"multiple": false,
|
|
299
|
+
"type": "option"
|
|
300
|
+
},
|
|
127
301
|
"file-path": {
|
|
128
302
|
"char": "f",
|
|
129
303
|
"name": "file-path",
|
|
@@ -161,6 +335,81 @@
|
|
|
161
335
|
"set:config:provar"
|
|
162
336
|
]
|
|
163
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\nProject & inspection:\n\n- provardx_ping — ping the MCP server (health check)\n- provar_project_inspect — inspect project folder inventory\n- provar_project_validate — validate full project from disk: coverage, quality scores\n- provar_connection_list — list connections and named environments from the project\n\nPage Object:\n\n- provar_pageobject_generate — generate a Java Page Object skeleton\n- provar_pageobject_validate — validate Page Object quality and naming\n\nTest Case:\n\n- provar_testcase_generate — generate an XML test case skeleton\n- provar_testcase_validate — validate test case XML (validity + best-practices scores)\n- provar_testcase_step_edit — atomically add or remove a single step in a test case\n\nTest Suite / Plan:\n\n- provar_testsuite_validate — validate test suite hierarchy\n- provar_testplan_validate — validate test plan metadata completeness\n- provar_testplan_create — create a new test plan\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\nProperties files:\n\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\nQuality Hub (sf provar quality-hub wrappers):\n\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- provar_qualityhub_examples_retrieve — retrieve corpus examples for test generation grounding\n\nAutomation (sf provar automation wrappers):\n\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\nANT build:\n\n- provar_ant_generate — generate an ANT build.xml\n- provar_ant_validate — validate an ANT build.xml\n\nTest result analysis:\n\n- provar_testrun_rca — root cause analysis on a test result\n- provar_testrun_report_locate — locate a test result report\n\nNitroX (Provar NitroX component tools):\n\n- provar_nitrox_discover — discover NitroX component metadata\n- provar_nitrox_generate — generate a NitroX component\n- provar_nitrox_patch — patch a NitroX component definition\n- provar_nitrox_read — read a NitroX component definition\n- provar_nitrox_validate — validate a NitroX component\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
|
+
"auto-update": {
|
|
374
|
+
"name": "auto-update",
|
|
375
|
+
"summary": "When enabled, automatically installs the latest version at startup and exits. The MCP client must reconnect to load the new version.",
|
|
376
|
+
"allowNo": false,
|
|
377
|
+
"type": "boolean"
|
|
378
|
+
},
|
|
379
|
+
"no-update-check": {
|
|
380
|
+
"name": "no-update-check",
|
|
381
|
+
"summary": "Skip the update check at startup. Also controlled by the PROVAR_NO_UPDATE_CHECK environment variable.",
|
|
382
|
+
"allowNo": false,
|
|
383
|
+
"type": "boolean"
|
|
384
|
+
}
|
|
385
|
+
},
|
|
386
|
+
"hasDynamicHelp": false,
|
|
387
|
+
"hiddenAliases": [],
|
|
388
|
+
"id": "provar:mcp:start",
|
|
389
|
+
"pluginAlias": "@provartesting/provardx-cli",
|
|
390
|
+
"pluginName": "@provartesting/provardx-cli",
|
|
391
|
+
"pluginType": "core",
|
|
392
|
+
"strict": true,
|
|
393
|
+
"summary": "Start a local MCP server for Provar tools over stdio transport.",
|
|
394
|
+
"enableJsonFlag": false,
|
|
395
|
+
"isESM": true,
|
|
396
|
+
"relativePath": [
|
|
397
|
+
"lib",
|
|
398
|
+
"commands",
|
|
399
|
+
"provar",
|
|
400
|
+
"mcp",
|
|
401
|
+
"start.js"
|
|
402
|
+
],
|
|
403
|
+
"aliasPermutations": [],
|
|
404
|
+
"permutations": [
|
|
405
|
+
"provar:mcp:start",
|
|
406
|
+
"mcp:provar:start",
|
|
407
|
+
"mcp:start:provar",
|
|
408
|
+
"provar:start:mcp",
|
|
409
|
+
"start:provar:mcp",
|
|
410
|
+
"start:mcp:provar"
|
|
411
|
+
]
|
|
412
|
+
},
|
|
164
413
|
"provar:quality-hub:connect": {
|
|
165
414
|
"aliases": [
|
|
166
415
|
"provar:manager:connect"
|
|
@@ -368,6 +617,14 @@
|
|
|
368
617
|
"allowNo": false,
|
|
369
618
|
"type": "boolean"
|
|
370
619
|
},
|
|
620
|
+
"flags-dir": {
|
|
621
|
+
"helpGroup": "GLOBAL",
|
|
622
|
+
"name": "flags-dir",
|
|
623
|
+
"summary": "Import flag values from a directory.",
|
|
624
|
+
"hasDynamicHelp": false,
|
|
625
|
+
"multiple": false,
|
|
626
|
+
"type": "option"
|
|
627
|
+
},
|
|
371
628
|
"properties-file": {
|
|
372
629
|
"char": "p",
|
|
373
630
|
"name": "properties-file",
|
|
@@ -445,6 +702,14 @@
|
|
|
445
702
|
"name": "json",
|
|
446
703
|
"allowNo": false,
|
|
447
704
|
"type": "boolean"
|
|
705
|
+
},
|
|
706
|
+
"flags-dir": {
|
|
707
|
+
"helpGroup": "GLOBAL",
|
|
708
|
+
"name": "flags-dir",
|
|
709
|
+
"summary": "Import flag values from a directory.",
|
|
710
|
+
"hasDynamicHelp": false,
|
|
711
|
+
"multiple": false,
|
|
712
|
+
"type": "option"
|
|
448
713
|
}
|
|
449
714
|
},
|
|
450
715
|
"hasDynamicHelp": false,
|
|
@@ -508,6 +773,14 @@
|
|
|
508
773
|
"allowNo": false,
|
|
509
774
|
"type": "boolean"
|
|
510
775
|
},
|
|
776
|
+
"flags-dir": {
|
|
777
|
+
"helpGroup": "GLOBAL",
|
|
778
|
+
"name": "flags-dir",
|
|
779
|
+
"summary": "Import flag values from a directory.",
|
|
780
|
+
"hasDynamicHelp": false,
|
|
781
|
+
"multiple": false,
|
|
782
|
+
"type": "option"
|
|
783
|
+
},
|
|
511
784
|
"properties-file": {
|
|
512
785
|
"char": "p",
|
|
513
786
|
"name": "properties-file",
|
|
@@ -578,6 +851,14 @@
|
|
|
578
851
|
"name": "json",
|
|
579
852
|
"allowNo": false,
|
|
580
853
|
"type": "boolean"
|
|
854
|
+
},
|
|
855
|
+
"flags-dir": {
|
|
856
|
+
"helpGroup": "GLOBAL",
|
|
857
|
+
"name": "flags-dir",
|
|
858
|
+
"summary": "Import flag values from a directory.",
|
|
859
|
+
"hasDynamicHelp": false,
|
|
860
|
+
"multiple": false,
|
|
861
|
+
"type": "option"
|
|
581
862
|
}
|
|
582
863
|
},
|
|
583
864
|
"hasDynamicHelp": false,
|
|
@@ -640,6 +921,14 @@
|
|
|
640
921
|
"name": "json",
|
|
641
922
|
"allowNo": false,
|
|
642
923
|
"type": "boolean"
|
|
924
|
+
},
|
|
925
|
+
"flags-dir": {
|
|
926
|
+
"helpGroup": "GLOBAL",
|
|
927
|
+
"name": "flags-dir",
|
|
928
|
+
"summary": "Import flag values from a directory.",
|
|
929
|
+
"hasDynamicHelp": false,
|
|
930
|
+
"multiple": false,
|
|
931
|
+
"type": "option"
|
|
643
932
|
}
|
|
644
933
|
},
|
|
645
934
|
"hasDynamicHelp": false,
|
|
@@ -706,6 +995,14 @@
|
|
|
706
995
|
"allowNo": false,
|
|
707
996
|
"type": "boolean"
|
|
708
997
|
},
|
|
998
|
+
"flags-dir": {
|
|
999
|
+
"helpGroup": "GLOBAL",
|
|
1000
|
+
"name": "flags-dir",
|
|
1001
|
+
"summary": "Import flag values from a directory.",
|
|
1002
|
+
"hasDynamicHelp": false,
|
|
1003
|
+
"multiple": false,
|
|
1004
|
+
"type": "option"
|
|
1005
|
+
},
|
|
709
1006
|
"project-path": {
|
|
710
1007
|
"char": "p",
|
|
711
1008
|
"name": "project-path",
|
|
@@ -1739,5 +2036,5 @@
|
|
|
1739
2036
|
]
|
|
1740
2037
|
}
|
|
1741
2038
|
},
|
|
1742
|
-
"version": "1.5.
|
|
2039
|
+
"version": "1.5.1"
|
|
1743
2040
|
}
|
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.
|
|
4
|
+
"version": "1.5.1",
|
|
5
|
+
"mcpName": "io.github.ProvarTesting/provar",
|
|
5
6
|
"license": "BSD-3-Clause",
|
|
6
7
|
"plugins": [
|
|
7
8
|
"@provartesting/provardx-plugins-automation",
|
|
@@ -9,20 +10,20 @@
|
|
|
9
10
|
],
|
|
10
11
|
"dependencies": {
|
|
11
12
|
"@modelcontextprotocol/sdk": "^1.8.0",
|
|
12
|
-
"@oclif/core": "^3.
|
|
13
|
-
"
|
|
14
|
-
"@provartesting/provardx-plugins-
|
|
15
|
-
"@provartesting/provardx-plugins-
|
|
16
|
-
"@
|
|
13
|
+
"@oclif/core": "^3.27.0",
|
|
14
|
+
"ajv": "^8.17.1",
|
|
15
|
+
"@provartesting/provardx-plugins-automation": "1.2.2",
|
|
16
|
+
"@provartesting/provardx-plugins-manager": "1.3.2",
|
|
17
|
+
"@provartesting/provardx-plugins-utils": "1.3.3",
|
|
18
|
+
"@salesforce/core": "^7.0.0",
|
|
17
19
|
"@salesforce/kit": "^3.0.15",
|
|
18
|
-
"@salesforce/sf-plugins-core": "^
|
|
20
|
+
"@salesforce/sf-plugins-core": "^9.0.0",
|
|
19
21
|
"@salesforce/ts-types": "^2.0.9",
|
|
20
22
|
"fast-xml-parser": "^4.3.6",
|
|
21
23
|
"zod": "^3.22.0"
|
|
22
24
|
},
|
|
23
25
|
"devDependencies": {
|
|
24
26
|
"@oclif/plugin-command-snapshot": "^5.0.2",
|
|
25
|
-
"yarn": "^1.22.22",
|
|
26
27
|
"@salesforce/cli-plugins-testkit": "^5.1.7",
|
|
27
28
|
"@salesforce/dev-scripts": "^8.3.0",
|
|
28
29
|
"@types/sinon": "^21.0.0",
|
|
@@ -36,9 +37,14 @@
|
|
|
36
37
|
"wireit": "^0.14.0"
|
|
37
38
|
},
|
|
38
39
|
"engines": {
|
|
39
|
-
"node": ">=18.0.0"
|
|
40
|
+
"node": ">=18.0.0 <25.0.0"
|
|
41
|
+
},
|
|
42
|
+
"bin": {
|
|
43
|
+
"provardx": "./bin/mcp-start.js",
|
|
44
|
+
"provardx-cli": "./bin/mcp-start.js"
|
|
40
45
|
},
|
|
41
46
|
"files": [
|
|
47
|
+
"/bin/mcp-start.js",
|
|
42
48
|
"/lib",
|
|
43
49
|
"/messages",
|
|
44
50
|
"/oclif.manifest.json"
|
|
@@ -92,6 +98,9 @@
|
|
|
92
98
|
}
|
|
93
99
|
}
|
|
94
100
|
},
|
|
101
|
+
"auth": {
|
|
102
|
+
"description": "Commands to manage Provar API key authentication."
|
|
103
|
+
},
|
|
95
104
|
"automation": {
|
|
96
105
|
"description": "Commands to interact with Provar Automation.",
|
|
97
106
|
"subtopics": {
|
|
@@ -124,9 +133,9 @@
|
|
|
124
133
|
"format": "wireit",
|
|
125
134
|
"lint": "wireit",
|
|
126
135
|
"postpack": "shx rm -f oclif.manifest.json",
|
|
127
|
-
"prepack": "sf-prepack",
|
|
136
|
+
"prepack": "node scripts/fetch-nitrox-packages.cjs && sf-prepack",
|
|
128
137
|
"test": "wireit",
|
|
129
|
-
"test:nuts": "nyc mocha \"**/*generate.nut.ts\" \"**/*permission.nut.ts\" \"**/*load.nut.ts\" \"**/*validate.nut.ts\" \"**/*set.nut.ts\" \"**/*get.nut.ts\" --slow 4500 --timeout 600000 --reporter mochawesome",
|
|
138
|
+
"test:nuts": "nyc mocha \"**/*generate.nut.ts\" \"**/*permission.nut.ts\" \"**/*load.nut.ts\" \"**/*validate.nut.ts\" \"**/*set.nut.ts\" \"**/*get.nut.ts\" \"**/*key.nut.ts\" \"**/*status.nut.ts\" \"**/*clear.nut.ts\" --slow 4500 --timeout 600000 --reporter mochawesome",
|
|
130
139
|
"test:only": "wireit",
|
|
131
140
|
"test:dev": "nyc mocha \"test/**/*.test.ts\"",
|
|
132
141
|
"test:watch": "mocha \"test/**/*.test.ts\" --watch --watch-files \"src/**/*.ts\" --watch-files \"test/**/*.ts\"",
|
|
@@ -143,10 +152,13 @@
|
|
|
143
152
|
]
|
|
144
153
|
},
|
|
145
154
|
"compile": {
|
|
146
|
-
"command": "tsc -p . --pretty --incremental && shx mkdir -p lib/mcp/rules && shx cp src/mcp/rules/*.json lib/mcp/rules/",
|
|
155
|
+
"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/ && shx cp docs/NITROX_COMPONENT_CATALOG.md lib/mcp/docs/ && shx cp docs/NITROX_CATALOG_SOURCE.json lib/mcp/docs/ && shx cp docs/PROVAR_TOOL_GUIDE.md lib/mcp/docs/",
|
|
147
156
|
"files": [
|
|
148
157
|
"src/**/*.ts",
|
|
149
158
|
"src/mcp/rules/*.json",
|
|
159
|
+
"docs/NITROX_COMPONENT_CATALOG.md",
|
|
160
|
+
"docs/NITROX_CATALOG_SOURCE.json",
|
|
161
|
+
"docs/PROVAR_TOOL_GUIDE.md",
|
|
150
162
|
"**/tsconfig.json",
|
|
151
163
|
"messages/**"
|
|
152
164
|
],
|
|
@@ -169,6 +181,9 @@
|
|
|
169
181
|
},
|
|
170
182
|
"lint": {
|
|
171
183
|
"command": "eslint src test --color --cache --cache-location .eslintcache",
|
|
184
|
+
"dependencies": [
|
|
185
|
+
"lint:script-names"
|
|
186
|
+
],
|
|
172
187
|
"files": [
|
|
173
188
|
"src/**/*.ts",
|
|
174
189
|
"test/**/*.ts",
|
|
@@ -178,6 +193,14 @@
|
|
|
178
193
|
],
|
|
179
194
|
"output": []
|
|
180
195
|
},
|
|
196
|
+
"lint:script-names": {
|
|
197
|
+
"command": "node scripts/lint-script-names.cjs",
|
|
198
|
+
"files": [
|
|
199
|
+
"scripts/lint-script-names.cjs",
|
|
200
|
+
"scripts/**/*"
|
|
201
|
+
],
|
|
202
|
+
"output": []
|
|
203
|
+
},
|
|
181
204
|
"test:compile": {
|
|
182
205
|
"command": "tsc -p \"./test\" --pretty",
|
|
183
206
|
"files": [
|