@provartesting/provardx-cli 1.5.0-dev.1 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +163 -13
- 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 +175 -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 +324 -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 +17 -0
- package/lib/mcp/server.js +151 -6
- package/lib/mcp/server.js.map +1 -1
- package/lib/mcp/tools/antTools.d.ts +15 -0
- package/lib/mcp/tools/antTools.js +347 -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 +332 -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 +172 -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 +56 -50
- package/lib/mcp/tools/defectTools.js.map +1 -1
- 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 +823 -0
- package/lib/mcp/tools/nitroXTools.js.map +1 -0
- package/lib/mcp/tools/pageObjectGenerate.js +132 -57
- package/lib/mcp/tools/pageObjectGenerate.js.map +1 -1
- package/lib/mcp/tools/pageObjectValidate.js +136 -46
- package/lib/mcp/tools/pageObjectValidate.js.map +1 -1
- package/lib/mcp/tools/projectInspect.js +51 -30
- package/lib/mcp/tools/projectInspect.js.map +1 -1
- package/lib/mcp/tools/projectValidateFromPath.js +70 -49
- package/lib/mcp/tools/projectValidateFromPath.js.map +1 -1
- package/lib/mcp/tools/propertiesTools.d.ts +2 -0
- package/lib/mcp/tools/propertiesTools.js +332 -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 +138 -0
- package/lib/mcp/tools/qualityHubApiTools.js.map +1 -0
- package/lib/mcp/tools/qualityHubTools.js +219 -70
- package/lib/mcp/tools/qualityHubTools.js.map +1 -1
- package/lib/mcp/tools/rcaTools.d.ts +3 -2
- package/lib/mcp/tools/rcaTools.js +189 -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 +226 -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 +226 -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 +307 -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 +299 -59
- package/lib/mcp/tools/testPlanTools.js.map +1 -1
- package/lib/mcp/tools/testPlanValidate.js +56 -18
- package/lib/mcp/tools/testPlanValidate.js.map +1 -1
- package/lib/mcp/tools/testSuiteValidate.js +37 -11
- 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/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 +299 -2
- package/package.json +23 -12
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
# ProvarDX MCP Tool Guide
|
|
2
|
+
|
|
3
|
+
Reference for selecting the right MCP tool for a given goal. Organised by what you're trying to accomplish, not by tool name.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## "I want to understand my project"
|
|
8
|
+
|
|
9
|
+
Start here with any new or unfamiliar project.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
provar_project_inspect { project_path }
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Returns: test case inventory, connection list, plan coverage, config files, ANT files. Run before any authoring or execution task.
|
|
16
|
+
|
|
17
|
+
To validate structure (not just inventory):
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
provar_project_validate { project_path }
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Returns: structure violations, broken callables, missing references.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## "I want to run tests"
|
|
28
|
+
|
|
29
|
+
### Locally (Provar Automation)
|
|
30
|
+
|
|
31
|
+
Fixed sequence — do not skip steps:
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
1. provar_automation_config_load { properties_path } ← required first
|
|
35
|
+
2. provar_automation_compile { project_path } ← required before run
|
|
36
|
+
3. provar_automation_testrun { properties_path, ... }
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
No properties file yet? Generate one first:
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
provar_properties_generate { output_path } ← required; path to write the .json file
|
|
43
|
+
{ project_path } ← optional; pre-fills projectPath field
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Then set the connection name:
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
provar_properties_set { file_path: "<output_path>", key: "connectionName", value: "<name>" }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Via Quality Hub (remote)
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
1. provar_qualityhub_connect { target_org }
|
|
56
|
+
2. provar_qualityhub_testrun { target_org, flags: ["--plan-name", "<name>"] }
|
|
57
|
+
3. provar_qualityhub_testrun_report { target_org, run_id } ← poll until done
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**When to use local vs Quality Hub:**
|
|
61
|
+
|
|
62
|
+
- Local: developer iteration, fast feedback, single machine
|
|
63
|
+
- Quality Hub: CI/CD, team-wide, managed environments, plan-level reporting
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## "I want to understand why tests failed"
|
|
68
|
+
|
|
69
|
+
```
|
|
70
|
+
1. provar_testrun_report_locate { project_path } ← find where results landed
|
|
71
|
+
2. provar_testrun_rca { project_path } ← required; results_path/run_index optional
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
`provar_testrun_rca` classifies each failure (auth, locator, assertion, data, etc.) and gives a recommendation per failure. Use `mode: "failures"` for the raw failure list without classification.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## "I want to write a new test"
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
1. provar_project_inspect { project_path } ← find coverage gaps first
|
|
82
|
+
2. provar_testcase_generate { project_path, name, ... }
|
|
83
|
+
3. provar_testcase_step_edit { test_case_path, ... } ← repeat per step
|
|
84
|
+
4. provar_testcase_validate { file_path } ← must pass before adding to plan
|
|
85
|
+
5. provar_testplan_add-instance { project_path, plan_name, test_case_path }
|
|
86
|
+
6. provar_testplan_validate { project_path, plan_name }
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## "I want to work with Salesforce metadata"
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
provar_automation_metadata_download { project_path, ... }
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
Run when: first setting up a project, fields/objects are missing from test steps, or after Salesforce org changes. If this fails with `[DOWNLOAD_ERROR]`, the credentials are the issue — re-authenticate the connection in Provar IDE.
|
|
98
|
+
|
|
99
|
+
---
|
|
100
|
+
|
|
101
|
+
## "I want to work with page objects"
|
|
102
|
+
|
|
103
|
+
```
|
|
104
|
+
provar_pageobject_generate { project_path, target_url, ... } ← generate
|
|
105
|
+
provar_pageobject_validate { file_path } ← validate first
|
|
106
|
+
provar_automation_compile { project_path } ← after any change
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Always validate before compile. Validation errors are easier to read than compile errors.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## "I want to work with LWC / Screen Flows (NitroX)"
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
provar_nitrox_discover { project_path } ← see what's already modeled
|
|
117
|
+
provar_nitrox_generate { project_path, ... } ← generate for a component
|
|
118
|
+
provar_nitrox_validate { file_path } ← always validate after generate
|
|
119
|
+
provar_nitrox_patch { file_path, ... } ← update existing model
|
|
120
|
+
provar_nitrox_validate { file_path } ← always validate after patch
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## "I want to manage configuration"
|
|
126
|
+
|
|
127
|
+
```
|
|
128
|
+
provar_properties_read { file_path } ← read current config
|
|
129
|
+
provar_properties_set { file_path, key, value } ← change a single value
|
|
130
|
+
provar_properties_validate { file_path } ← validate after changes
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
| Property | Controls |
|
|
134
|
+
| ---------------- | --------------------------------------------------------- |
|
|
135
|
+
| `provarHome` | Path to Provar Automation installation |
|
|
136
|
+
| `projectPath` | Path to the Provar project |
|
|
137
|
+
| `resultsPath` | Where test results are written |
|
|
138
|
+
| `connectionName` | Which Salesforce connection to use |
|
|
139
|
+
| `metadataLevel` | `Reload` / `Refresh` / `Reuse` — metadata cache behaviour |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
## "I want to check which orgs are available"
|
|
144
|
+
|
|
145
|
+
```
|
|
146
|
+
provar_connection_list { project_path }
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
Returns all connections in `.testproject`. Use the `name` field from each connection as `connectionName` in properties files.
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## "I want to create a defect for a failed test"
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
1. provar_qualityhub_testrun { target_org, ... } ← captures run_id from response
|
|
157
|
+
2. provar_testrun_rca { project_path } ← classify failures
|
|
158
|
+
3. provar_qualityhub_defect_create { run_id, target_org } ← run_id from step 1
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Requires Quality Hub to be connected (`provar_qualityhub_connect` first).
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## Tool Selection Anti-Patterns
|
|
166
|
+
|
|
167
|
+
**Don't run `testrun` without `config_load` first.** It fails with `MISSING_FILE` every time.
|
|
168
|
+
|
|
169
|
+
**Don't run `compile` on a broken page object.** Validate with `provar_pageobject_validate` first.
|
|
170
|
+
|
|
171
|
+
**Don't call `metadata_download` to fix an assertion failure.** Metadata download refreshes the field cache; it doesn't fix org data state.
|
|
172
|
+
|
|
173
|
+
**Don't guess the project path.** Confirm with the user or inspect a known parent directory.
|
|
174
|
+
|
|
175
|
+
**Don't parse raw testrun stdout for pass/fail.** Use `provar_testrun_rca` — raw output contains Java logging noise.
|
|
@@ -100,14 +100,23 @@ export async function validateKeyWithAlgas(licenseKey) {
|
|
|
100
100
|
});
|
|
101
101
|
// 401 means the Cognito token was rotated mid-session — clear the module-level cache
|
|
102
102
|
// and retry exactly once with a fresh token before surfacing an error.
|
|
103
|
+
// A new AbortController is created for the retry: the original controller's timer
|
|
104
|
+
// may have partially elapsed during the first request, leaving insufficient time.
|
|
103
105
|
if (res.status === 401) {
|
|
104
106
|
cachedToken = null;
|
|
105
107
|
tokenExpiresAt = 0;
|
|
106
|
-
const
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
const retryController = new AbortController();
|
|
109
|
+
const retryTimeout = setTimeout(() => retryController.abort(), TIMEOUT_MS);
|
|
110
|
+
try {
|
|
111
|
+
const refreshedToken = await getCognitoToken();
|
|
112
|
+
res = await fetch(`${TAG_BASE_URL}/${encodeURIComponent(licenseKey)}`, {
|
|
113
|
+
headers: { Authorization: `Bearer ${refreshedToken}` },
|
|
114
|
+
signal: retryController.signal,
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
clearTimeout(retryTimeout);
|
|
119
|
+
}
|
|
111
120
|
}
|
|
112
121
|
if (res.status === 404) {
|
|
113
122
|
// Key not found in the Provar system — definitively invalid
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"algasClient.js","sourceRoot":"","sources":["../../../src/mcp/licensing/algasClient.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"algasClient.js","sourceRoot":"","sources":["../../../src/mcp/licensing/algasClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,15 +20,3 @@ export declare function readIdeLicenses(): IdeLicenseState[];
|
|
|
20
20
|
* Returns null when no activated license is present.
|
|
21
21
|
*/
|
|
22
22
|
export declare function findActivatedIdeLicense(): IdeLicenseState | null;
|
|
23
|
-
/**
|
|
24
|
-
* Search all IDE .properties files for one whose decrypted licenseKey matches
|
|
25
|
-
* the supplied raw key string.
|
|
26
|
-
*
|
|
27
|
-
* Used to cross-reference an explicit --license-key against the IDE's already-
|
|
28
|
-
* validated activation state without making a fresh API call.
|
|
29
|
-
*
|
|
30
|
-
* Returns the matching IdeLicenseState (which may have activated=false if the
|
|
31
|
-
* IDE recorded the key but it isn't currently activated), or null when no file
|
|
32
|
-
* decrypts to the given key.
|
|
33
|
-
*/
|
|
34
|
-
export declare function findLicenseByDecryptedKey(rawKey: string): IdeLicenseState | null;
|
|
@@ -13,33 +13,11 @@
|
|
|
13
13
|
* - licenseStatus — Activated | NotActivated | Expired | Invalid | QuotaReached
|
|
14
14
|
* - licenseType — Fixed Seat | Floating | Trial | None
|
|
15
15
|
* - lastOnlineAvailabilityCheckUtc — epoch ms of last ALGAS check by the IDE
|
|
16
|
-
* - licenseKey — AES-128-ECB encrypted with key "provarautomation", Base64-encoded
|
|
17
|
-
*
|
|
18
|
-
* The licenseKey field is AES-128-ECB encrypted (LicenseSupport.KEY = "provarautomation").
|
|
19
|
-
* We decrypt it to allow cross-referencing an explicitly supplied --license-key against
|
|
20
|
-
* the IDE's already-validated license state without re-calling the licensing API.
|
|
21
16
|
*/
|
|
22
17
|
import fs from 'node:fs';
|
|
23
18
|
import path from 'node:path';
|
|
24
19
|
import os from 'node:os';
|
|
25
|
-
|
|
26
|
-
/** AES-128-ECB key used by Provar IDE to encrypt the licenseKey field. */
|
|
27
|
-
const AES_KEY = Buffer.from('provarautomation'); // 16 bytes ASCII
|
|
28
|
-
/**
|
|
29
|
-
* Decrypt an AES-128-ECB + PKCS5 encrypted, Base64-encoded licenseKey field.
|
|
30
|
-
* Returns the plaintext string, or null if decryption fails (wrong key / corrupt).
|
|
31
|
-
*/
|
|
32
|
-
function decryptLicenseKeyField(encryptedBase64) {
|
|
33
|
-
try {
|
|
34
|
-
const decipher = createDecipheriv('aes-128-ecb', AES_KEY, null);
|
|
35
|
-
const buf = Buffer.from(encryptedBase64, 'base64');
|
|
36
|
-
return Buffer.concat([decipher.update(buf), decipher.final()]).toString('utf-8');
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return null;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
/** Mirrors License4J's DEFAUT_LICENSE_FOLDER_PATH + PROVAR_USER_HOME. */
|
|
20
|
+
/** Mirrors License4J's DEFAULT_LICENSE_FOLDER_PATH + PROVAR_USER_HOME. */
|
|
43
21
|
function provarLicensesDir() {
|
|
44
22
|
const provarHome = process.env['PROVAR_HOME'] ?? path.join(os.homedir(), 'Provar');
|
|
45
23
|
return path.join(provarHome, '.licenses');
|
|
@@ -126,54 +104,4 @@ export function findActivatedIdeLicense() {
|
|
|
126
104
|
// Return the one with the most recent online check
|
|
127
105
|
return activated.sort((a, b) => b.lastOnlineCheckMs - a.lastOnlineCheckMs)[0];
|
|
128
106
|
}
|
|
129
|
-
/**
|
|
130
|
-
* Search all IDE .properties files for one whose decrypted licenseKey matches
|
|
131
|
-
* the supplied raw key string.
|
|
132
|
-
*
|
|
133
|
-
* Used to cross-reference an explicit --license-key against the IDE's already-
|
|
134
|
-
* validated activation state without making a fresh API call.
|
|
135
|
-
*
|
|
136
|
-
* Returns the matching IdeLicenseState (which may have activated=false if the
|
|
137
|
-
* IDE recorded the key but it isn't currently activated), or null when no file
|
|
138
|
-
* decrypts to the given key.
|
|
139
|
-
*/
|
|
140
|
-
export function findLicenseByDecryptedKey(rawKey) {
|
|
141
|
-
const dir = provarLicensesDir();
|
|
142
|
-
if (!fs.existsSync(dir))
|
|
143
|
-
return null;
|
|
144
|
-
let entries;
|
|
145
|
-
try {
|
|
146
|
-
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
147
|
-
}
|
|
148
|
-
catch {
|
|
149
|
-
return null;
|
|
150
|
-
}
|
|
151
|
-
for (const entry of entries) {
|
|
152
|
-
if (!entry.isFile() || !entry.name.endsWith('.properties'))
|
|
153
|
-
continue;
|
|
154
|
-
try {
|
|
155
|
-
const content = fs.readFileSync(path.join(dir, entry.name), 'utf-8');
|
|
156
|
-
const props = parseProperties(content);
|
|
157
|
-
const encryptedKey = props.get('licenseKey');
|
|
158
|
-
if (!encryptedKey)
|
|
159
|
-
continue;
|
|
160
|
-
const decrypted = decryptLicenseKeyField(encryptedKey);
|
|
161
|
-
if (decrypted !== rawKey)
|
|
162
|
-
continue;
|
|
163
|
-
const licenseStatus = props.get('licenseStatus') ?? '';
|
|
164
|
-
const licenseType = parseLicenseType(props.get('licenseType') ?? '');
|
|
165
|
-
const lastCheck = parseInt(props.get('lastOnlineAvailabilityCheckUtc') ?? '0', 10);
|
|
166
|
-
return {
|
|
167
|
-
name: entry.name.slice(0, -'.properties'.length),
|
|
168
|
-
licenseType,
|
|
169
|
-
activated: licenseStatus === 'Activated',
|
|
170
|
-
lastOnlineCheckMs: isNaN(lastCheck) ? 0 : lastCheck,
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
catch {
|
|
174
|
-
// Unreadable or corrupt file — skip
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
return null;
|
|
178
|
-
}
|
|
179
107
|
//# sourceMappingURL=ideDetection.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ideDetection.js","sourceRoot":"","sources":["../../../src/mcp/licensing/ideDetection.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH
|
|
1
|
+
{"version":3,"file":"ideDetection.js","sourceRoot":"","sources":["../../../src/mcp/licensing/ideDetection.ts"],"names":[],"mappings":"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"}
|
|
@@ -62,7 +62,13 @@ export function writeCacheEntry(entry) {
|
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
cache[entry.keyHash] = entry;
|
|
65
|
-
fs.writeFileSync(file, JSON.stringify(cache, null, 2), 'utf-8');
|
|
65
|
+
fs.writeFileSync(file, JSON.stringify(cache, null, 2), { encoding: 'utf-8', mode: 0o600 });
|
|
66
|
+
try {
|
|
67
|
+
fs.chmodSync(file, 0o600);
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Best-effort permission hardening; cache write itself already succeeded.
|
|
71
|
+
}
|
|
66
72
|
}
|
|
67
73
|
catch {
|
|
68
74
|
// Cache write failure is non-fatal; validation result still returned to caller.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"licenseCache.js","sourceRoot":"","sources":["../../../src/mcp/licensing/licenseCache.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAczC;;;;;;;;GAQG;AACH,SAAS,QAAQ;IACf,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IACnF,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AAC5C,CAAC;AACD,SAAS,SAAS;IAChB,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE,yBAAyB,CAAC,CAAC;AAC1D,CAAC;AAED,2FAA2F;AAC3F,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhD,wEAAwE;AACxE,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpD,6DAA6D;AAC7D,MAAM,UAAU,OAAO,CAAC,UAAkB;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACtC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAc,CAAC;QAC3C,OAAO,KAAK,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAiB;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,SAAS,EAAE,CAAC;QACzB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,KAAK,GAAc,EAAE,CAAC;QAC1B,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC;gBACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAc,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC;gBACP,KAAK,GAAG,EAAE,CAAC;YACb,CAAC;QACH,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;QAC7B,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"licenseCache.js","sourceRoot":"","sources":["../../../src/mcp/licensing/licenseCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,10 +10,10 @@ export interface LicenseValidationResult {
|
|
|
10
10
|
/**
|
|
11
11
|
* Validate the Provar license before starting the MCP server.
|
|
12
12
|
*
|
|
13
|
-
* Requires Provar Automation IDE to be installed with an activated
|
|
13
|
+
* Requires Provar Automation IDE to be installed with an activated license.
|
|
14
14
|
* We trust the IDE's own licenseStatus field — if it says "Activated" we
|
|
15
15
|
* accept it. The IDE is responsible for setting licenseStatus to "Expired"
|
|
16
|
-
* or "Invalid" when a
|
|
16
|
+
* or "Invalid" when a license lapses; we do not re-check timing ourselves.
|
|
17
17
|
*
|
|
18
18
|
* The result is cached so repeated starts within 2 hours skip the IDE file
|
|
19
19
|
* read entirely. The 48-hour grace window lets the MCP server keep running
|
|
@@ -22,7 +22,7 @@ export interface LicenseValidationResult {
|
|
|
22
22
|
*
|
|
23
23
|
* Validation flow:
|
|
24
24
|
* 1. MCP cache fresh (< 2h) → serve from cache, skip IDE read
|
|
25
|
-
* 2. Scan ~/Provar/.licenses/*.properties for an Activated
|
|
25
|
+
* 2. Scan ~/Provar/.licenses/*.properties for an Activated license
|
|
26
26
|
* 3. Found → write cache, accept (offlineGrace=false)
|
|
27
27
|
* 4. Not found but MCP cache within 48h grace → serve, offlineGrace=true
|
|
28
28
|
* 5. Not found, no usable cache → throw LICENSE_NOT_FOUND
|
|
@@ -16,10 +16,10 @@ const IDE_CACHE_KEY = '__ide_detection__';
|
|
|
16
16
|
/**
|
|
17
17
|
* Validate the Provar license before starting the MCP server.
|
|
18
18
|
*
|
|
19
|
-
* Requires Provar Automation IDE to be installed with an activated
|
|
19
|
+
* Requires Provar Automation IDE to be installed with an activated license.
|
|
20
20
|
* We trust the IDE's own licenseStatus field — if it says "Activated" we
|
|
21
21
|
* accept it. The IDE is responsible for setting licenseStatus to "Expired"
|
|
22
|
-
* or "Invalid" when a
|
|
22
|
+
* or "Invalid" when a license lapses; we do not re-check timing ourselves.
|
|
23
23
|
*
|
|
24
24
|
* The result is cached so repeated starts within 2 hours skip the IDE file
|
|
25
25
|
* read entirely. The 48-hour grace window lets the MCP server keep running
|
|
@@ -28,7 +28,7 @@ const IDE_CACHE_KEY = '__ide_detection__';
|
|
|
28
28
|
*
|
|
29
29
|
* Validation flow:
|
|
30
30
|
* 1. MCP cache fresh (< 2h) → serve from cache, skip IDE read
|
|
31
|
-
* 2. Scan ~/Provar/.licenses/*.properties for an Activated
|
|
31
|
+
* 2. Scan ~/Provar/.licenses/*.properties for an Activated license
|
|
32
32
|
* 3. Found → write cache, accept (offlineGrace=false)
|
|
33
33
|
* 4. Not found but MCP cache within 48h grace → serve, offlineGrace=true
|
|
34
34
|
* 5. Not found, no usable cache → throw LICENSE_NOT_FOUND
|
|
@@ -81,6 +81,13 @@ function validateViaIdeDetection() {
|
|
|
81
81
|
'Activate a license in Provar Automation IDE to use the MCP server.\n' +
|
|
82
82
|
'Licenses are read from: ~/Provar/.licenses/');
|
|
83
83
|
}
|
|
84
|
+
// Warn when the IDE's own ALGAS check is stale (> 7 days) — the IDE may not have been
|
|
85
|
+
// opened recently enough to refresh the activation status from the licensing server.
|
|
86
|
+
const IDE_FRESHNESS_WARN_MS = 7 * 24 * 60 * 60 * 1000;
|
|
87
|
+
if (ideState.lastOnlineCheckMs > 0 && Date.now() - ideState.lastOnlineCheckMs > IDE_FRESHNESS_WARN_MS) {
|
|
88
|
+
const ageDays = Math.round((Date.now() - ideState.lastOnlineCheckMs) / (24 * 60 * 60 * 1000));
|
|
89
|
+
log('warn', 'licenseValidator: IDE license online check is stale — open Provar IDE to refresh', { ageDays });
|
|
90
|
+
}
|
|
84
91
|
// 3. Valid — write to MCP cache so next start within 2h skips this read
|
|
85
92
|
const entry = {
|
|
86
93
|
keyHash,
|
|
@@ -89,7 +96,7 @@ function validateViaIdeDetection() {
|
|
|
89
96
|
checkedAt: Date.now(),
|
|
90
97
|
};
|
|
91
98
|
writeCacheEntry(entry);
|
|
92
|
-
log('info', 'licenseValidator: IDE
|
|
99
|
+
log('info', 'licenseValidator: IDE license validated and cached', {
|
|
93
100
|
name: ideState.name,
|
|
94
101
|
licenseType: ideState.licenseType,
|
|
95
102
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"licenseValidator.js","sourceRoot":"","sources":["../../../src/mcp/licensing/licenseValidator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"licenseValidator.js","sourceRoot":"","sources":["../../../src/mcp/licensing/licenseValidator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAC;AAC3C,OAAO,EACL,OAAO,EACP,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,uBAAuB,GAGxB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD;;;GAGG;AACH,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAW1C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,eAAe;IAC7B,sCAAsC;IACtC,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QACpC,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED,2FAA2F;IAC3F,6FAA6F;IAC7F,qDAAqD;IACrD,MAAM,aAAa,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC;SACnE,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,MAAM,EAAE,8EAA8E,CAAC,CAAC;QAC5F,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7G,CAAC;IAED,IAAI,CAAC;QACH,OAAO,OAAO,CAAC,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,OAAO,CAAC,MAAM,CAAC,GAAY,CAAC,CAAC;IACtC,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,SAAS,uBAAuB;IAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAEvC,0EAA0E;IAC1E,IAAI,MAAM,IAAI,iBAAiB,CAAC,MAAM,CAAC,EAAE,CAAC;QACxC,GAAG,CAAC,MAAM,EAAE,mDAAmD,EAAE,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACtG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAChG,CAAC;IAED,oCAAoC;IACpC,MAAM,QAAQ,GAAG,uBAAuB,EAAE,CAAC;IAE3C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,2DAA2D;QAC3D,IAAI,MAAM,IAAI,uBAAuB,CAAC,MAAM,CAAC,EAAE,CAAC;YAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;YAChF,GAAG,CAAC,MAAM,EAAE,2EAA2E,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;YACvG,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;QAC/F,CAAC;QACD,MAAM,IAAI,YAAY,CACpB,mBAAmB,EACnB,sDAAsD;YACpD,sEAAsE;YACtE,6CAA6C,CAChD,CAAC;IACJ,CAAC;IAED,sFAAsF;IACtF,qFAAqF;IACrF,MAAM,qBAAqB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;IACtD,IAAI,QAAQ,CAAC,iBAAiB,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,iBAAiB,GAAG,qBAAqB,EAAE,CAAC;QACtG,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC;QAC9F,GAAG,CAAC,MAAM,EAAE,kFAAkF,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IAC/G,CAAC;IAED,wEAAwE;IACxE,MAAM,KAAK,GAAe;QACxB,OAAO;QACP,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;KACtB,CAAC;IACF,eAAe,CAAC,KAAK,CAAC,CAAC;IAEvB,GAAG,CAAC,MAAM,EAAE,oDAAoD,EAAE;QAChE,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;KAClC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,IAAI;QACX,WAAW,EAAE,QAAQ,CAAC,WAAW;QACjC,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,KAAK;KACpB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
export declare function registerOnboardingPrompt(server: McpServer): void;
|
|
3
|
+
export declare function registerTroubleshootPrompt(server: McpServer): void;
|
|
4
|
+
export declare function registerOrchestrationPrompt(server: McpServer): void;
|