@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.
Files changed (129) hide show
  1. package/README.md +163 -13
  2. package/bin/mcp-start.js +74 -0
  3. package/lib/commands/provar/auth/clear.d.ts +7 -0
  4. package/lib/commands/provar/auth/clear.js +36 -0
  5. package/lib/commands/provar/auth/clear.js.map +1 -0
  6. package/lib/commands/provar/auth/login.d.ts +10 -0
  7. package/lib/commands/provar/auth/login.js +90 -0
  8. package/lib/commands/provar/auth/login.js.map +1 -0
  9. package/lib/commands/provar/auth/rotate.d.ts +7 -0
  10. package/lib/commands/provar/auth/rotate.js +42 -0
  11. package/lib/commands/provar/auth/rotate.js.map +1 -0
  12. package/lib/commands/provar/auth/status.d.ts +7 -0
  13. package/lib/commands/provar/auth/status.js +107 -0
  14. package/lib/commands/provar/auth/status.js.map +1 -0
  15. package/lib/commands/provar/mcp/start.d.ts +2 -0
  16. package/lib/commands/provar/mcp/start.js +14 -1
  17. package/lib/commands/provar/mcp/start.js.map +1 -1
  18. package/lib/mcp/docs/NITROX_CATALOG_SOURCE.json +6 -0
  19. package/lib/mcp/docs/NITROX_COMPONENT_CATALOG.md +2001 -0
  20. package/lib/mcp/docs/PROVAR_TEST_STEP_REFERENCE.md +1430 -0
  21. package/lib/mcp/docs/PROVAR_TOOL_GUIDE.md +175 -0
  22. package/lib/mcp/licensing/algasClient.js +14 -5
  23. package/lib/mcp/licensing/algasClient.js.map +1 -1
  24. package/lib/mcp/licensing/ideDetection.d.ts +0 -12
  25. package/lib/mcp/licensing/ideDetection.js +1 -73
  26. package/lib/mcp/licensing/ideDetection.js.map +1 -1
  27. package/lib/mcp/licensing/licenseCache.js +7 -1
  28. package/lib/mcp/licensing/licenseCache.js.map +1 -1
  29. package/lib/mcp/licensing/licenseValidator.d.ts +3 -3
  30. package/lib/mcp/licensing/licenseValidator.js +11 -4
  31. package/lib/mcp/licensing/licenseValidator.js.map +1 -1
  32. package/lib/mcp/prompts/guidePrompts.d.ts +4 -0
  33. package/lib/mcp/prompts/guidePrompts.js +324 -0
  34. package/lib/mcp/prompts/guidePrompts.js.map +1 -0
  35. package/lib/mcp/prompts/index.d.ts +2 -0
  36. package/lib/mcp/prompts/index.js +23 -0
  37. package/lib/mcp/prompts/index.js.map +1 -0
  38. package/lib/mcp/prompts/loopPrompts.d.ts +6 -0
  39. package/lib/mcp/prompts/loopPrompts.js +435 -0
  40. package/lib/mcp/prompts/loopPrompts.js.map +1 -0
  41. package/lib/mcp/prompts/migrationPrompts.d.ts +4 -0
  42. package/lib/mcp/prompts/migrationPrompts.js +207 -0
  43. package/lib/mcp/prompts/migrationPrompts.js.map +1 -0
  44. package/lib/mcp/rules/provar_best_practices_rules.json +256 -544
  45. package/lib/mcp/security/pathPolicy.d.ts +5 -0
  46. package/lib/mcp/security/pathPolicy.js +58 -3
  47. package/lib/mcp/security/pathPolicy.js.map +1 -1
  48. package/lib/mcp/server.d.ts +17 -0
  49. package/lib/mcp/server.js +151 -6
  50. package/lib/mcp/server.js.map +1 -1
  51. package/lib/mcp/tools/antTools.d.ts +15 -0
  52. package/lib/mcp/tools/antTools.js +347 -170
  53. package/lib/mcp/tools/antTools.js.map +1 -1
  54. package/lib/mcp/tools/automationTools.d.ts +18 -8
  55. package/lib/mcp/tools/automationTools.js +332 -176
  56. package/lib/mcp/tools/automationTools.js.map +1 -1
  57. package/lib/mcp/tools/bestPracticesEngine.js +161 -23
  58. package/lib/mcp/tools/bestPracticesEngine.js.map +1 -1
  59. package/lib/mcp/tools/connectionTools.d.ts +4 -0
  60. package/lib/mcp/tools/connectionTools.js +172 -0
  61. package/lib/mcp/tools/connectionTools.js.map +1 -0
  62. package/lib/mcp/tools/defectTools.d.ts +1 -1
  63. package/lib/mcp/tools/defectTools.js +56 -50
  64. package/lib/mcp/tools/defectTools.js.map +1 -1
  65. package/lib/mcp/tools/hierarchyValidate.d.ts +1 -1
  66. package/lib/mcp/tools/hierarchyValidate.js +127 -42
  67. package/lib/mcp/tools/hierarchyValidate.js.map +1 -1
  68. package/lib/mcp/tools/nitroXTools.d.ts +23 -0
  69. package/lib/mcp/tools/nitroXTools.js +823 -0
  70. package/lib/mcp/tools/nitroXTools.js.map +1 -0
  71. package/lib/mcp/tools/pageObjectGenerate.js +132 -57
  72. package/lib/mcp/tools/pageObjectGenerate.js.map +1 -1
  73. package/lib/mcp/tools/pageObjectValidate.js +136 -46
  74. package/lib/mcp/tools/pageObjectValidate.js.map +1 -1
  75. package/lib/mcp/tools/projectInspect.js +51 -30
  76. package/lib/mcp/tools/projectInspect.js.map +1 -1
  77. package/lib/mcp/tools/projectValidateFromPath.js +70 -49
  78. package/lib/mcp/tools/projectValidateFromPath.js.map +1 -1
  79. package/lib/mcp/tools/propertiesTools.d.ts +2 -0
  80. package/lib/mcp/tools/propertiesTools.js +332 -78
  81. package/lib/mcp/tools/propertiesTools.js.map +1 -1
  82. package/lib/mcp/tools/qualityHubApiTools.d.ts +3 -0
  83. package/lib/mcp/tools/qualityHubApiTools.js +138 -0
  84. package/lib/mcp/tools/qualityHubApiTools.js.map +1 -0
  85. package/lib/mcp/tools/qualityHubTools.js +219 -70
  86. package/lib/mcp/tools/qualityHubTools.js.map +1 -1
  87. package/lib/mcp/tools/rcaTools.d.ts +3 -2
  88. package/lib/mcp/tools/rcaTools.js +189 -56
  89. package/lib/mcp/tools/rcaTools.js.map +1 -1
  90. package/lib/mcp/tools/sfSpawn.d.ts +25 -3
  91. package/lib/mcp/tools/sfSpawn.js +154 -6
  92. package/lib/mcp/tools/sfSpawn.js.map +1 -1
  93. package/lib/mcp/tools/testCaseGenerate.js +226 -78
  94. package/lib/mcp/tools/testCaseGenerate.js.map +1 -1
  95. package/lib/mcp/tools/testCaseStepTools.d.ts +4 -0
  96. package/lib/mcp/tools/testCaseStepTools.js +226 -0
  97. package/lib/mcp/tools/testCaseStepTools.js.map +1 -0
  98. package/lib/mcp/tools/testCaseValidate.d.ts +11 -0
  99. package/lib/mcp/tools/testCaseValidate.js +307 -46
  100. package/lib/mcp/tools/testCaseValidate.js.map +1 -1
  101. package/lib/mcp/tools/testPlanTools.d.ts +1 -0
  102. package/lib/mcp/tools/testPlanTools.js +299 -59
  103. package/lib/mcp/tools/testPlanTools.js.map +1 -1
  104. package/lib/mcp/tools/testPlanValidate.js +56 -18
  105. package/lib/mcp/tools/testPlanValidate.js.map +1 -1
  106. package/lib/mcp/tools/testSuiteValidate.js +37 -11
  107. package/lib/mcp/tools/testSuiteValidate.js.map +1 -1
  108. package/lib/mcp/update/updateChecker.d.ts +14 -0
  109. package/lib/mcp/update/updateChecker.js +228 -0
  110. package/lib/mcp/update/updateChecker.js.map +1 -0
  111. package/lib/services/auth/credentials.d.ts +21 -0
  112. package/lib/services/auth/credentials.js +75 -0
  113. package/lib/services/auth/credentials.js.map +1 -0
  114. package/lib/services/auth/loginFlow.d.ts +68 -0
  115. package/lib/services/auth/loginFlow.js +216 -0
  116. package/lib/services/auth/loginFlow.js.map +1 -0
  117. package/lib/services/projectValidation.d.ts +5 -2
  118. package/lib/services/projectValidation.js +83 -31
  119. package/lib/services/projectValidation.js.map +1 -1
  120. package/lib/services/qualityHub/client.d.ts +161 -0
  121. package/lib/services/qualityHub/client.js +226 -0
  122. package/lib/services/qualityHub/client.js.map +1 -0
  123. package/messages/sf.provar.auth.clear.md +16 -0
  124. package/messages/sf.provar.auth.login.md +31 -0
  125. package/messages/sf.provar.auth.rotate.md +23 -0
  126. package/messages/sf.provar.auth.status.md +16 -0
  127. package/messages/sf.provar.mcp.start.md +83 -48
  128. package/oclif.manifest.json +299 -2
  129. package/package.json +23 -12
