@provartesting/provardx-cli 1.5.0 → 1.5.2-beta.2

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 (81) hide show
  1. package/lib/mcp/docs/PROVAR_TOOL_GUIDE.md +18 -6
  2. package/lib/mcp/prompts/guidePrompts.js +21 -11
  3. package/lib/mcp/prompts/guidePrompts.js.map +1 -1
  4. package/lib/mcp/rules/provar_best_practices_rules.json +29 -0
  5. package/lib/mcp/server.d.ts +1 -0
  6. package/lib/mcp/server.js +90 -21
  7. package/lib/mcp/server.js.map +1 -1
  8. package/lib/mcp/tools/antTools.d.ts +20 -0
  9. package/lib/mcp/tools/antTools.js +105 -41
  10. package/lib/mcp/tools/antTools.js.map +1 -1
  11. package/lib/mcp/tools/automationTools.js +65 -35
  12. package/lib/mcp/tools/automationTools.js.map +1 -1
  13. package/lib/mcp/tools/bestPracticesEngine.js +148 -9
  14. package/lib/mcp/tools/bestPracticesEngine.js.map +1 -1
  15. package/lib/mcp/tools/connectionTools.js +100 -30
  16. package/lib/mcp/tools/connectionTools.js.map +1 -1
  17. package/lib/mcp/tools/defectTools.js +12 -7
  18. package/lib/mcp/tools/defectTools.js.map +1 -1
  19. package/lib/mcp/tools/descHelper.d.ts +5 -0
  20. package/lib/mcp/tools/descHelper.js +14 -0
  21. package/lib/mcp/tools/descHelper.js.map +1 -0
  22. package/lib/mcp/tools/nitroXTools.js +72 -32
  23. package/lib/mcp/tools/nitroXTools.js.map +1 -1
  24. package/lib/mcp/tools/orgDescribeTools.d.ts +57 -0
  25. package/lib/mcp/tools/orgDescribeTools.js +329 -0
  26. package/lib/mcp/tools/orgDescribeTools.js.map +1 -0
  27. package/lib/mcp/tools/pageObjectGenerate.js +33 -15
  28. package/lib/mcp/tools/pageObjectGenerate.js.map +1 -1
  29. package/lib/mcp/tools/pageObjectValidate.js +11 -4
  30. package/lib/mcp/tools/pageObjectValidate.js.map +1 -1
  31. package/lib/mcp/tools/projectInspect.js +31 -5
  32. package/lib/mcp/tools/projectInspect.js.map +1 -1
  33. package/lib/mcp/tools/projectValidateFromPath.js +128 -22
  34. package/lib/mcp/tools/projectValidateFromPath.js.map +1 -1
  35. package/lib/mcp/tools/propertiesTools.d.ts +12 -0
  36. package/lib/mcp/tools/propertiesTools.js +155 -17
  37. package/lib/mcp/tools/propertiesTools.js.map +1 -1
  38. package/lib/mcp/tools/qualityHubApiTools.js +8 -7
  39. package/lib/mcp/tools/qualityHubApiTools.js.map +1 -1
  40. package/lib/mcp/tools/qualityHubTools.js +108 -37
  41. package/lib/mcp/tools/qualityHubTools.js.map +1 -1
  42. package/lib/mcp/tools/rcaTools.d.ts +17 -0
  43. package/lib/mcp/tools/rcaTools.js +69 -15
  44. package/lib/mcp/tools/rcaTools.js.map +1 -1
  45. package/lib/mcp/tools/testCaseGenerate.d.ts +1 -0
  46. package/lib/mcp/tools/testCaseGenerate.js +254 -17
  47. package/lib/mcp/tools/testCaseGenerate.js.map +1 -1
  48. package/lib/mcp/tools/testCaseStepTools.js +27 -9
  49. package/lib/mcp/tools/testCaseStepTools.js.map +1 -1
  50. package/lib/mcp/tools/testCaseValidate.d.ts +14 -1
  51. package/lib/mcp/tools/testCaseValidate.js +190 -69
  52. package/lib/mcp/tools/testCaseValidate.js.map +1 -1
  53. package/lib/mcp/tools/testPlanTools.js +43 -26
  54. package/lib/mcp/tools/testPlanTools.js.map +1 -1
  55. package/lib/mcp/tools/testPlanValidate.js +64 -11
  56. package/lib/mcp/tools/testPlanValidate.js.map +1 -1
  57. package/lib/mcp/tools/testSuiteValidate.js +99 -10
  58. package/lib/mcp/tools/testSuiteValidate.js.map +1 -1
  59. package/lib/mcp/utils/detailLevel.d.ts +9 -0
  60. package/lib/mcp/utils/detailLevel.js +20 -0
  61. package/lib/mcp/utils/detailLevel.js.map +1 -0
  62. package/lib/mcp/utils/fieldMask.d.ts +17 -0
  63. package/lib/mcp/utils/fieldMask.js +75 -0
  64. package/lib/mcp/utils/fieldMask.js.map +1 -0
  65. package/lib/mcp/utils/testCasePlanMode.d.ts +41 -0
  66. package/lib/mcp/utils/testCasePlanMode.js +208 -0
  67. package/lib/mcp/utils/testCasePlanMode.js.map +1 -0
  68. package/lib/mcp/utils/tokenMeta.d.ts +40 -0
  69. package/lib/mcp/utils/tokenMeta.js +90 -0
  70. package/lib/mcp/utils/tokenMeta.js.map +1 -0
  71. package/lib/mcp/utils/validationDiff.d.ts +57 -0
  72. package/lib/mcp/utils/validationDiff.js +191 -0
  73. package/lib/mcp/utils/validationDiff.js.map +1 -0
  74. package/lib/mcp/utils/validationScore.d.ts +15 -0
  75. package/lib/mcp/utils/validationScore.js +31 -0
  76. package/lib/mcp/utils/validationScore.js.map +1 -0
  77. package/lib/mcp/utils/warningCodes.d.ts +10 -0
  78. package/lib/mcp/utils/warningCodes.js +19 -0
  79. package/lib/mcp/utils/warningCodes.js.map +1 -0
  80. package/oclif.manifest.json +1 -1
  81. package/package.json +13 -1
