@smartbear/mcp 0.23.0 → 0.25.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 (148) hide show
  1. package/README.md +10 -2
  2. package/dist/bearq/client.js +12 -13
  3. package/dist/bearq/tool/tasks/chat-with-qa-lead.js +1 -0
  4. package/dist/bearq/tool/tasks/expand-application-model.js +1 -0
  5. package/dist/bearq/tool/tasks/get-task-status.js +1 -0
  6. package/dist/bearq/tool/tasks/get-task.js +1 -0
  7. package/dist/bearq/tool/tasks/refine-all-draft-tests.js +1 -0
  8. package/dist/bearq/tool/tasks/refine-test-cases.js +1 -0
  9. package/dist/bearq/tool/tasks/refine-tests-in-functional-areas.js +1 -0
  10. package/dist/bearq/tool/tasks/run-regression-tests.js +1 -0
  11. package/dist/bearq/tool/tasks/run-test-cases.js +1 -0
  12. package/dist/bearq/tool/tasks/run-tests-in-functional-areas.js +1 -0
  13. package/dist/bearq/tool/tasks/stop-task.js +1 -0
  14. package/dist/bearq/tool/tasks/wait-for-task.js +1 -0
  15. package/dist/bugsnag/client.js +24 -44
  16. package/dist/bugsnag/tool/error/get-error.js +1 -0
  17. package/dist/bugsnag/tool/error/list-project-errors.js +1 -0
  18. package/dist/bugsnag/tool/error/update-error.js +1 -0
  19. package/dist/bugsnag/tool/event/get-event-details-from-dashboard-url.js +1 -0
  20. package/dist/bugsnag/tool/event/get-event.js +1 -0
  21. package/dist/bugsnag/tool/event/list-error-events.js +1 -0
  22. package/dist/bugsnag/tool/performance/get-network-endpoint-groupings.js +1 -0
  23. package/dist/bugsnag/tool/performance/get-span-group.js +1 -0
  24. package/dist/bugsnag/tool/performance/get-trace.js +1 -0
  25. package/dist/bugsnag/tool/performance/list-span-groups.js +1 -0
  26. package/dist/bugsnag/tool/performance/list-spans.js +1 -0
  27. package/dist/bugsnag/tool/performance/list-trace-fields.js +1 -0
  28. package/dist/bugsnag/tool/performance/set-network-endpoint-groupings.js +1 -0
  29. package/dist/bugsnag/tool/project/get-current-project.js +1 -0
  30. package/dist/bugsnag/tool/project/list-project-event-filters.js +1 -0
  31. package/dist/bugsnag/tool/project/list-projects.js +1 -0
  32. package/dist/bugsnag/tool/release/get-build.js +1 -0
  33. package/dist/bugsnag/tool/release/get-release.js +1 -0
  34. package/dist/bugsnag/tool/release/list-releases.js +1 -0
  35. package/dist/collaborator/client.js +24 -19
  36. package/dist/common/client-registry.js +63 -29
  37. package/dist/common/server.js +57 -1
  38. package/dist/common/transport-http.js +90 -69
  39. package/dist/common/transport-stdio.js +29 -24
  40. package/dist/package.json.js +1 -1
  41. package/dist/pactflow/client/base.js +3 -3
  42. package/dist/pactflow/client/tools.js +102 -0
  43. package/dist/pactflow/client.js +30 -43
  44. package/dist/qmetry/client/tools/automation-tools.js +2 -0
  45. package/dist/qmetry/client/tools/issue-tools.js +6 -0
  46. package/dist/qmetry/client/tools/project-tools.js +9 -0
  47. package/dist/qmetry/client/tools/requirement-tools.js +5 -0
  48. package/dist/qmetry/client/tools/testcase-tools.js +7 -0
  49. package/dist/qmetry/client/tools/testsuite-tools.js +11 -0
  50. package/dist/qmetry/client.js +20 -18
  51. package/dist/qtm4j/client.js +57 -23
  52. package/dist/qtm4j/config/constants.js +197 -5
  53. package/dist/qtm4j/config/field-resolution.types.js +5 -2
  54. package/dist/qtm4j/http/api-client.js +90 -3
  55. package/dist/qtm4j/resolver/cache/cache.js +1 -1
  56. package/dist/qtm4j/resolver/resolver-registry.js +7 -1
  57. package/dist/qtm4j/resolver/resolvers/common-attribute-resolver.js +1 -0
  58. package/dist/qtm4j/resolver/resolvers/component-resolver.js +2 -0
  59. package/dist/qtm4j/resolver/resolvers/label-resolver.js +2 -0
  60. package/dist/qtm4j/resolver/resolvers/requirement-id-resolver.js +28 -0
  61. package/dist/qtm4j/resolver/resolvers/test-cycle-uid-resolver.js +28 -0
  62. package/dist/qtm4j/schema/automation.schema.js +107 -0
  63. package/dist/qtm4j/schema/linked-items.schema.js +95 -0
  64. package/dist/qtm4j/schema/requirements.schema.js +109 -0
  65. package/dist/qtm4j/schema/search-test-cycle.schema.js +133 -0
  66. package/dist/qtm4j/schema/test-cycle.link.schema.js +260 -0
  67. package/dist/qtm4j/schema/test-cycle.schema.js +39 -0
  68. package/dist/qtm4j/schema/update-test-cycle.schema.js +54 -0
  69. package/dist/qtm4j/tool/project/get-projects.js +2 -1
  70. package/dist/qtm4j/tool/project/set-project-context.js +2 -1
  71. package/dist/qtm4j/tool/requirement/get-linked-testcases.js +93 -0
  72. package/dist/qtm4j/tool/requirement/link-testcases.js +107 -0
  73. package/dist/qtm4j/tool/requirement/unlink-testcases.js +97 -0
  74. package/dist/qtm4j/tool/test-automation/get-automation-history.js +70 -0
  75. package/dist/qtm4j/tool/test-automation/upload-automation-result.js +144 -0
  76. package/dist/qtm4j/tool/test-case/create-test-case.js +2 -1
  77. package/dist/qtm4j/tool/test-case/get-linked-requirements.js +67 -0
  78. package/dist/qtm4j/tool/test-case/get-test-cases.js +2 -1
  79. package/dist/qtm4j/tool/test-case/get-test-steps.js +2 -1
  80. package/dist/qtm4j/tool/test-case/link-requirements.js +124 -0
  81. package/dist/qtm4j/tool/test-case/unlink-requirements.js +116 -0
  82. package/dist/qtm4j/tool/test-case/update-test-case.js +2 -1
  83. package/dist/qtm4j/tool/test-cycle/create-test-cycle.js +81 -0
  84. package/dist/qtm4j/tool/test-cycle/get-linked-requirements.js +71 -0
  85. package/dist/qtm4j/tool/test-cycle/link-requirements.js +91 -0
  86. package/dist/qtm4j/tool/test-cycle/link-testcases.js +118 -0
  87. package/dist/qtm4j/tool/test-cycle/search-linked-testcases.js +114 -0
  88. package/dist/qtm4j/tool/test-cycle/search-test-cycle.js +137 -0
  89. package/dist/qtm4j/tool/test-cycle/unlink-requirements.js +87 -0
  90. package/dist/qtm4j/tool/test-cycle/unlink-testcases.js +103 -0
  91. package/dist/qtm4j/tool/test-cycle/update-test-cycle.js +162 -0
  92. package/dist/reflect/client.js +15 -24
  93. package/dist/reflect/config/constants.js +0 -2
  94. package/dist/reflect/tool/recording/add-prompt-step.js +1 -0
  95. package/dist/reflect/tool/recording/add-segment.js +1 -0
  96. package/dist/reflect/tool/recording/connect-to-session.js +1 -0
  97. package/dist/reflect/tool/recording/delete-previous-step.js +1 -0
  98. package/dist/reflect/tool/recording/get-screenshot.js +1 -0
  99. package/dist/reflect/tool/suites/cancel-suite-execution.js +1 -0
  100. package/dist/reflect/tool/suites/execute-suite.js +1 -0
  101. package/dist/reflect/tool/suites/get-suite-execution-status.js +1 -0
  102. package/dist/reflect/tool/suites/list-suite-executions.js +1 -0
  103. package/dist/reflect/tool/suites/list-suites.js +1 -0
  104. package/dist/reflect/tool/tests/get-test-status.js +1 -0
  105. package/dist/reflect/tool/tests/list-segments.js +1 -0
  106. package/dist/reflect/tool/tests/list-tests.js +1 -0
  107. package/dist/reflect/tool/tests/run-test.js +1 -0
  108. package/dist/swagger/client/portal-types.js +1 -1
  109. package/dist/swagger/client/tools.js +23 -0
  110. package/dist/swagger/client.js +25 -28
  111. package/dist/zephyr/client.js +14 -21
  112. package/dist/zephyr/tool/environment/get-environments.js +1 -0
  113. package/dist/zephyr/tool/folder/create-folder.js +1 -0
  114. package/dist/zephyr/tool/issue-link/get-test-cases.js +1 -0
  115. package/dist/zephyr/tool/issue-link/get-test-cycles.js +1 -0
  116. package/dist/zephyr/tool/issue-link/get-test-executions.js +1 -0
  117. package/dist/zephyr/tool/priority/get-priorities.js +1 -0
  118. package/dist/zephyr/tool/project/get-project.js +1 -0
  119. package/dist/zephyr/tool/project/get-projects.js +1 -0
  120. package/dist/zephyr/tool/status/get-statuses.js +1 -0
  121. package/dist/zephyr/tool/test-case/create-issue-link.js +1 -0
  122. package/dist/zephyr/tool/test-case/create-test-case.js +1 -0
  123. package/dist/zephyr/tool/test-case/create-test-script.js +1 -0
  124. package/dist/zephyr/tool/test-case/create-test-steps.js +1 -0
  125. package/dist/zephyr/tool/test-case/create-web-link.js +1 -0
  126. package/dist/zephyr/tool/test-case/get-links.js +1 -0
  127. package/dist/zephyr/tool/test-case/get-test-case.js +1 -0
  128. package/dist/zephyr/tool/test-case/get-test-cases.js +1 -0
  129. package/dist/zephyr/tool/test-case/get-test-script.js +1 -0
  130. package/dist/zephyr/tool/test-case/get-test-steps.js +1 -0
  131. package/dist/zephyr/tool/test-case/update-test-case.js +1 -0
  132. package/dist/zephyr/tool/test-cycle/create-issue-link.js +1 -0
  133. package/dist/zephyr/tool/test-cycle/create-test-cycle.js +1 -0
  134. package/dist/zephyr/tool/test-cycle/create-web-link.js +1 -0
  135. package/dist/zephyr/tool/test-cycle/get-links.js +1 -0
  136. package/dist/zephyr/tool/test-cycle/get-test-cycle.js +1 -0
  137. package/dist/zephyr/tool/test-cycle/get-test-cycles.js +1 -0
  138. package/dist/zephyr/tool/test-cycle/update-test-cycle.js +1 -0
  139. package/dist/zephyr/tool/test-execution/create-issue-link.js +1 -0
  140. package/dist/zephyr/tool/test-execution/create-test-execution.js +1 -0
  141. package/dist/zephyr/tool/test-execution/get-test-execution-links.js +1 -0
  142. package/dist/zephyr/tool/test-execution/get-test-execution.js +1 -0
  143. package/dist/zephyr/tool/test-execution/get-test-executions.js +1 -0
  144. package/dist/zephyr/tool/test-execution/get-test-steps.js +1 -0
  145. package/dist/zephyr/tool/test-execution/update-test-execution.js +1 -0
  146. package/dist/zephyr/tool/test-execution/update-test-steps.js +1 -0
  147. package/package.json +1 -1
  148. package/dist/common/request-context.js +0 -20