@@ -49,24 +49,147 @@ function buildPlanItemXml(guid) {
49
49
  '</testPlan>',
50
50
  ].join('\n');
51
51
  }
52
- // ── provar.testplan.add-instance ──────────────────────────────────────────────
52
+ // ── provar_testplan_create ────────────────────────────────────────────────────
53
+ export function registerTestPlanCreate(server, config) {
54
+ server.registerTool('provar_testplan_create', {
55
+ title: 'Create Test Plan',
56
+ description: [
57
+ 'Create a new Provar test plan: makes the plans/{plan_name}/ directory and writes the root .planitem file.',
58
+ 'Use this before provar_testplan_create-suite or provar_testplan_add-instance, which both require the plan to already exist.',
59
+ 'Returns the guid assigned to the new plan, the plan directory path, and the .planitem path written.',
60
+ ].join(' '),
61
+ inputSchema: {
62
+ project_path: z
63
+ .string()
64
+ .describe('Absolute path to the Provar project root (must contain a .testproject file)'),
65
+ plan_name: z.string().describe('Name of the new test plan (becomes the directory name under plans/)'),
66
+ overwrite: z
67
+ .boolean()
68
+ .optional()
69
+ .default(false)
70
+ .describe('Overwrite the .planitem file if the plan directory already exists (default: false)'),
71
+ dry_run: z
72
+ .boolean()
73
+ .optional()
74
+ .default(false)
75
+ .describe('Return what would be created without writing to disk (default: false)'),
76
+ },
77
+ }, ({ project_path, plan_name, overwrite, dry_run }) => {
78
+ const requestId = makeRequestId();
79
+ log('info', 'provar_testplan_create', { requestId, project_path, plan_name });
80
+ try {
81
+ assertPathAllowed(project_path, config.allowedPaths);
82
+ const projectRoot = path.resolve(project_path);
83
+ const testProjectFiles = fs.existsSync(projectRoot)
84
+ ? fs.readdirSync(projectRoot).filter((f) => f.endsWith('.testproject'))
85
+ : [];
86
+ if (testProjectFiles.length === 0) {
87
+ return {
88
+ isError: true,
89
+ content: [
90
+ {
91
+ type: 'text',
92
+ text: JSON.stringify(makeError('NOT_A_PROJECT', `No .testproject file found in ${projectRoot}`, requestId)),
93
+ },
94
+ ],
95
+ };
96
+ }
97
+ if (!/^[A-Za-z0-9][\w\- ]*$/.test(plan_name)) {
98
+ return {
99
+ isError: true,
100
+ content: [
101
+ {
102
+ type: 'text',
103
+ text: JSON.stringify(makeError('INVALID_PLAN_NAME', `plan_name must start with a letter or digit and contain only letters, digits, underscores, hyphens, or spaces: "${plan_name}"`, requestId)),
104
+ },
105
+ ],
106
+ };
107
+ }
108
+ const planDir = path.join(projectRoot, 'plans', plan_name);
109
+ assertPathAllowed(planDir, config.allowedPaths);
110
+ const planItemPath = path.join(planDir, '.planitem');
111
+ if (!overwrite && fs.existsSync(planItemPath)) {
112
+ return {
113
+ isError: true,
114
+ content: [
115
+ {
116
+ type: 'text',
117
+ text: JSON.stringify(makeError('PLAN_EXISTS', `Plan already exists: ${planItemPath}. Set overwrite: true to replace the .planitem file.`, requestId)),
118
+ },
119
+ ],
120
+ };
121
+ }
122
+ const guid = randomUUID();
123
+ const xmlContent = buildPlanItemXml(guid);
124
+ if (!dry_run) {
125
+ fs.mkdirSync(planDir, { recursive: true });
126
+ fs.writeFileSync(planItemPath, xmlContent, 'utf-8');
127
+ }
128
+ const response = {
129
+ requestId,
130
+ plan_dir: planDir,
131
+ planitem_path: planItemPath,
132
+ guid,
133
+ dry_run: dry_run ?? false,
134
+ created: !dry_run,
135
+ next_steps: dry_run
136
+ ? 'Review the plan structure, then call provar_testplan_create with dry_run=false to write to disk.'
137
+ : `Plan created at ${planDir}. Use provar_testplan_create-suite to add suites, then provar_testplan_add-instance to wire test cases into the plan.`,
138
+ };
139
+ return {
140
+ content: [{ type: 'text', text: JSON.stringify(response) }],
141
+ structuredContent: response,
142
+ };
143
+ }
144
+ catch (err) {
145
+ const error = err;
146
+ return {
147
+ isError: true,
148
+ content: [
149
+ {
150
+ type: 'text',
151
+ text: JSON.stringify(makeError(error instanceof PathPolicyError ? error.code : error.code ?? 'CREATE_PLAN_ERROR', error.message, requestId)),
152
+ },
153
+ ],
154
+ };
155
+ }
156
+ });
157
+ }
158
+ // ── provar_testplan_add-instance ──────────────────────────────────────────────
53
159
  export function registerTestPlanAddInstance(server, config) {
54
- server.tool('provar.testplan.add-instance', [
55
- 'Add a .testinstance file to an existing Provar test plan suite directory.',
56
- 'The plan directory and suite directory must already exist.',
57
- 'test_case_path is relative to the project root (e.g. "tests/MyTest.testcase").',
58
- 'suite_path is the path within the plan (e.g. "MySuite" or "MySuite/SubSuite").',
59
- 'Returns the guid assigned to the new instance and the path where it was written.',
60
- ].join(' '), {
61
- project_path: z.string().describe('Absolute path to the Provar project root'),
62
- test_case_path: z.string().describe('Path to the .testcase file, relative to project root (e.g. "tests/MyTest.testcase")'),
63
- plan_name: z.string().describe('Name of the test plan (directory under plans/)'),
64
- suite_path: z.string().optional().describe('Path within the plan to place the instance (e.g. "MySuite" or "MySuite/SubSuite")'),
65
- overwrite: z.boolean().optional().default(false).describe('Overwrite the .testinstance file if it already exists (default: false)'),
66
- dry_run: z.boolean().optional().default(false).describe('Return what would be written without writing to disk (default: false)'),
160
+ server.registerTool('provar_testplan_add-instance', {
161
+ title: 'Add Test Plan Instance',
162
+ description: [
163
+ 'Add a .testinstance file to an existing Provar test plan suite directory.',
164
+ 'The plan directory and suite directory must already exist.',
165
+ 'test_case_path is relative to the project root (e.g. "tests/MyTest.testcase").',
166
+ 'suite_path is the path within the plan (e.g. "MySuite" or "MySuite/SubSuite").',
167
+ 'Returns the guid assigned to the new instance and the path where it was written.',
168
+ ].join(' '),
169
+ inputSchema: {
170
+ project_path: z.string().describe('Absolute path to the Provar project root'),
171
+ test_case_path: z
172
+ .string()
173
+ .describe('Path to the .testcase file, relative to project root (e.g. "tests/MyTest.testcase")'),
174
+ plan_name: z.string().describe('Name of the test plan (directory under plans/)'),
175
+ suite_path: z
176
+ .string()
177
+ .optional()
178
+ .describe('Path within the plan to place the instance (e.g. "MySuite" or "MySuite/SubSuite")'),
179
+ overwrite: z
180
+ .boolean()
181
+ .optional()
182
+ .default(false)
183
+ .describe('Overwrite the .testinstance file if it already exists (default: false)'),
184
+ dry_run: z
185
+ .boolean()
186
+ .optional()
187
+ .default(false)
188
+ .describe('Return what would be written without writing to disk (default: false)'),
189
+ },
67
190
  }, ({ project_path, test_case_path, plan_name, suite_path, overwrite, dry_run }) => {
68
191
  const requestId = makeRequestId();
69
- log('info', 'provar.testplan.add-instance', { requestId, project_path, test_case_path, plan_name });
192
+ log('info', 'provar_testplan_add-instance', { requestId, project_path, test_case_path, plan_name });
70
193
  try {
71
194
  assertPathAllowed(project_path, config.allowedPaths);
72
195
  const projectRoot = path.resolve(project_path);
@@ -77,21 +200,54 @@ export function registerTestPlanAddInstance(server, config) {
77
200
  if (testProjectFiles.length === 0) {
78
201
  return {
79
202
  isError: true,
80
- content: [{ type: 'text', text: JSON.stringify(makeError('NOT_A_PROJECT', `No .testproject file found in ${projectRoot}`, requestId)) }],
203
+ content: [
204
+ {
205
+ type: 'text',
206
+ text: JSON.stringify(makeError('NOT_A_PROJECT', `No .testproject file found in ${projectRoot}`, requestId)),
207
+ },
208
+ ],
81
209
  };
82
210
  }
83
- // Resolve testcase absolute path
84
- const absoluteTestCasePath = path.join(projectRoot, test_case_path);
211
+ // Reject absolute test_case_path: path.join(root, absPath) ignores root on Windows (drive-letter paths)
212
+ // and Unix, allowing the caller to escape the project directory entirely.
213
+ if (path.isAbsolute(test_case_path)) {
214
+ return {
215
+ isError: true,
216
+ content: [
217
+ {
218
+ type: 'text',
219
+ text: JSON.stringify(makeError('INVALID_PATH', 'test_case_path must be relative to project_path, not absolute', requestId)),
220
+ },
221
+ ],
222
+ };
223
+ }
224
+ // Resolve testcase absolute path — normalize backslashes so Windows-style paths work on macOS/Linux
225
+ const normalizedTestCasePath = toForwardSlashes(test_case_path);
226
+ if (normalizedTestCasePath.split('/').some((seg) => seg === '..')) {
227
+ throw new PathPolicyError('PATH_TRAVERSAL', `Path traversal detected in test_case_path: ${test_case_path}`);
228
+ }
229
+ const absoluteTestCasePath = path.join(projectRoot, normalizedTestCasePath);
230
+ assertPathAllowed(absoluteTestCasePath, config.allowedPaths);
85
231
  if (!fs.existsSync(absoluteTestCasePath)) {
86
232
  return {
87
233
  isError: true,
88
- content: [{ type: 'text', text: JSON.stringify(makeError('FILE_NOT_FOUND', `Test case not found: ${absoluteTestCasePath}`, requestId)) }],
234
+ content: [
235
+ {
236
+ type: 'text',
237
+ text: JSON.stringify(makeError('FILE_NOT_FOUND', `Test case not found: ${absoluteTestCasePath}`, requestId)),
238
+ },
239
+ ],
89
240
  };
90
241
  }
91
- if (!test_case_path.endsWith('.testcase')) {
242
+ if (!normalizedTestCasePath.endsWith('.testcase')) {
92
243
  return {
93
244
  isError: true,
94
- content: [{ type: 'text', text: JSON.stringify(makeError('INVALID_PATH', 'test_case_path must end with .testcase', requestId)) }],
245
+ content: [
246
+ {
247
+ type: 'text',
248
+ text: JSON.stringify(makeError('INVALID_PATH', 'test_case_path must end with .testcase', requestId)),
249
+ },
250
+ ],
95
251
  };
96
252
  }
97
253
  // Read testcase XML and extract testCaseId
@@ -100,7 +256,12 @@ export function registerTestPlanAddInstance(server, config) {
100
256
  if (!testCaseId) {
101
257
  return {
102
258
  isError: true,
103
- content: [{ type: 'text', text: JSON.stringify(makeError('NO_TEST_CASE_ID', `Cannot extract registryId, id, or guid from ${absoluteTestCasePath}`, requestId)) }],
259
+ content: [
260
+ {
261
+ type: 'text',
262
+ text: JSON.stringify(makeError('NO_TEST_CASE_ID', `Cannot extract registryId, id, or guid from ${absoluteTestCasePath}`, requestId)),
263
+ },
264
+ ],
104
265
  };
105
266
  }
106
267
  // Determine instance directory
@@ -111,21 +272,30 @@ export function registerTestPlanAddInstance(server, config) {
111
272
  if (!fs.existsSync(instanceDir)) {
112
273
  return {
113
274
  isError: true,
114
- content: [{ type: 'text', text: JSON.stringify(makeError('DIR_NOT_FOUND', `Suite directory does not exist: ${instanceDir}. Create it with provar.testplan.create-suite first.`, requestId)) }],
275
+ content: [
276
+ {
277
+ type: 'text',
278
+ text: JSON.stringify(makeError('DIR_NOT_FOUND', `Suite directory does not exist: ${instanceDir}. Create it with provar_testplan_create-suite first.`, requestId)),
279
+ },
280
+ ],
115
281
  };
116
282
  }
117
283
  // Determine filename and full path
118
- const instanceFileName = path.basename(test_case_path, '.testcase') + '.testinstance';
284
+ const instanceFileName = path.basename(normalizedTestCasePath, '.testcase') + '.testinstance';
119
285
  const instanceFilePath = path.join(instanceDir, instanceFileName);
120
286
  if (!overwrite && fs.existsSync(instanceFilePath)) {
121
287
  return {
122
288
  isError: true,
123
- content: [{ type: 'text', text: JSON.stringify(makeError('FILE_EXISTS', `Instance file already exists: ${instanceFilePath}. Set overwrite: true to replace it.`, requestId)) }],
289
+ content: [
290
+ {
291
+ type: 'text',
292
+ text: JSON.stringify(makeError('FILE_EXISTS', `Instance file already exists: ${instanceFilePath}. Set overwrite: true to replace it.`, requestId)),
293
+ },
294
+ ],
124
295
  };
125
296
  }
126
297
  // Build XML
127
298
  const guid = randomUUID();
128
- const normalizedTestCasePath = toForwardSlashes(test_case_path);
129
299
  const xmlContent = buildTestInstanceXml(guid, testCaseId, normalizedTestCasePath);
130
300
  if (!dry_run) {
131
301
  fs.writeFileSync(instanceFilePath, xmlContent, 'utf-8');
@@ -148,27 +318,43 @@ export function registerTestPlanAddInstance(server, config) {
148
318
  const error = err;
149
319
  return {
150
320
  isError: true,
151
- content: [{ type: 'text', text: JSON.stringify(makeError(error instanceof PathPolicyError ? error.code : (error.code ?? 'ADD_INSTANCE_ERROR'), error.message, requestId)) }],
321
+ content: [
322
+ {
323
+ type: 'text',
324
+ text: JSON.stringify(makeError(error instanceof PathPolicyError ? error.code : error.code ?? 'ADD_INSTANCE_ERROR', error.message, requestId)),
325
+ },
326
+ ],
152
327
  };
153
328
  }
154
329
  });
155
330
  }
156
- // ── provar.testplan.create-suite ──────────────────────────────────────────────
331
+ // ── provar_testplan_create-suite ──────────────────────────────────────────────
157
332
  export function registerTestPlanCreateSuite(server, config) {
158
- server.tool('provar.testplan.create-suite', [
159
- 'Create a new suite directory inside a Provar test plan.',
160
- 'The plan directory must already exist with a .planitem file at its root.',
161
- 'Writes a new .planitem file into the created suite directory.',
162
- 'Returns the guid assigned to the new suite.',
163
- ].join(' '), {
164
- project_path: z.string().describe('Absolute path to the Provar project root'),
165
- plan_name: z.string().describe('Name of the test plan (directory under plans/)'),
166
- suite_name: z.string().describe('Name of the new suite directory to create'),
167
- parent_suite_path: z.string().optional().describe('Path of the parent suite within the plan (e.g. "MySuite"). Omit to create at plan root.'),
168
- dry_run: z.boolean().optional().default(false).describe('Return what would be created without writing to disk (default: false)'),
333
+ server.registerTool('provar_testplan_create-suite', {
334
+ title: 'Create Test Plan Suite',
335
+ description: [
336
+ 'Create a new suite directory inside a Provar test plan.',
337
+ 'The plan directory must already exist with a .planitem file at its root.',
338
+ 'Writes a new .planitem file into the created suite directory.',
339
+ 'Returns the guid assigned to the new suite.',
340
+ ].join(' '),
341
+ inputSchema: {
342
+ project_path: z.string().describe('Absolute path to the Provar project root'),
343
+ plan_name: z.string().describe('Name of the test plan (directory under plans/)'),
344
+ suite_name: z.string().describe('Name of the new suite directory to create'),
345
+ parent_suite_path: z
346
+ .string()
347
+ .optional()
348
+ .describe('Path of the parent suite within the plan (e.g. "MySuite"). Omit to create at plan root.'),
349
+ dry_run: z
350
+ .boolean()
351
+ .optional()
352
+ .default(false)
353
+ .describe('Return what would be created without writing to disk (default: false)'),
354
+ },
169
355
  }, ({ project_path, plan_name, suite_name, parent_suite_path, dry_run }) => {
170
356
  const requestId = makeRequestId();
171
- log('info', 'provar.testplan.create-suite', { requestId, project_path, plan_name, suite_name });
357
+ log('info', 'provar_testplan_create-suite', { requestId, project_path, plan_name, suite_name });
172
358
  try {
173
359
  assertPathAllowed(project_path, config.allowedPaths);
174
360
  const projectRoot = path.resolve(project_path);
@@ -179,7 +365,12 @@ export function registerTestPlanCreateSuite(server, config) {
179
365
  if (testProjectFiles.length === 0) {
180
366
  return {
181
367
  isError: true,
182
- content: [{ type: 'text', text: JSON.stringify(makeError('NOT_A_PROJECT', `No .testproject file found in ${projectRoot}`, requestId)) }],
368
+ content: [
369
+ {
370
+ type: 'text',
371
+ text: JSON.stringify(makeError('NOT_A_PROJECT', `No .testproject file found in ${projectRoot}`, requestId)),
372
+ },
373
+ ],
183
374
  };
184
375
  }
185
376
  // Verify plan directory exists
@@ -187,7 +378,12 @@ export function registerTestPlanCreateSuite(server, config) {
187
378
  if (!fs.existsSync(planDir)) {
188
379
  return {
189
380
  isError: true,
190
- content: [{ type: 'text', text: JSON.stringify(makeError('DIR_NOT_FOUND', `Plan directory does not exist: ${planDir}`, requestId)) }],
381
+ content: [
382
+ {
383
+ type: 'text',
384
+ text: JSON.stringify(makeError('DIR_NOT_FOUND', `Plan directory does not exist: ${planDir}`, requestId)),
385
+ },
386
+ ],
191
387
  };
192
388
  }
193
389
  // Verify plan .planitem exists
@@ -195,7 +391,12 @@ export function registerTestPlanCreateSuite(server, config) {
195
391
  if (!fs.existsSync(planItemPath)) {
196
392
  return {
197
393
  isError: true,
198
- content: [{ type: 'text', text: JSON.stringify(makeError('FILE_NOT_FOUND', `Plan .planitem file does not exist: ${planItemPath}`, requestId)) }],
394
+ content: [
395
+ {
396
+ type: 'text',
397
+ text: JSON.stringify(makeError('FILE_NOT_FOUND', `Plan .planitem file does not exist: ${planItemPath}`, requestId)),
398
+ },
399
+ ],
199
400
  };
200
401
  }
201
402
  // Determine suite directory
@@ -207,7 +408,12 @@ export function registerTestPlanCreateSuite(server, config) {
207
408
  if (fs.existsSync(suiteDir)) {
208
409
  return {
209
410
  isError: true,
210
- content: [{ type: 'text', text: JSON.stringify(makeError('DIR_EXISTS', `Suite directory already exists: ${suiteDir}`, requestId)) }],
411
+ content: [
412
+ {
413
+ type: 'text',
414
+ text: JSON.stringify(makeError('DIR_EXISTS', `Suite directory already exists: ${suiteDir}`, requestId)),
415
+ },
416
+ ],
211
417
  };
212
418
  }
213
419
  const guid = randomUUID();
@@ -234,24 +440,37 @@ export function registerTestPlanCreateSuite(server, config) {
234
440
  const error = err;
235
441
  return {
236
442
  isError: true,
237
- content: [{ type: 'text', text: JSON.stringify(makeError(error instanceof PathPolicyError ? error.code : (error.code ?? 'CREATE_SUITE_ERROR'), error.message, requestId)) }],
443
+ content: [
444
+ {
445
+ type: 'text',
446
+ text: JSON.stringify(makeError(error instanceof PathPolicyError ? error.code : error.code ?? 'CREATE_SUITE_ERROR', error.message, requestId)),
447
+ },
448
+ ],
238
449
  };
239
450
  }
240
451
  });
241
452
  }
242
- // ── provar.testplan.remove-instance ──────────────────────────────────────────
453
+ // ── provar_testplan_remove-instance ──────────────────────────────────────────
243
454
  export function registerTestPlanRemoveInstance(server, config) {
244
- server.tool('provar.testplan.remove-instance', [
245
- 'Remove a .testinstance file from a Provar test plan.',
246
- 'instance_path is relative to the project root.',
247
- 'Returns the path of the removed file.',
248
- ].join(' '), {
249
- project_path: z.string().describe('Absolute path to the Provar project root'),
250
- instance_path: z.string().describe('Path to the .testinstance file, relative to project root'),
251
- dry_run: z.boolean().optional().default(false).describe('Return what would be removed without deleting (default: false)'),
455
+ server.registerTool('provar_testplan_remove-instance', {
456
+ title: 'Remove Test Plan Instance',
457
+ description: [
458
+ 'Remove a .testinstance file from a Provar test plan.',
459
+ 'instance_path is relative to the project root.',
460
+ 'Returns the path of the removed file.',
461
+ ].join(' '),
462
+ inputSchema: {
463
+ project_path: z.string().describe('Absolute path to the Provar project root'),
464
+ instance_path: z.string().describe('Path to the .testinstance file, relative to project root'),
465
+ dry_run: z
466
+ .boolean()
467
+ .optional()
468
+ .default(false)
469
+ .describe('Return what would be removed without deleting (default: false)'),
470
+ },
252
471
  }, ({ project_path, instance_path, dry_run }) => {
253
472
  const requestId = makeRequestId();
254
- log('info', 'provar.testplan.remove-instance', { requestId, project_path, instance_path });
473
+ log('info', 'provar_testplan_remove-instance', { requestId, project_path, instance_path });
255
474
  try {
256
475
  assertPathAllowed(project_path, config.allowedPaths);
257
476
  const projectRoot = path.resolve(project_path);
@@ -262,21 +481,36 @@ export function registerTestPlanRemoveInstance(server, config) {
262
481
  if (!resolvedAbsolute.startsWith(resolvedProjectRoot + path.sep) && resolvedAbsolute !== resolvedProjectRoot) {
263
482
  return {
264
483
  isError: true,
265
- content: [{ type: 'text', text: JSON.stringify(makeError('PATH_TRAVERSAL', `Path traversal detected: ${instance_path}`, requestId)) }],
484
+ content: [
485
+ {
486
+ type: 'text',
487
+ text: JSON.stringify(makeError('PATH_TRAVERSAL', `Path traversal detected: ${instance_path}`, requestId)),
488
+ },
489
+ ],
266
490
  };
267
491
  }
268
492
  // Must end with .testinstance
269
493
  if (!instance_path.endsWith('.testinstance')) {
270
494
  return {
271
495
  isError: true,
272
- content: [{ type: 'text', text: JSON.stringify(makeError('INVALID_PATH', 'instance_path must end with .testinstance', requestId)) }],
496
+ content: [
497
+ {
498
+ type: 'text',
499
+ text: JSON.stringify(makeError('INVALID_PATH', 'instance_path must end with .testinstance', requestId)),
500
+ },
501
+ ],
273
502
  };
274
503
  }
275
504
  // File must exist
276
505
  if (!fs.existsSync(absolutePath)) {
277
506
  return {
278
507
  isError: true,
279
- content: [{ type: 'text', text: JSON.stringify(makeError('FILE_NOT_FOUND', `Instance file not found: ${absolutePath}`, requestId)) }],
508
+ content: [
509
+ {
510
+ type: 'text',
511
+ text: JSON.stringify(makeError('FILE_NOT_FOUND', `Instance file not found: ${absolutePath}`, requestId)),
512
+ },
513
+ ],
280
514
  };
281
515
  }
282
516
  if (!dry_run) {
@@ -297,13 +531,19 @@ export function registerTestPlanRemoveInstance(server, config) {
297
531
  const error = err;
298
532
  return {
299
533
  isError: true,
300
- content: [{ type: 'text', text: JSON.stringify(makeError(error instanceof PathPolicyError ? error.code : (error.code ?? 'REMOVE_INSTANCE_ERROR'), error.message, requestId)) }],
534
+ content: [
535
+ {
536
+ type: 'text',
537
+ text: JSON.stringify(makeError(error instanceof PathPolicyError ? error.code : error.code ?? 'REMOVE_INSTANCE_ERROR', error.message, requestId)),
538
+ },
539
+ ],
301
540
  };
302
541
  }
303
542
  });
304
543
  }
305
544
  // ── Convenience re-export ─────────────────────────────────────────────────────
306
545
  export function registerAllTestPlanTools(server, config) {
546
+ registerTestPlanCreate(server, config);
307
547
  registerTestPlanAddInstance(server, config);
308
548
  registerTestPlanCreateSuite(server, config);
309
549
  registerTestPlanRemoveInstance(server, config);
@@ -1 +1 @@
1
- {"version":3,"file":"testPlanTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/testPlanTools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testPlanTools.js","sourceRoot":"","sources":["../../../src/mcp/tools/testPlanTools.ts"],"names":[],"mappings":"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"}