@@ -77,15 +77,27 @@ provar_properties_set { file_path: "<output_path>", key: "connectionName", valu
77
77
 
78
78
  ## "I want to write a new test"
79
79
 
80
+ A Provar test case is a tree (scenarios → UI screens → asserts), not a flat list of steps. The agent that calls `provar_testcase_generate` is responsible for constructing the full tree in **one** call. Splitting authoring across many tool calls causes scenario numbering drift, flat asserts, and inconsistent step types — `provar_testcase_step_edit` is for **amending** an existing test case, not for **constructing** one.
81
+
82
+ Recommended sequence:
83
+
80
84
  ```
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 }
85
+ 1. provar_project_inspect { project_path } ← find coverage gaps first
86
+ 2. provar_qualityhub_examples_retrieve { object_or_scenario } ← ground in corpus examples for the step types you need
87
+ 3. provar_testcase_generate { test_case_name, steps: [<ALL steps>] } single call, full step tree in one payload
88
+ 4. provar_testcase_validate { file_path } ← must pass before adding to plan
89
+ 5. provar_testplan_add-instance { project_path, plan_name, test_case_path }
90
+ 6. provar_testplan_validate { project_path, plan_name }
87
91
  ```
88
92
 
93
+ Use `provar_testcase_step_edit` only when:
94
+
95
+ - Adding a single step to an existing, already-validated test case
96
+ - Fixing a step's attributes after a validation finding
97
+ - Targeted edits during debugging
98
+
99
+ Do **not** use `provar_testcase_step_edit` to construct a test case step-by-step from an empty skeleton — the LLM loses scenario context between calls and the resulting structure is unreliable.
100
+
89
101
  ---
90
102
 
91
103
  ## "I want to work with Salesforce metadata"
@@ -225,16 +225,23 @@ Required sequence — do not skip steps:
225
225
  6. provar_qualityhub_defect_create → optional, create defects for failures`,
226
226
  'author-test': `## Author a New Test Case
227
227
 
228
- 1. provar_project_inspect → find coverage gaps before writing
229
- 2. provar_automation_metadata_download → if SF metadata is stale (missing fields/objects)
230
- 3. provar_pageobject_generate if a new page object is needed
231
- 4. provar_pageobject_validate → validate before compile
232
- 5. provar_automation_compile after any page object change
233
- 6. provar_testcase_generate create the test case file
234
- 7. provar_testcase_step_edit add steps (repeat as needed)
235
- 8. provar_testcase_validate MUST pass before adding to a plan
236
- 9. provar_testplan_add-instance add to an existing plan
237
- 10. provar_testplan_validate validate the plan`,
228
+ Construct the full step tree in a single \`provar_testcase_generate\` call.
229
+ \`provar_testcase_step_edit\` is for amending an existing case, not for
230
+ building one step-by-step (that pattern drops scenarios and flattens nesting).
231
+
232
+ 1. provar_project_inspect find coverage gaps before writing
233
+ 2. provar_qualityhub_examples_retrieve ground in corpus examples for the step types you need
234
+ 3. provar_automation_metadata_download if SF metadata is stale (missing fields/objects)
235
+ 4. provar_pageobject_generate only if a new page object is needed
236
+ 5. provar_pageobject_validate validate before compile
237
+ 6. provar_automation_compile after any page object change
238
+ 7. provar_testcase_generate → single call, pass ALL steps in one payload
239
+ 8. provar_testcase_validate → MUST pass before adding to a plan
240
+ 9. provar_testplan_add-instance → add to an existing plan
241
+ 10. provar_testplan_validate → validate the plan
242
+
243
+ Use provar_testcase_step_edit only to amend an existing validated test case
244
+ (single-step add, attribute fix, debug edit) — never to construct one from scratch.`,
238
245
  'debug-failures': `## Debug Failing Tests
239
246
 
240
247
  1. provar_testrun_report_locate → find the report file
@@ -278,11 +285,14 @@ provar_pageobject_validate
278
285
  provar_nitrox_generate OR provar_nitrox_patch
279
286
  └── provar_nitrox_validate (always validate after)
280
287
 
281
- provar_testcase_generate OR provar_testcase_step_edit
288
+ provar_testcase_generate (construct full case — pass ALL steps in one call)
282
289
  └── provar_testcase_validate
283
290
  └── provar_testplan_add-instance
284
291
  └── provar_testplan_validate
285
292
 
293
+ provar_testcase_step_edit (amend an existing validated case only — never construct)
294
+ └── provar_testcase_validate
295
+
286
296
  ### Safe to run in parallel (no dependency between them)
287
297
  - provar_project_inspect + provar_connection_list
288
298
  - provar_pageobject_validate on multiple files
@@ -1 +1 @@
1
- {"version":3,"file":"guidePrompts.js","sourceRoot":"","sources":["../../../src/mcp/prompts/guidePrompts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"guidePrompts.js","sourceRoot":"","sources":["../../../src/mcp/prompts/guidePrompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,gFAAgF;AAEhF,MAAM,UAAU,wBAAwB,CAAC,MAAiB;IACxD,MAAM,CAAC,MAAM,CACX,yBAAyB,EACzB,kOAAkO,EAClO;QACE,WAAW,EAAE,CAAC;aACX,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,gIAAgI,CACjI;QACH,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,gJAAgJ,CACjJ;KACJ,EACD,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAC1B,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;;;;EAKhB,WAAW;wBACT,CAAC,CAAC,oCAAoC,WAAW,EAAE;wBACnD,CAAC,CAAC,iQACN;;kBAEkB,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4B7F,IAAI,KAAK,aAAa;wBACpB,CAAC,CAAC;;;;;;;;;;;;;8EAawE;wBAC1E,CAAC,CAAC;;;;;;;;;;;;;;;;;;;;;8EAsBN;;;;;;;;;;;;;;;;;yEAiByE;iBAC9D;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,MAAM,CACX,2BAA2B,EAC3B,2NAA2N,EAC3N;QACE,YAAY,EAAE,CAAC;aACZ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,iIAAiI,CAClI;QACH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;KACvG,EACD,CAAC,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE;YACR;gBACE,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE;oBACP,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE;;EAGhB,YAAY;wBACV,CAAC,CAAC,6BAA6B,YAAY,EAAE;wBAC7C,CAAC,CAAC,4FACN;EACE,WAAW,CAAC,CAAC,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4BAqDzB;iBACjB;aACF;SACF;KACF,CAAC,CACH,CAAC;AACJ,CAAC;AAED,gFAAgF;AAEhF,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,MAAM,CACX,4BAA4B,EAC5B,4NAA4N,EAC5N;QACE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,0PAA0P,CAC3P;KACJ,EACD,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QACX,MAAM,KAAK,GAA2B;YACpC,WAAW,EAAE;;;;;;;;;;2DAUsC;YAEnD,iBAAiB,EAAE;;;;;;;;4EAQiD;YAEpE,aAAa,EAAE;;;;;;;;;;;;;;;;;;oFAkB6D;YAE5E,gBAAgB,EAAE;;;;;;;;;;;4DAWkC;YAEpD,MAAM,EAAE;;;;;;;;6EAQ6D;YAErE,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iGA0CgF;SAC1F,CAAC;QAEF,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;QAEjE,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAe;oBACrB,OAAO,EAAE;wBACP,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE;;EAElB,WAAW;;;;;;;;iEAQoD;qBACpD;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
@@ -2899,6 +2899,35 @@
2899
2899
  },
2900
2900
  "notes": "Provar internally stores dates as epoch timestamps (milliseconds since 1970-01-01). When valueClass='date' is used, Provar expects a numeric epoch value. String dates cause XML parsing/loading failures. All valid corpus examples use epoch timestamps with valueClass='date': 1637798400000, 1513209600000, etc.",
2901
2901
  "source": "Corpus analysis: All valueClass='date' values are epoch timestamps; string dates cause Provar IDE load failures"
2902
+ },
2903
+ {
2904
+ "id": "UI-NEST-STRUCT-001",
2905
+ "category": "XMLSchema",
2906
+ "name": "UI action steps must be nested inside a UiWithScreen substeps clause",
2907
+ "description": "UiDoAction, UiAssert, UiRead, UiFill, UiNavigate, UiWithRow, and UiHandleAlert steps must descend from a UiWithScreen or UiWithRow ancestor through a <clause name=\"substeps\"> path. Control-flow wrappers (IfThen, ForEach, DoWhile, WaitFor, Switch) between the screen ancestor and the UI action are allowed. Steps inside <clause name=\"hidden\"> are exempt. When emitted flat (e.g. as siblings of UiWithScreen in the root <steps>), Provar IDE cannot bind them to a screen context and they will not render correctly.",
2908
+ "appliesTo": ["Step"],
2909
+ "severity": "major",
2910
+ "weight": 7,
2911
+ "recommendation": "Wrap each UI action inside a parent UiWithScreen using this structure:\n\n <apiCall apiId=\"com.provar.plugins.forcedotcom.core.ui.UiWithScreen\" ...>\n <arguments>...</arguments>\n <clauses>\n <clause name=\"substeps\" testItemId=\"...\">\n <steps>\n <apiCall apiId=\"...UiDoAction\" .../>\n <apiCall apiId=\"...UiWithRow\" ...> ... </apiCall>\n </steps>\n </clause>\n </clauses>\n </apiCall>\n\nUiWithRow may contain its own <clauses><clause name=\"substeps\"> with further UI actions inside. Control-flow wrappers (IfThen, ForEach, DoWhile, WaitFor) between the screen ancestor and the UI action are allowed; <clause name=\"hidden\"> is exempt (disabled/settings blocks).",
2912
+ "check": {
2913
+ "type": "uiActionNestingStructure",
2914
+ "target": "step",
2915
+ "uiActionApiIds": [
2916
+ "com.provar.plugins.forcedotcom.core.ui.UiDoAction",
2917
+ "com.provar.plugins.forcedotcom.core.ui.UiAssert",
2918
+ "com.provar.plugins.forcedotcom.core.ui.UiRead",
2919
+ "com.provar.plugins.forcedotcom.core.ui.UiFill",
2920
+ "com.provar.plugins.forcedotcom.core.ui.UiNavigate",
2921
+ "com.provar.plugins.forcedotcom.core.ui.UiWithRow",
2922
+ "com.provar.plugins.forcedotcom.core.ui.UiHandleAlert"
2923
+ ],
2924
+ "screenContainerApiIds": [
2925
+ "com.provar.plugins.forcedotcom.core.ui.UiWithScreen",
2926
+ "com.provar.plugins.forcedotcom.core.ui.UiWithRow"
2927
+ ]
2928
+ },
2929
+ "notes": "Mirrors QH UiActionNestingStructureValidator (lambda/src/validator/best_practices_engine.py). Emits one violation per offending step so that (rule_id, test_item_id) de-dups against the API. UiWithRow plays a dual role: itself a UI action that must be nested, and a container whose substeps clause satisfies the rule for its descendants.",
2930
+ "source": "Field observation: flat-emitted UI actions (sibling of UiWithScreen) fail to render in Provar IDE despite scoring 100/94 in earlier local validation"
2902
2931
  }
2903
2932
  ]
2904
2933
  }
@@ -7,6 +7,7 @@ export interface ServerConfig {
7
7
  updateCommand: string | null;
8
8
  };
9
9
  }
10
+ export declare function parseActiveGroups(): Set<string> | null;
10
11
  export declare function createProvarMcpServer(config: ServerConfig): McpServer;
11
12
  /**
12
13
  * Resolve the docs directory for bundled MCP Markdown resources.
package/lib/mcp/server.js CHANGED
@@ -32,7 +32,72 @@ import { registerAllTestPlanTools } from './tools/testPlanTools.js';
32
32
  import { registerAllNitroXTools } from './tools/nitroXTools.js';
33
33
  import { registerAllTestCaseStepTools } from './tools/testCaseStepTools.js';
34
34
  import { registerAllConnectionTools } from './tools/connectionTools.js';
35
+ import { registerAllOrgDescribeTools } from './tools/orgDescribeTools.js';
35
36
  import { registerAllPrompts } from './prompts/index.js';
37
+ import { createDepthGuardState, wrapWithDepthGuard, } from './utils/tokenMeta.js';
38
+ import { desc } from './tools/descHelper.js';
39
+ // ── Tool group registry ───────────────────────────────────────────────────────
40
+ // Groups are keyed in lowercase so they match the lowercased env var values.
41
+ const TOOL_GROUPS = {
42
+ nitrox: [registerAllNitroXTools],
43
+ automation: [registerAllAutomationTools],
44
+ qualityhub: [registerAllQualityHubTools, registerAllQualityHubApiTools, registerAllDefectTools],
45
+ validation: [
46
+ registerProjectValidateFromPath,
47
+ registerAllAntTools,
48
+ registerAllPropertiesTools,
49
+ registerTestCaseValidate,
50
+ registerTestSuiteValidate,
51
+ registerTestPlanValidate,
52
+ registerPageObjectValidate,
53
+ ],
54
+ authoring: [
55
+ registerTestCaseGenerate,
56
+ registerPageObjectGenerate,
57
+ registerAllTestCaseStepTools,
58
+ registerAllTestPlanTools,
59
+ ],
60
+ inspect: [registerProjectInspect, registerAllOrgDescribeTools],
61
+ connection: [registerAllConnectionTools],
62
+ rca: [registerAllRcaTools],
63
+ };
64
+ export function parseActiveGroups() {
65
+ const env = process.env['PROVAR_MCP_TOOLS'];
66
+ if (!env?.trim())
67
+ return null;
68
+ const requested = new Set(env
69
+ .split(',')
70
+ .map((g) => g.trim().toLowerCase())
71
+ .filter(Boolean));
72
+ if (requested.size === 0) {
73
+ log('warn', 'PROVAR_MCP_TOOLS was set but contained no valid group names — activating all groups', { raw: env });
74
+ return null;
75
+ }
76
+ const known = new Set(Object.keys(TOOL_GROUPS));
77
+ const matched = new Set();
78
+ const unknown = [];
79
+ for (const g of requested) {
80
+ if (known.has(g))
81
+ matched.add(g);
82
+ else
83
+ unknown.push(g);
84
+ }
85
+ if (unknown.length > 0) {
86
+ log('warn', 'PROVAR_MCP_TOOLS contains unknown group names — they will be ignored', {
87
+ raw: env,
88
+ unknown,
89
+ known: [...known],
90
+ });
91
+ }
92
+ if (matched.size === 0) {
93
+ log('warn', 'PROVAR_MCP_TOOLS matched no known group names — activating all groups', {
94
+ raw: env,
95
+ known: [...known],
96
+ });
97
+ return null;
98
+ }
99
+ return matched;
100
+ }
36
101
  export function createProvarMcpServer(config) {
37
102
  log('info', 'Creating Provar MCP server', { allowedPaths: config.allowedPaths });
38
103
  const server = new McpServer({
@@ -42,9 +107,13 @@ export function createProvarMcpServer(config) {
42
107
  // ── Sanity-check tool ────────────────────────────────────────────────────────
43
108
  server.registerTool('provardx_ping', {
44
109
  title: 'Ping MCP Server',
45
- description: 'Sanity-check tool. Echoes back a message with a timestamp. Use this to verify the MCP server is reachable before calling other tools.',
110
+ description: desc('Sanity-check tool. Echoes back a message with a timestamp. Use this to verify the MCP server is reachable before calling other tools.', 'Echo message back with timestamp; verify MCP server is reachable.'),
46
111
  inputSchema: {
47
- message: z.string().optional().default('ping').describe('Optional message to echo back'),
112
+ message: z
113
+ .string()
114
+ .optional()
115
+ .default('ping')
116
+ .describe(desc('Optional message to echo back', 'message to echo')),
48
117
  },
49
118
  }, ({ message }) => {
50
119
  const result = {
@@ -60,26 +129,20 @@ export function createProvarMcpServer(config) {
60
129
  structuredContent: result,
61
130
  };
62
131
  });
132
+ // ── Depth-guard middleware (PDX-474) ─────────────────────────────────────────
133
+ const rawLimit = parseInt(process.env['PROVAR_MCP_MAX_TOOL_DEPTH'] ?? '50', 10);
134
+ const depthLimit = Number.isNaN(rawLimit) || rawLimit <= 0 ? 50 : rawLimit;
135
+ const depthState = createDepthGuardState();
136
+ patchWithMiddleware(server, depthState, depthLimit);
63
137
  // ── Provar tools ─────────────────────────────────────────────────────────────
64
- registerProjectInspect(server, config);
65
- registerPageObjectGenerate(server, config);
66
- registerPageObjectValidate(server, config);
67
- registerTestCaseGenerate(server, config);
68
- registerTestCaseValidate(server, config);
69
- registerTestSuiteValidate(server);
70
- registerTestPlanValidate(server);
71
- registerProjectValidateFromPath(server, config);
72
- registerAllPropertiesTools(server, config);
73
- registerAllQualityHubTools(server);
74
- registerAllQualityHubApiTools(server);
75
- registerAllAutomationTools(server, config);
76
- registerAllDefectTools(server);
77
- registerAllAntTools(server, config);
78
- registerAllRcaTools(server, config);
79
- registerAllTestPlanTools(server, config);
80
- registerAllNitroXTools(server, config);
81
- registerAllTestCaseStepTools(server, config);
82
- registerAllConnectionTools(server, config);
138
+ const activeGroups = parseActiveGroups();
139
+ for (const [group, registrars] of Object.entries(TOOL_GROUPS)) {
140
+ if (activeGroups === null || activeGroups.has(group)) {
141
+ for (const register of registrars) {
142
+ register(server, config);
143
+ }
144
+ }
145
+ }
83
146
  // ── Provar prompts ───────────────────────────────────────────────────────────
84
147
  registerAllPrompts(server);
85
148
  // ── Documentation resources ──────────────────────────────────────────────────
@@ -167,6 +230,12 @@ export function createProvarMcpServer(config) {
167
230
  });
168
231
  return server;
169
232
  }
233
+ function patchWithMiddleware(server, state, limit) {
234
+ const orig = server.registerTool.bind(server);
235
+ // Cast through unknown to patch the overloaded method without triggering no-unsafe-any.
236
+ const patchable = server;
237
+ patchable.registerTool = (name, config, handler) => orig(name, config, wrapWithDepthGuard(name, handler, state, limit));
238
+ }
170
239
  /**
171
240
  * Resolve the docs directory for bundled MCP Markdown resources.
172
241
  * In compiled output (lib/mcp/) the sibling docs/ dir exists; in dev/ts-node
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
@@ -18,15 +18,35 @@ export interface AntValidationResult {
18
18
  }
19
19
  /** Pure function — exported for unit testing */
20
20
  export declare function validateAntXml(xmlContent: string): AntValidationResult;
21
+ export type JUnitErrorCategory = 'INFRASTRUCTURE' | 'ASSERTION' | 'LOCATOR' | 'TIMEOUT' | 'OTHER';
21
22
  export interface JUnitStepResult {
22
23
  testItemId: string;
23
24
  title: string;
24
25
  status: 'pass' | 'fail' | 'skip';
25
26
  errorMessage?: string;
27
+ error_category?: JUnitErrorCategory;
28
+ retryable?: boolean;
26
29
  }
30
+ /**
31
+ * Classify a failure message into a coarse-grained category used for retry decisions.
32
+ * Mirrors the classifier in rcaTools.ts (PDX-490) so a downstream consumer sees the
33
+ * same labelling whether they consume `provar_automation_testrun.steps[]` or
34
+ * `provar_testrun_rca.failures[]`.
35
+ *
36
+ * Returns `undefined` when no pattern matches.
37
+ */
38
+ export declare function classifyStepErrorCategory(errorText: string): JUnitErrorCategory | undefined;
39
+ /** Only transient categories (INFRASTRUCTURE, TIMEOUT) are retryable. */
40
+ export declare function isStepRetryable(category: JUnitErrorCategory | undefined): boolean | undefined;
27
41
  export interface JUnitParseResult {
28
42
  steps: JUnitStepResult[];
29
43
  warning?: string;
44
+ /**
45
+ * True iff at least one JUnit XML file was located AND parsed without throwing.
46
+ * Distinguishes "we have data and the test selector matched zero cases" (legit RUN-001 signal)
47
+ * from "we have no data because nothing parsed" (insufficient info — must stay silent).
48
+ */
49
+ parsedAny: boolean;
30
50
  }
31
51
  /**
32
52
  * Scan a Provar results directory for JUnit XML files and return structured step results.