@@ -0,0 +1,95 @@
1
+ import zod__default from "zod";
2
+ import { SearchTestCaseResponse } from "./get-test-case.schema.js";
3
+ const GetLinkedRequirementsBody = zod__default.object({
4
+ key: zod__default.string().describe(
5
+ "Test case key in '{PROJECT_KEY}-TC-{number}' format (e.g., 'SCRUM-TC-145'). Required."
6
+ ),
7
+ versionNo: zod__default.number().int().optional().describe(
8
+ "Test case version number to retrieve linked requirements for. Defaults to the latest version."
9
+ ),
10
+ maxResults: zod__default.number().int().min(1).max(100).optional().describe("Maximum results per page (1-100). Default: 50."),
11
+ startAt: zod__default.number().int().min(0).optional().describe("Zero-indexed offset for pagination. Default: 0."),
12
+ sort: zod__default.string().optional().describe("Sort pattern in 'field:asc|desc' format. Default: 'key:desc'.")
13
+ });
14
+ const LinkedRequirementSchema = zod__default.object({
15
+ id: zod__default.number().int().describe("Jira issue ID."),
16
+ key: zod__default.string().describe("Jira issue key (e.g., 'SCRUM-1')."),
17
+ summary: zod__default.string().optional().describe("Requirement summary."),
18
+ status: zod__default.object({
19
+ id: zod__default.number().optional(),
20
+ name: zod__default.string().optional(),
21
+ iconUrl: zod__default.string().optional(),
22
+ color: zod__default.string().optional()
23
+ }).optional(),
24
+ priority: zod__default.object({
25
+ id: zod__default.number().optional(),
26
+ name: zod__default.string().optional(),
27
+ iconUrl: zod__default.string().optional()
28
+ }).optional(),
29
+ issueType: zod__default.object({
30
+ id: zod__default.number().optional(),
31
+ name: zod__default.string().optional(),
32
+ iconUrl: zod__default.string().optional()
33
+ }).optional(),
34
+ tcVersionNo: zod__default.number().int().optional().describe("Test case version this requirement is linked to.")
35
+ }).passthrough();
36
+ const GetLinkedRequirementsResponse = zod__default.object({
37
+ startAt: zod__default.number().int(),
38
+ maxResults: zod__default.number().int(),
39
+ total: zod__default.number().int().describe("Total linked requirements (across all pages)."),
40
+ data: zod__default.array(LinkedRequirementSchema).describe("Linked requirements on this page.")
41
+ });
42
+ const SprintFilter = zod__default.object({
43
+ boardName: zod__default.string(),
44
+ sprintName: zod__default.string()
45
+ });
46
+ const GetLinkedTestCasesFilter = zod__default.object({
47
+ key: zod__default.string().optional().describe("Test case key (e.g., 'SCRUM-TC-145')."),
48
+ summary: zod__default.string().optional(),
49
+ folderId: zod__default.number().int().optional().describe("Folder ID."),
50
+ description: zod__default.string().optional(),
51
+ assignee: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of assignees."),
52
+ reporter: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of reporters."),
53
+ createdBy: zod__default.array(zod__default.string()).optional(),
54
+ updatedBy: zod__default.array(zod__default.string()).optional(),
55
+ createdOn: zod__default.string().optional().describe("Date range 'dd/MMM/yyyy,dd/MMM/yyyy' for creation date."),
56
+ updatedOn: zod__default.string().optional().describe("Date range 'dd/MMM/yyyy,dd/MMM/yyyy' for last update date."),
57
+ labels: zod__default.array(zod__default.string()).optional().describe("Jira label names."),
58
+ components: zod__default.array(zod__default.string()).optional().describe("Jira component names."),
59
+ testCaseStatus: zod__default.string().optional().describe("Test case archive status: 'active', 'archived', or 'deleted'."),
60
+ latestExecutionResult: zod__default.array(zod__default.string()).optional().describe("Latest execution results (e.g., ['passed', 'failed'])."),
61
+ fixVersions: zod__default.array(zod__default.string()).optional().describe("Fix version names."),
62
+ sprint: zod__default.array(SprintFilter).optional(),
63
+ status: zod__default.array(zod__default.string()).optional().describe("Test case status names."),
64
+ priority: zod__default.array(zod__default.string()).optional().describe("Priority names (e.g., ['High', 'Low'])."),
65
+ estimatedTime: zod__default.string().optional(),
66
+ requirementIds: zod__default.array(zod__default.number().int()).optional().describe("Requirement IDs."),
67
+ searchText: zod__default.string().optional().describe("Free-text search."),
68
+ searchInFields: zod__default.array(zod__default.string()).optional().describe("Fields to search in (e.g., ['summary', 'description'])."),
69
+ filterId: zod__default.number().int().optional().describe("Saved filter ID."),
70
+ isAutomated: zod__default.boolean().optional(),
71
+ aiGenerated: zod__default.boolean().optional()
72
+ });
73
+ const GetLinkedTestCasesForRequirementBody = zod__default.object({
74
+ requirementKey: zod__default.string().describe(
75
+ "Jira requirement key (e.g., 'SCRUM-1'). Resolved to the internal Jira issue ID automatically."
76
+ ),
77
+ filter: GetLinkedTestCasesFilter.optional().describe(
78
+ "Optional filter to narrow down the linked test cases. projectId is auto-filled from the active project context."
79
+ ),
80
+ fields: zod__default.string().optional().describe(
81
+ "Comma-separated field names to include in each result. Allowed: summary, priority, status, estimatedTime, executed, description, assignee, reporter, labels, components, fixVersions, sprint, isAutomated, folder, updated, created, seqNo, flakyScore, passRateScore."
82
+ ),
83
+ maxResults: zod__default.number().int().min(1).max(100).optional().describe("Maximum results per page (1-100). Default: 50."),
84
+ startAt: zod__default.number().int().min(0).optional().describe("Zero-indexed offset for pagination. Default: 0."),
85
+ sort: zod__default.string().optional().describe(
86
+ "Sort in 'field:asc|desc' format. Allowed fields: key, summary, created, updated, estimatedTime, status, priority, latestVersionNo, seqNo, flakyScore, passRateScore."
87
+ )
88
+ });
89
+ export {
90
+ GetLinkedRequirementsBody,
91
+ GetLinkedRequirementsResponse,
92
+ GetLinkedTestCasesFilter,
93
+ GetLinkedTestCasesForRequirementBody,
94
+ SearchTestCaseResponse as GetLinkedTestCasesResponse
95
+ };
@@ -0,0 +1,109 @@
1
+ import zod__default from "zod";
2
+ zod__default.object({
3
+ id: zod__default.string(),
4
+ versionNo: zod__default.number().int()
5
+ });
6
+ const SprintFilter = zod__default.object({
7
+ boardName: zod__default.string(),
8
+ sprintName: zod__default.string()
9
+ });
10
+ const LinkTestCaseFilter = zod__default.object({
11
+ key: zod__default.string().optional().describe("Test case key (e.g., 'SCRUM-TC-145')."),
12
+ summary: zod__default.string().optional().describe("Test case summary to filter by."),
13
+ folderId: zod__default.number().int().optional().describe("Folder ID to filter by."),
14
+ description: zod__default.string().optional().describe("Test case description to filter by."),
15
+ assignee: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of assignees."),
16
+ reporter: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of reporters."),
17
+ createdBy: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of creators."),
18
+ updatedBy: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of last updaters."),
19
+ createdOn: zod__default.string().optional().describe(
20
+ "Creation date range as comma-separated start,end in dd/MMM/yyyy format (e.g., '01/Jan/2024,31/Jan/2024')."
21
+ ),
22
+ updatedOn: zod__default.string().optional().describe(
23
+ "Update date range as comma-separated start,end in dd/MMM/yyyy format."
24
+ ),
25
+ labels: zod__default.array(zod__default.string()).optional().describe("Jira label names."),
26
+ components: zod__default.array(zod__default.string()).optional().describe("Jira component names."),
27
+ latestExecutionResult: zod__default.array(zod__default.string()).optional().describe(
28
+ "Latest execution results to filter by (e.g., ['passed', 'failed'])."
29
+ ),
30
+ fixVersions: zod__default.array(zod__default.string()).optional().describe("Jira fix version names."),
31
+ sprint: zod__default.array(SprintFilter).optional().describe(
32
+ "Sprint filters with boardName and sprintName (e.g., [{boardName:'board1', sprintName:'sprint1'}])."
33
+ ),
34
+ status: zod__default.array(zod__default.string()).optional().describe("Test case status names (e.g., ['To Do', 'In Progress'])."),
35
+ priority: zod__default.array(zod__default.string()).optional().describe("Priority names (e.g., ['High', 'Low'])."),
36
+ estimatedTime: zod__default.string().optional().describe("Estimated time filter in HH:MM:SS format."),
37
+ requirementIds: zod__default.array(zod__default.number().int()).optional().describe("Jira issue IDs of linked requirements."),
38
+ excludeRequirementId: zod__default.number().int().optional().describe("Exclude test cases already linked to this requirement ID."),
39
+ searchText: zod__default.string().optional().describe("Free-text search across test case fields."),
40
+ searchInFields: zod__default.array(zod__default.string()).optional().describe("Fields to search in (e.g., ['summary', 'description'])."),
41
+ filterId: zod__default.number().int().optional().describe("Saved filter ID."),
42
+ isAutomated: zod__default.boolean().optional().describe("Filter automated test cases."),
43
+ withChild: zod__default.boolean().optional().describe("Include test cases in child folders."),
44
+ aiGenerated: zod__default.boolean().optional().describe("Filter AI-generated test cases."),
45
+ excludeUids: zod__default.array(zod__default.string()).optional().describe("Test case UIDs to exclude from the filter result.")
46
+ });
47
+ const UnlinkTestCaseFilter = zod__default.object({
48
+ key: zod__default.string().optional().describe("Test case key."),
49
+ summary: zod__default.string().optional(),
50
+ folderId: zod__default.number().int().optional(),
51
+ description: zod__default.string().optional(),
52
+ assignee: zod__default.array(zod__default.string()).optional(),
53
+ reporter: zod__default.array(zod__default.string()).optional(),
54
+ createdBy: zod__default.array(zod__default.string()).optional(),
55
+ updatedBy: zod__default.array(zod__default.string()).optional(),
56
+ createdOn: zod__default.string().optional(),
57
+ updatedOn: zod__default.string().optional(),
58
+ labels: zod__default.array(zod__default.string()).optional(),
59
+ components: zod__default.array(zod__default.string()).optional(),
60
+ latestExecutionResult: zod__default.array(zod__default.string()).optional(),
61
+ fixVersions: zod__default.array(zod__default.string()).optional(),
62
+ sprint: zod__default.array(SprintFilter).optional(),
63
+ status: zod__default.array(zod__default.string()).optional(),
64
+ priority: zod__default.array(zod__default.string()).optional(),
65
+ estimatedTime: zod__default.string().optional(),
66
+ requirementIds: zod__default.array(zod__default.number().int()).optional(),
67
+ searchText: zod__default.string().optional(),
68
+ searchInFields: zod__default.array(zod__default.string()).optional(),
69
+ filterId: zod__default.number().int().optional(),
70
+ isAutomated: zod__default.boolean().optional(),
71
+ excludeTestCases: zod__default.array(zod__default.object({ id: zod__default.string(), versionNo: zod__default.number().int() })).optional().describe("Test cases to exclude from the filter result.")
72
+ });
73
+ const LinkTestCasesToRequirementBody = zod__default.object({
74
+ requirementKey: zod__default.string().describe(
75
+ "Jira requirement key (e.g., 'SCRUM-1'). Resolved to the internal Jira issue ID automatically."
76
+ ),
77
+ testCaseKeys: zod__default.array(zod__default.string()).optional().describe(
78
+ "Test case keys to link (e.g., ['SCRUM-TC-1', 'SCRUM-TC-2']). Resolved to internal IDs and latest versions automatically. Provide this OR filter — not both."
79
+ ),
80
+ filter: LinkTestCaseFilter.optional().describe(
81
+ "Filter criteria to select test cases to link. Use instead of testCaseKeys when selecting by criteria. projectId is auto-filled from the active project context."
82
+ ),
83
+ sort: zod__default.string().optional().describe(
84
+ "Sort order for filter results in 'field:asc|desc' format (e.g., 'key:asc'). Allowable fields: key, summary, created, updated, estimatedTime, status, priority, latestVersionNo, flakyScore, passRateScore."
85
+ )
86
+ });
87
+ const UnlinkTestCasesFromRequirementBody = zod__default.object({
88
+ requirementKey: zod__default.string().describe(
89
+ "Jira requirement key (e.g., 'SCRUM-1'). Resolved to the internal Jira issue ID automatically."
90
+ ),
91
+ testCaseKeys: zod__default.array(zod__default.string()).optional().describe(
92
+ "Test case keys to unlink (e.g., ['SCRUM-TC-1', 'SCRUM-TC-2']). Resolved to internal IDs and latest versions automatically. Provide this OR filter — not both."
93
+ ),
94
+ filter: UnlinkTestCaseFilter.optional().describe(
95
+ "Filter criteria to select test cases to unlink. Use instead of testCaseKeys when selecting by criteria. projectId is auto-filled from the active project context."
96
+ )
97
+ });
98
+ const RequirementTestCaseLinkResponse = zod__default.object({
99
+ requirementKey: zod__default.string(),
100
+ linked: zod__default.literal(true).optional(),
101
+ unlinked: zod__default.literal(true).optional()
102
+ });
103
+ export {
104
+ LinkTestCaseFilter,
105
+ LinkTestCasesToRequirementBody,
106
+ RequirementTestCaseLinkResponse,
107
+ UnlinkTestCaseFilter,
108
+ UnlinkTestCasesFromRequirementBody
109
+ };
@@ -0,0 +1,133 @@
1
+ import * as zod from "zod";
2
+ import { SORT_DEFAULTS, PAGINATION } from "../config/constants.js";
3
+ const DATE_RANGE_REGEX = /^\d{2}\/[A-Z][a-z]{2}\/\d{4},\d{2}\/[A-Z][a-z]{2}\/\d{4}$/;
4
+ const DATE_RANGE_DESCRIPTION = "Inclusive date range. Format: 'dd/MMM/yyyy,dd/MMM/yyyy' e.g. '02/Apr/2026,15/May/2026'. Month abbreviation is case-sensitive (Apr not apr or APR). Always provide two dates separated by a comma.";
5
+ const SearchTestCycleFilter = zod.object({
6
+ projectId: zod.number().optional().describe(
7
+ "Numeric project ID. Auto-injected from active project context — do not provide."
8
+ ),
9
+ status: zod.array(zod.string()).optional().describe(
10
+ "Status names to include (OR logic within array). Examples: ['In Progress', 'To Do']. Common values: 'To Do', 'In Progress', 'Done'."
11
+ ),
12
+ priority: zod.array(zod.string()).optional().describe(
13
+ "Priority names to include (OR logic within array). Examples: ['High'], ['High', 'Medium']. Common values: 'High', 'Medium', 'Low'."
14
+ ),
15
+ assignee: zod.array(zod.string()).optional().describe(
16
+ "Jira account IDs of assignees (OR logic within array). Example: ['5b10a2844c20165700ede21f']. Multiple IDs match test cycles assigned to any of them."
17
+ ),
18
+ reporter: zod.array(zod.string()).optional().describe(
19
+ "Jira account IDs of reporters (OR logic within array). Example: ['5b10a2844c20165700ede21f']."
20
+ ),
21
+ folderId: zod.number().optional().describe(
22
+ "Folder ID to restrict results to (numeric). Right-click a folder in QTM4J and select 'Copy Folder Id'."
23
+ ),
24
+ labels: zod.array(zod.string()).optional().describe(
25
+ "Label names to include (OR logic within array). Example: ['Release_1', 'Sprint 1']. Use exact label names as configured in the project."
26
+ ),
27
+ components: zod.array(zod.string()).optional().describe(
28
+ "Component names to include (OR logic within array). Example: ['UI', 'Cloud']. Use exact component names as configured in the project."
29
+ ),
30
+ plannedStartDate: zod.string().regex(
31
+ DATE_RANGE_REGEX,
32
+ "Invalid format. Use dd/MMM/yyyy,dd/MMM/yyyy e.g. 02/Apr/2026,15/May/2026"
33
+ ).optional().describe(DATE_RANGE_DESCRIPTION),
34
+ plannedEndDate: zod.string().regex(
35
+ DATE_RANGE_REGEX,
36
+ "Invalid format. Use dd/MMM/yyyy,dd/MMM/yyyy e.g. 02/Apr/2026,15/May/2026"
37
+ ).optional().describe(DATE_RANGE_DESCRIPTION),
38
+ searchText: zod.string().optional().describe(
39
+ "Free-text search across key, summary, and description. Case-insensitive. Example: 'regression sprint'"
40
+ ),
41
+ createdOn: zod.string().regex(
42
+ DATE_RANGE_REGEX,
43
+ "Invalid format. Use dd/MMM/yyyy,dd/MMM/yyyy e.g. 01/May/2026,20/May/2026"
44
+ ).optional().describe(
45
+ `Filter by creation date range (inclusive). ${DATE_RANGE_DESCRIPTION}`
46
+ ),
47
+ updatedOn: zod.string().regex(
48
+ DATE_RANGE_REGEX,
49
+ "Invalid format. Use dd/MMM/yyyy,dd/MMM/yyyy e.g. 01/May/2026,21/May/2026"
50
+ ).optional().describe(
51
+ "Filter by last-updated date range (inclusive). " + DATE_RANGE_DESCRIPTION
52
+ ),
53
+ isAutomated: zod.boolean().optional().describe(
54
+ "Automation status filter: true = automated tests only, false = manual tests only. Omit to include both."
55
+ ),
56
+ aiGenerated: zod.boolean().optional().describe(
57
+ "AI generation flag: true = AI-generated test cycles only, false = human-authored only. Omit to include both."
58
+ )
59
+ }).describe(
60
+ "Filter criteria — multiple fields are combined with AND; multiple values within one field use OR."
61
+ );
62
+ const FIELDS_DESCRIPTION = "Fields to include in each result object. If omitted, server returns its default set (NOTE: plannedStartDate and plannedEndDate are NOT in the default response — include them explicitly when needed). Available fields: key, summary, description, status, priority, assignee, reporter, isAutomated, plannedStartDate, plannedEndDate, labels, components, fixVersions, sprint, defectCount, estimatedTime, actualTime, created, updated. Example: ['key', 'summary', 'status', 'assignee', 'plannedStartDate', 'plannedEndDate']";
63
+ const SearchTestCycleBody = zod.object({
64
+ filter: SearchTestCycleFilter.optional(),
65
+ fields: zod.array(zod.string()).optional().describe(FIELDS_DESCRIPTION),
66
+ startAt: zod.number().min(0).optional().default(PAGINATION.DEFAULT_START_AT).describe(
67
+ "Zero-indexed offset for pagination (URL query param). Default: 0."
68
+ ),
69
+ maxResults: zod.number().min(PAGINATION.MIN_ALLOWED_RESULTS).max(PAGINATION.MAX_ALLOWED_RESULTS_TEST_CYCLES).optional().default(PAGINATION.DEFAULT_MAX_RESULTS_TEST_CYCLES).describe(
70
+ `Number of results per page (URL query param). Default: ${PAGINATION.DEFAULT_MAX_RESULTS_TEST_CYCLES}. Maximum: ${PAGINATION.MAX_ALLOWED_RESULTS_TEST_CYCLES}. To page through results, increment startAt by ${PAGINATION.DEFAULT_MAX_RESULTS_TEST_CYCLES} until startAt >= total.`
71
+ ),
72
+ sort: zod.string().optional().default(SORT_DEFAULTS.TEST_CYCLES).describe(
73
+ `Sort pattern sent as a URL query param. Format: 'fieldName:order'. Default: '${SORT_DEFAULTS.TEST_CYCLES}'. Order values: 'asc' (lowest/oldest first) or 'desc' (highest/newest first). Sortable fields: key, summary, status, plannedStartDate, plannedEndDate, defectCount. Examples: 'key:asc', 'plannedStartDate:desc'`
74
+ )
75
+ });
76
+ const TestCycleStatusSchema = zod.looseObject({
77
+ id: zod.number().optional().describe("Numeric status ID"),
78
+ name: zod.string().optional().describe("Status display name e.g. 'In Progress'"),
79
+ color: zod.string().nullable().optional().describe("Hex color e.g. '#ffd351'")
80
+ });
81
+ const TestCyclePrioritySchema = zod.looseObject({
82
+ id: zod.number().optional().describe("Numeric priority ID"),
83
+ name: zod.string().optional().describe("Priority display name e.g. 'High'"),
84
+ color: zod.string().nullable().optional().describe("Hex color")
85
+ });
86
+ const TestCycleLabelSchema = zod.looseObject({
87
+ id: zod.number().optional(),
88
+ name: zod.string().optional()
89
+ });
90
+ const TestCycleComponentSchema = zod.looseObject({
91
+ id: zod.number().optional(),
92
+ name: zod.string().optional()
93
+ });
94
+ const TestCycleSearchItemSchema = zod.looseObject({
95
+ id: zod.string().describe("Internal UID of the test cycle"),
96
+ key: zod.string().describe("Human-readable key e.g. 'PROJ-TR-212'"),
97
+ projectId: zod.number().optional().describe("Numeric project ID"),
98
+ summary: zod.string().optional().describe("Test cycle name / title"),
99
+ description: zod.string().nullable().optional(),
100
+ status: TestCycleStatusSchema.optional().describe(
101
+ "Status object (empty {} when not requested)"
102
+ ),
103
+ priority: TestCyclePrioritySchema.optional().describe(
104
+ "Priority object (empty {} when not requested)"
105
+ ),
106
+ assignee: zod.string().nullable().optional().describe("Assignee Jira account ID, or null if unassigned"),
107
+ reporter: zod.string().nullable().optional(),
108
+ isAutomated: zod.boolean().optional(),
109
+ plannedStartDate: zod.string().nullable().optional(),
110
+ plannedEndDate: zod.string().nullable().optional(),
111
+ labels: zod.array(TestCycleLabelSchema).nullable().optional(),
112
+ components: zod.array(TestCycleComponentSchema).nullable().optional(),
113
+ fixVersions: zod.array(zod.any()).nullable().optional(),
114
+ sprint: zod.any().nullable().optional(),
115
+ defectCount: zod.number().nullable().optional(),
116
+ estimatedTime: zod.any().nullable().optional(),
117
+ actualTime: zod.any().nullable().optional(),
118
+ created: zod.any().optional(),
119
+ updated: zod.any().optional(),
120
+ archived: zod.boolean().optional()
121
+ });
122
+ const SearchTestCycleResponse = zod.object({
123
+ startAt: zod.number().describe("Offset of this page"),
124
+ maxResults: zod.number().describe("Page size used for this response"),
125
+ total: zod.number().describe("Total matching test cycles across all pages"),
126
+ data: zod.array(TestCycleSearchItemSchema).describe("Test cycles on this page")
127
+ });
128
+ export {
129
+ SearchTestCycleBody,
130
+ SearchTestCycleFilter,
131
+ SearchTestCycleResponse,
132
+ TestCycleSearchItemSchema
133
+ };
@@ -0,0 +1,260 @@
1
+ import zod__default from "zod";
2
+ const SprintFilter = zod__default.object({
3
+ boardName: zod__default.string(),
4
+ sprintName: zod__default.string()
5
+ });
6
+ const TestCaseVersionSkip = zod__default.object({
7
+ testCaseId: zod__default.string(),
8
+ version: zod__default.number().int()
9
+ });
10
+ const LinkToCycleTestCaseFilter = zod__default.object({
11
+ key: zod__default.string().optional().describe("Test case key (e.g., 'SCRUM-TC-145')."),
12
+ summary: zod__default.string().optional().describe("Test case summary."),
13
+ folderId: zod__default.number().int().optional().describe("Folder ID."),
14
+ description: zod__default.string().optional().describe("Test case description."),
15
+ assignee: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of assignees."),
16
+ reporter: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of reporters."),
17
+ createdBy: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of creators."),
18
+ updatedBy: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of last updaters."),
19
+ createdOn: zod__default.string().optional().describe("Creation date range as 'dd/MMM/yyyy,dd/MMM/yyyy'."),
20
+ updatedOn: zod__default.string().optional().describe("Update date range as 'dd/MMM/yyyy,dd/MMM/yyyy'."),
21
+ labels: zod__default.array(zod__default.string()).optional().describe("Jira label names."),
22
+ components: zod__default.array(zod__default.string()).optional().describe("Jira component names."),
23
+ latestExecutionResult: zod__default.array(zod__default.string()).optional().describe("Latest execution results (e.g., ['passed', 'failed'])."),
24
+ fixVersions: zod__default.array(zod__default.string()).optional().describe("Jira fix version names."),
25
+ sprint: zod__default.array(SprintFilter).optional().describe("Sprint filters with boardName and sprintName."),
26
+ status: zod__default.array(zod__default.string()).optional().describe("Test case status names."),
27
+ priority: zod__default.array(zod__default.string()).optional().describe("Priority names (e.g., ['High', 'Low'])."),
28
+ isAutomated: zod__default.boolean().optional().describe("Filter automated test cases."),
29
+ archived: zod__default.boolean().optional().describe("Filter archived test cases."),
30
+ shareable: zod__default.boolean().optional().describe("Filter shareable test cases."),
31
+ estimatedTime: zod__default.string().optional().describe("Estimated time in HH:MM:SS format."),
32
+ requirementIds: zod__default.array(zod__default.number().int()).optional().describe("Jira issue IDs of linked requirements."),
33
+ requirementJQL: zod__default.string().optional().describe("JQL to filter by linked requirements."),
34
+ excludeRequirementId: zod__default.number().int().optional().describe("Exclude test cases linked to this requirement ID."),
35
+ excludeCycleId: zod__default.string().optional().describe("Exclude test cases already in this test cycle ID."),
36
+ searchText: zod__default.string().optional().describe("Free-text search across test case fields."),
37
+ searchInFields: zod__default.array(zod__default.string()).optional().describe("Fields to search in (e.g., ['summary', 'description'])."),
38
+ filterId: zod__default.number().int().optional().describe("Saved filter ID."),
39
+ issueKeys: zod__default.array(zod__default.string()).optional().describe("Jira issue keys to filter by."),
40
+ withChild: zod__default.boolean().optional().describe("Include test cases in child folders."),
41
+ aiGenerated: zod__default.boolean().optional().describe("Filter AI-generated test cases."),
42
+ skipTestcase: zod__default.array(zod__default.number().int()).optional().describe("Test case IDs to skip."),
43
+ testCaseVersionIds: zod__default.array(zod__default.number().int()).optional().describe("Specific test case version IDs to include."),
44
+ excludeUids: zod__default.array(zod__default.string()).optional().describe("Test case UIDs to exclude."),
45
+ skipTestCaseVersions: zod__default.array(TestCaseVersionSkip).optional().describe("Test case versions to skip (each with testCaseId and version)."),
46
+ excludeTestCases: zod__default.array(TestCaseVersionSkip).optional().describe(
47
+ "Test case versions to exclude (each with testCaseId and version)."
48
+ )
49
+ });
50
+ const UnlinkFromCycleTestCaseFilter = zod__default.object({
51
+ key: zod__default.string().optional().describe("Test case key (e.g., 'SCRUM-TC-145')."),
52
+ summary: zod__default.string().optional(),
53
+ searchText: zod__default.string().optional(),
54
+ description: zod__default.string().optional(),
55
+ assignee: zod__default.array(zod__default.string()).optional(),
56
+ reporter: zod__default.array(zod__default.string()).optional(),
57
+ labels: zod__default.array(zod__default.string()).optional(),
58
+ components: zod__default.array(zod__default.string()).optional(),
59
+ fixVersions: zod__default.array(zod__default.string()).optional(),
60
+ sprint: zod__default.array(SprintFilter).optional(),
61
+ build: zod__default.array(zod__default.string()).optional().describe("Build names."),
62
+ status: zod__default.array(zod__default.string()).optional(),
63
+ priority: zod__default.array(zod__default.string()).optional(),
64
+ executionResult: zod__default.array(zod__default.string()).optional().describe("Execution results (e.g., ['Pass', 'Fail', 'Blocked'])."),
65
+ environment: zod__default.array(zod__default.string()).optional().describe("Environment names."),
66
+ tcWithDefects: zod__default.boolean().optional().describe("Filter test cases with defects."),
67
+ estimatedTime: zod__default.string().optional(),
68
+ actualTime: zod__default.string().optional(),
69
+ testCaseStatus: zod__default.string().optional().describe("Test case approval status."),
70
+ executionAssignee: zod__default.array(zod__default.string()).optional().describe("Jira account IDs of execution assignees."),
71
+ requirementId: zod__default.array(zod__default.number().int()).optional().describe("Requirement IDs linked to test cases."),
72
+ isAutomated: zod__default.boolean().optional(),
73
+ searchInFields: zod__default.array(zod__default.string()).optional().describe("Fields to search in (e.g., ['summary', 'description'])."),
74
+ createdBy: zod__default.array(zod__default.string()).optional(),
75
+ createdOn: zod__default.string().optional(),
76
+ updatedBy: zod__default.array(zod__default.string()).optional(),
77
+ updatedOn: zod__default.string().optional(),
78
+ filterId: zod__default.number().int().optional(),
79
+ folderId: zod__default.number().int().optional(),
80
+ executedBy: zod__default.string().optional().describe("Jira account ID of the user who executed the test case."),
81
+ executionPlannedDate: zod__default.string().optional().describe("Planned execution date."),
82
+ aiGenerated: zod__default.boolean().optional(),
83
+ excludeTestCases: zod__default.array(TestCaseVersionSkip).optional().describe("Test case versions to exclude from results."),
84
+ skipTestCaseVersions: zod__default.array(TestCaseVersionSkip).optional().describe("Test case versions to skip.")
85
+ });
86
+ const LinkTestCasesToCycleBody = zod__default.object({
87
+ cycleKey: zod__default.string().describe(
88
+ "Test Cycle key (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically."
89
+ ),
90
+ testCaseKeys: zod__default.array(zod__default.string()).optional().describe(
91
+ "Test case keys to link (e.g., ['SCRUM-TC-1', 'SCRUM-TC-2']). Resolved to internal IDs and latest versions automatically. Provide this OR filter — not both."
92
+ ),
93
+ filter: LinkToCycleTestCaseFilter.optional().describe(
94
+ "Filter criteria to select test cases to link. projectId is auto-filled from the active project context."
95
+ ),
96
+ sort: zod__default.string().optional().describe(
97
+ "Sort order in 'field:asc|desc' format (e.g., 'createdOn:desc'). Default is 'createdOn:desc'."
98
+ ),
99
+ assignee: zod__default.string().optional().describe("Jira account ID of the assignee for the linked executions."),
100
+ environmentId: zod__default.number().int().optional().describe("Environment ID from 'Get all environments in a project'."),
101
+ buildId: zod__default.number().int().optional().describe("Build ID from 'Get all builds in a project'."),
102
+ actualTime: zod__default.string().optional().describe("Actual time spent in HH:mm format (e.g., '02:30')."),
103
+ startNewExecution: zod__default.boolean().optional().describe("Start a new execution for linked test cases. Default is false."),
104
+ executionPlannedDate: zod__default.string().optional().describe(
105
+ "Planned execution date in yyyy-MM-dd format (e.g., '2023-12-31')."
106
+ ),
107
+ qiGenerated: zod__default.boolean().optional().describe("Flag indicating AI-generated test cases. Default is false.")
108
+ });
109
+ const UnlinkTestCasesFromCycleBody = zod__default.object({
110
+ cycleKey: zod__default.string().describe(
111
+ "Test Cycle key (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically."
112
+ ),
113
+ testCaseKeys: zod__default.array(zod__default.string()).optional().describe(
114
+ "Test case keys to unlink (e.g., ['SCRUM-TC-1', 'SCRUM-TC-2']). Resolved to internal IDs and latest versions automatically. Provide this OR filter or unlinkAll — not combined."
115
+ ),
116
+ unlinkAll: zod__default.boolean().optional().describe(
117
+ "If true, all test cases are unlinked from the cycle. Ignores testCaseKeys and filter."
118
+ ),
119
+ filter: UnlinkFromCycleTestCaseFilter.optional().describe(
120
+ "Filter criteria to select test cases to unlink. projectId is auto-filled from the active project context."
121
+ )
122
+ });
123
+ const TestCycleLinkResponse = zod__default.object({
124
+ cycleKey: zod__default.string(),
125
+ linked: zod__default.literal(true).optional(),
126
+ unlinked: zod__default.literal(true).optional()
127
+ });
128
+ const SearchLinkedTestCasesInCycleFilter = zod__default.object({
129
+ key: zod__default.string().optional().describe("Jira issue key (e.g., 'PROJ-123')."),
130
+ summary: zod__default.string().optional().describe("Test case summary text."),
131
+ description: zod__default.string().optional().describe("Test case description text."),
132
+ searchText: zod__default.string().optional().describe("Free-text search within fields."),
133
+ searchInFields: zod__default.array(zod__default.string()).optional().describe("Fields to search in (e.g., ['summary', 'description'])."),
134
+ assignee: zod__default.array(zod__default.string()).optional().describe("Jira user UUIDs of assignees."),
135
+ reporter: zod__default.array(zod__default.string()).optional().describe("Jira user UUIDs of reporters."),
136
+ labels: zod__default.array(zod__default.string()).optional().describe("Label names."),
137
+ components: zod__default.array(zod__default.string()).optional().describe("Component names."),
138
+ fixVersions: zod__default.array(zod__default.string()).optional().describe("Fix version names."),
139
+ status: zod__default.array(zod__default.string()).optional().describe("Test case status names."),
140
+ priority: zod__default.array(zod__default.string()).optional().describe("Priority names (e.g., ['High', 'Low'])."),
141
+ executionResult: zod__default.array(zod__default.string()).optional().describe("Execution result values (e.g., ['Pass', 'Fail', 'Blocked'])."),
142
+ environment: zod__default.array(zod__default.string()).optional().describe("Environment names."),
143
+ tcWithDefects: zod__default.boolean().optional().describe("Filter test cases that have defects linked."),
144
+ isAutomated: zod__default.boolean().optional().describe("Filter automated test cases."),
145
+ folderId: zod__default.number().int().optional().describe("Folder ID to filter by."),
146
+ executionAssignee: zod__default.array(zod__default.string()).optional().describe("Jira user UUIDs of execution assignees."),
147
+ executionPlannedDate: zod__default.string().optional().describe(
148
+ "Planned execution date range in 'dd/mmm/yyyy,dd/mmm/yyyy' format."
149
+ ),
150
+ createdOn: zod__default.string().optional().describe("Creation date range in 'dd/mmm/yyyy,dd/mmm/yyyy' format."),
151
+ updatedOn: zod__default.string().optional().describe("Last-updated date range in 'dd/mmm/yyyy,dd/mmm/yyyy' format."),
152
+ createdBy: zod__default.array(zod__default.string()).optional().describe("Jira user UUIDs of creators."),
153
+ updatedBy: zod__default.array(zod__default.string()).optional().describe("Jira user UUIDs of last updaters."),
154
+ aiGenerated: zod__default.boolean().optional().describe("Filter AI-generated test cases."),
155
+ filterId: zod__default.number().int().optional().describe("Saved filter ID.")
156
+ });
157
+ const SearchLinkedTestCasesInCycleBody = zod__default.object({
158
+ cycleKey: zod__default.string().describe(
159
+ "Test Cycle key in '{PROJECT_KEY}-TR-{id}' format (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically."
160
+ ),
161
+ fields: zod__default.array(zod__default.string()).optional().describe(
162
+ "Fields to include in each result object. Allowed: id, key, summary, description, executionResult, status, priority, environment, tcWithDefects, estimatedTime, actualTime, createdOn, updatedOn, sprint, seqNo, latestTcExecutionId, customFields, flakyScore, passRateScore. Omit to return all fields."
163
+ ),
164
+ maxResults: zod__default.number().int().min(1).max(100).optional().default(50).describe("Maximum results per page (1-100). Default: 50."),
165
+ sort: zod__default.string().optional().describe(
166
+ "Sort pattern in 'field:asc|desc' format (e.g., 'key:desc'). Allowed sort fields: id, key, summary, description, executionResult, status, priority, environment, tcWithDefects, estimatedTime, actualTime, createdOn, updatedOn, sprint, flakyScore, passRateScore."
167
+ ),
168
+ startAt: zod__default.number().int().min(0).optional().default(0).describe("Zero-indexed offset for pagination. Default: 0."),
169
+ filter: SearchLinkedTestCasesInCycleFilter.optional().describe(
170
+ "Optional filter criteria to narrow down results. projectId is auto-filled from the active project context."
171
+ )
172
+ });
173
+ const TestCycleExecutionSchema = zod__default.object({
174
+ id: zod__default.string().optional().describe("Internal test case execution ID."),
175
+ key: zod__default.string().optional().describe("Test case key (e.g., 'SCRUM-TC-145')."),
176
+ summary: zod__default.string().optional().describe("Test case summary."),
177
+ description: zod__default.string().nullable().optional(),
178
+ executionResult: zod__default.string().nullable().optional().describe("Execution result (e.g., 'Pass', 'Fail', 'Blocked')."),
179
+ status: zod__default.any().optional().describe("Test case status."),
180
+ priority: zod__default.any().optional().describe("Test case priority."),
181
+ environment: zod__default.string().nullable().optional(),
182
+ tcWithDefects: zod__default.boolean().optional(),
183
+ estimatedTime: zod__default.string().nullable().optional(),
184
+ actualTime: zod__default.string().nullable().optional(),
185
+ createdOn: zod__default.string().nullable().optional(),
186
+ updatedOn: zod__default.string().nullable().optional(),
187
+ sprint: zod__default.any().nullable().optional(),
188
+ seqNo: zod__default.number().nullable().optional(),
189
+ latestTcExecutionId: zod__default.string().nullable().optional(),
190
+ customFields: zod__default.any().nullable().optional(),
191
+ flakyScore: zod__default.number().nullable().optional(),
192
+ passRateScore: zod__default.number().nullable().optional()
193
+ }).passthrough();
194
+ const SearchLinkedTestCasesInCycleResponse = zod__default.object({
195
+ total: zod__default.number().int().describe(
196
+ "Total test case executions matching the filter (across all pages)."
197
+ ),
198
+ startAt: zod__default.number().int().describe("Offset of this page."),
199
+ maxResults: zod__default.number().int().describe("Page size used for this response."),
200
+ data: zod__default.array(TestCycleExecutionSchema).describe("Test case execution entries on this page.")
201
+ });
202
+ const GetLinkedRequirementsForCycleBody = zod__default.object({
203
+ cycleKey: zod__default.string().describe(
204
+ "Test cycle key in '{PROJECT_KEY}-TR-{id}' format (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically."
205
+ ),
206
+ maxResults: zod__default.number().int().min(1).max(100).optional().default(50).describe("Maximum results per page (1-100). Default: 50."),
207
+ startAt: zod__default.number().int().min(0).optional().default(0).describe("Zero-indexed offset for pagination. Default: 0."),
208
+ sort: zod__default.string().optional().describe(
209
+ "Sort pattern in 'field:asc|desc' format. Allowed fields: key, status, priority. Default: 'key:desc'."
210
+ )
211
+ });
212
+ const LinkRequirementsToCycleBody = zod__default.object({
213
+ cycleKey: zod__default.string().describe(
214
+ "Test cycle key in '{PROJECT_KEY}-TR-{id}' format (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically."
215
+ ),
216
+ requirementKeys: zod__default.array(zod__default.string()).optional().describe(
217
+ "List of Jira requirement keys to link (e.g., ['SCRUM-1', 'SCRUM-2']). Resolved to internal IDs automatically. Provide this OR filter.jql — not both."
218
+ ),
219
+ filter: zod__default.object({
220
+ jql: zod__default.string().describe(
221
+ 'JQL query to filter requirements to link (e.g., "project = DEMO AND issuetype = Story").'
222
+ )
223
+ }).optional().describe(
224
+ "JQL filter to select requirements to link. Use instead of requirementKeys when filtering by JQL."
225
+ )
226
+ });
227
+ const LinkRequirementsToCycleResponse = zod__default.object({
228
+ cycleKey: zod__default.string(),
229
+ linked: zod__default.literal(true)
230
+ });
231
+ const UnlinkRequirementsFromCycleBody = zod__default.object({
232
+ cycleKey: zod__default.string().describe(
233
+ "Test cycle key in '{PROJECT_KEY}-TR-{id}' format (e.g., 'SCRUM-TR-1'). Resolved to the internal cycle UID automatically."
234
+ ),
235
+ requirementKeys: zod__default.array(zod__default.string()).optional().describe(
236
+ "List of Jira requirement keys to unlink (e.g., ['SCRUM-1', 'SCRUM-2']). Resolved to internal IDs automatically. Provide this OR unLinkAll — not both."
237
+ ),
238
+ unLinkAll: zod__default.boolean().optional().describe(
239
+ "If true, all requirements are unlinked from the cycle. Ignores requirementKeys."
240
+ )
241
+ });
242
+ const UnlinkRequirementsFromCycleResponse = zod__default.object({
243
+ cycleKey: zod__default.string(),
244
+ unlinked: zod__default.literal(true)
245
+ });
246
+ export {
247
+ GetLinkedRequirementsForCycleBody,
248
+ LinkRequirementsToCycleBody,
249
+ LinkRequirementsToCycleResponse,
250
+ LinkTestCasesToCycleBody,
251
+ LinkToCycleTestCaseFilter,
252
+ SearchLinkedTestCasesInCycleBody,
253
+ SearchLinkedTestCasesInCycleFilter,
254
+ SearchLinkedTestCasesInCycleResponse,
255
+ TestCycleLinkResponse,
256
+ UnlinkFromCycleTestCaseFilter,
257
+ UnlinkRequirementsFromCycleBody,
258
+ UnlinkRequirementsFromCycleResponse,
259
+ UnlinkTestCasesFromCycleBody
260
+ };
@@ -0,0 +1,39 @@
1
+ import * as zod from "zod";
2
+ const CreateTestCycleBody = zod.object({
3
+ summary: zod.string().min(1).max(255).describe(
4
+ "Short title of the test cycle. Must not be blank. Max 255 chars."
5
+ ),
6
+ description: zod.string().max(65535).optional().describe("Detailed description of the test cycle. Max 65 535 characters."),
7
+ priority: zod.string().optional().describe(
8
+ "Priority name (e.g., 'High', 'Medium', 'Low'). Auto-resolved to ID."
9
+ ),
10
+ status: zod.string().optional().describe(
11
+ "Status name (e.g., 'To Do', 'In Progress', 'Done'). Auto-resolved to ID."
12
+ ),
13
+ assignee: zod.string().optional().describe("Assignee account ID"),
14
+ reporter: zod.string().optional().describe("Reporter account ID"),
15
+ labels: zod.array(zod.string()).optional().describe(
16
+ "List of label names (e.g., ['Release_1', 'Sprint 1']). Auto-resolved to IDs."
17
+ ),
18
+ components: zod.array(zod.string()).optional().describe(
19
+ "List of component names (e.g., ['UI', 'Cloud']). Auto-resolved to IDs."
20
+ ),
21
+ plannedStartDate: zod.string().regex(/^\d{2}\/[A-Za-z]{3}\/\d{4} \d{2}:\d{2}$/).optional().describe(
22
+ "Planned start date. Format: 'dd/MMM/yyyy HH:mm' e.g. '10/May/2026 00:00'. Must be ≤ plannedEndDate when both are provided."
23
+ ),
24
+ plannedEndDate: zod.string().regex(/^\d{2}\/[A-Za-z]{3}\/\d{4} \d{2}:\d{2}$/).optional().describe(
25
+ "Planned end date. Format: 'dd/MMM/yyyy HH:mm' e.g. '15/May/2026 00:00'. Must be ≥ plannedStartDate when both are provided."
26
+ )
27
+ });
28
+ const CreateTestCycleResponse = zod.object({
29
+ id: zod.string().describe(
30
+ "Opaque permanent identifier of the created test cycle. Use this in all subsequent API calls."
31
+ ),
32
+ key: zod.string().describe(
33
+ "Human-readable project-scoped key in format '<PROJECT_KEY>-TR-<number>'. e.g. 'TRWT-TR-218'."
34
+ )
35
+ });
36
+ export {
37
+ CreateTestCycleBody,
38
+ CreateTestCycleResponse
39
+ };