testeiya 0.9.0 → 0.10.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 (52) hide show
  1. package/PIPELINES.md +153 -19
  2. package/README.md +28 -14
  3. package/dist/prompt/pipeline-report.js +23 -0
  4. package/dist/prompt/pipeline-report.js.map +1 -0
  5. package/dist/prompt/report.js +1 -1
  6. package/dist/prompt/testomat.io.js +2 -2
  7. package/dist/prompt/testomat.io.js.map +1 -1
  8. package/dist/src/args.js +19 -1
  9. package/dist/src/args.js.map +1 -1
  10. package/dist/src/cli.js +4 -2
  11. package/dist/src/cli.js.map +1 -1
  12. package/dist/src/doctor.js +8 -10
  13. package/dist/src/doctor.js.map +1 -1
  14. package/dist/src/langfuse-extension.js +2 -0
  15. package/dist/src/langfuse-extension.js.map +1 -1
  16. package/dist/src/mcp.js +20 -90
  17. package/dist/src/mcp.js.map +1 -1
  18. package/dist/src/pipeline/command-stage.js +2 -2
  19. package/dist/src/pipeline/command-stage.js.map +1 -1
  20. package/dist/src/pipeline/log.js +5 -0
  21. package/dist/src/pipeline/log.js.map +1 -1
  22. package/dist/src/pipeline/overlay.js +217 -0
  23. package/dist/src/pipeline/overlay.js.map +1 -0
  24. package/dist/src/pipeline/pipeline-file.js +67 -5
  25. package/dist/src/pipeline/pipeline-file.js.map +1 -1
  26. package/dist/src/pipeline/pipeline.js +48 -29
  27. package/dist/src/pipeline/pipeline.js.map +1 -1
  28. package/dist/src/pipeline/stage.js +49 -13
  29. package/dist/src/pipeline/stage.js.map +1 -1
  30. package/dist/src/pipeline/state.js +3 -1
  31. package/dist/src/pipeline/state.js.map +1 -1
  32. package/dist/src/pipeline/summary-stage.js +99 -0
  33. package/dist/src/pipeline/summary-stage.js.map +1 -0
  34. package/dist/src/pipeline/task-stage.js +25 -10
  35. package/dist/src/pipeline/task-stage.js.map +1 -1
  36. package/dist/src/pipeline/variables.js +34 -2
  37. package/dist/src/pipeline/variables.js.map +1 -1
  38. package/dist/src/session.js +19 -14
  39. package/dist/src/session.js.map +1 -1
  40. package/package.json +6 -9
  41. package/pipelines/api-testing.yml +9 -6
  42. package/pipelines/issue-test-cases.yml +14 -13
  43. package/pipelines/pr-review.yml +13 -9
  44. package/pipelines/regression.yml +6 -3
  45. package/pipelines/web-testing.yml +13 -12
  46. package/prompt/pipeline-report.ts +23 -0
  47. package/prompt/report.ts +1 -1
  48. package/prompt/testomat.io.ts +4 -4
  49. package/dist/src/mcp-extension.js +0 -9
  50. package/dist/src/mcp-extension.js.map +0 -1
  51. package/dist/vendor/mcp.js +0 -14801
  52. package/mcp-tools.json +0 -1949
package/mcp-tools.json DELETED
@@ -1,1949 +0,0 @@
1
- [
2
- {
3
- "name": "system_ping",
4
- "description": "Check server status and active configuration",
5
- "inputSchema": {
6
- "type": "object",
7
- "properties": {}
8
- }
9
- },
10
- {
11
- "name": "tql_help",
12
- "description": "Full TQL (Testomat.io Query Language) reference — syntax, filter variables (tests + runs), and examples. Call this before writing a `tql` or `q` filter.",
13
- "inputSchema": {
14
- "type": "object",
15
- "properties": {}
16
- }
17
- },
18
- {
19
- "name": "project_info",
20
- "description": "Get configuration and metadata for the current project (/api/v2/{project_id}/info), including framework, language, environments, labels, tags, subscription features, artifact storage status, and CI profiles.",
21
- "inputSchema": {
22
- "type": "object",
23
- "properties": {},
24
- "additionalProperties": false
25
- }
26
- },
27
- {
28
- "name": "tests",
29
- "description": "Manage tests (/api/v2/{project_id}/tests). Filter tests with `tql` (TQL); call `tql_help` for the syntax and full field list. CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
30
- "inputSchema": {
31
- "type": "object",
32
- "properties": {
33
- "command": {
34
- "type": "string",
35
- "enum": [
36
- "list",
37
- "get",
38
- "create",
39
- "update",
40
- "delete",
41
- "bulk_upsert",
42
- "share",
43
- "unshare",
44
- "issues_list",
45
- "issues_link",
46
- "issues_unlink",
47
- "attachments_list",
48
- "attachments_upload",
49
- "attachments_delete"
50
- ],
51
- "description": "CLI-style operation to perform. list: List tests (tql filter, pagination) | get: Get test by ID | create: Create test (title and suite_id required) | update: Update test by ID | delete: Delete test by ID | bulk_upsert: Bulk create/update tests from a testomat.io classical tests markdown document. Tests with an id (@T...) in their metadata are updated, tests without id are created. Suites are resolved by id (@S...) or title, and created when missing. Up to 100 tests and 25 suites per call, sent in batches of 50. tags/labels in the markdown are parsed but not applied. | share: Share tests into a suite of another project. Select by test_ids, labels, or both. Source project stays the single source of truth; shared copies are read-only until unlinked; re-sharing does not duplicate; processed asynchronously (\"queued\" = accepted); skipped shared copies are listed in skipped_test_ids; projects must be of the same type (Classic/BDD). | unshare: Remove a test's share, converting the shared copy back into a regular, editable test. Only the shared copy can be targeted — the original source test is untouched. Must be called against the project that holds the shared copy. | issues_list: List linked issues for a test | issues_link: Link issue to a test (url or jira_id) | issues_unlink: Unlink issue from a test | attachments_list: List attachments for a test | attachments_upload: Upload one attachment to a test | attachments_delete: Delete attachment from a test"
52
- },
53
- "test_id": {
54
- "type": "string",
55
- "description": "(get|update|delete|unshare|issues_list|issues_link|issues_unlink|attachments_list|attachments_upload|attachments_delete) Test ID (for unshare: ID of the shared test copy to unlink)"
56
- },
57
- "title": {
58
- "type": "string",
59
- "description": "(create|update)"
60
- },
61
- "suite_id": {
62
- "type": "string",
63
- "description": "(create|update) Suite to place the test in"
64
- },
65
- "description": {
66
- "type": "string",
67
- "description": "(create|update)"
68
- },
69
- "emoji": {
70
- "type": "string",
71
- "description": "(create|update)"
72
- },
73
- "priority": {
74
- "type": "string",
75
- "enum": [
76
- "low",
77
- "normal",
78
- "important",
79
- "high",
80
- "critical"
81
- ],
82
- "description": "(create|update)"
83
- },
84
- "assigned_to": {
85
- "type": "string",
86
- "description": "(create|update)"
87
- },
88
- "code": {
89
- "type": "string",
90
- "description": "(create|update)"
91
- },
92
- "state": {
93
- "type": "string",
94
- "enum": [
95
- "manual",
96
- "detached",
97
- "automated"
98
- ],
99
- "description": "(create|update)"
100
- },
101
- "sync": {
102
- "type": "boolean",
103
- "description": "(update)"
104
- },
105
- "link": {
106
- "type": "array",
107
- "items": {
108
- "type": "object",
109
- "properties": {
110
- "action": {
111
- "type": "string",
112
- "enum": [
113
- "add",
114
- "remove"
115
- ]
116
- },
117
- "type": {
118
- "type": "string",
119
- "enum": [
120
- "label",
121
- "custom_field",
122
- "tag",
123
- "milestone",
124
- "issue",
125
- "jira"
126
- ]
127
- },
128
- "value": {
129
- "type": "string"
130
- }
131
- },
132
- "required": [
133
- "action",
134
- "type",
135
- "value"
136
- ],
137
- "additionalProperties": false
138
- },
139
- "description": "(create|update)"
140
- },
141
- "tql": {
142
- "type": "string",
143
- "description": "(list) TQL filter for tests. Fields: tag, label, priority, issue, jira, state, status, custom_status, created_at, updated_at, last_run_at, executed_at, created_by, assigned_to, suite, test, shared, milestone. Call `tql_help` for syntax. Examples: `priority == 'high'`, `state == 'automated'`, `suite % 'Checkout'`."
144
- },
145
- "markdown": {
146
- "type": "string",
147
- "description": "(bulk_upsert) Required for bulk_upsert. Markdown document in the testomat.io classical tests format: suite blocks (<!-- suite ... -->) containing test blocks (<!-- test ... -->), each followed by a title heading and a description. See https://docs.testomat.io/project/import-export/export-tests/classical-tests-markdown-format/"
148
- },
149
- "dry_run": {
150
- "type": "boolean",
151
- "default": false,
152
- "description": "(bulk_upsert) Parse the document and report the planned actions without writing anything"
153
- },
154
- "create_missing_suites": {
155
- "type": "boolean",
156
- "default": true,
157
- "description": "(bulk_upsert) Create suites that cannot be resolved by id or title. When false, tests of unresolved suites are reported as errors"
158
- },
159
- "branch": {
160
- "type": "string",
161
- "description": "(list|get|create|update|delete|bulk_upsert) Branch slug to scope the request to (omit or main for the main branch). For tests and suites, a branch-local record is used when it exists, falling back to main; updating/deleting a main-only record forks an isolated copy into the branch. Runs are tagged with the branch (only reachable with the same branch afterwards). Requires the branches feature."
162
- },
163
- "page": {
164
- "type": "integer",
165
- "minimum": 1,
166
- "description": "(list|issues_list)"
167
- },
168
- "per_page": {
169
- "type": "integer",
170
- "minimum": 1,
171
- "maximum": 100,
172
- "description": "(list|issues_list)"
173
- },
174
- "source": {
175
- "type": "string",
176
- "description": "(issues_list) Filter issues by source (e.g. jira)"
177
- },
178
- "url": {
179
- "type": "string",
180
- "description": "(issues_link) Issue URL to link"
181
- },
182
- "jira_id": {
183
- "type": "string",
184
- "description": "(issues_link) Jira issue key to link (alternative to url)"
185
- },
186
- "issue_id": {
187
- "type": "integer",
188
- "description": "(issues_unlink) ID of the linked issue to remove"
189
- },
190
- "type": {
191
- "type": "string",
192
- "enum": [
193
- "issue",
194
- "jira_issue"
195
- ],
196
- "description": "(issues_unlink) Kind of the linked issue"
197
- },
198
- "file_path": {
199
- "type": "string",
200
- "description": "(attachments_upload) Local path to the file that will be sent as multipart/form-data field \"files\"."
201
- },
202
- "attachment_id": {
203
- "type": "string",
204
- "description": "(attachments_delete) ID of the attachment to delete"
205
- },
206
- "test_ids": {
207
- "type": "array",
208
- "items": {
209
- "type": "string"
210
- },
211
- "description": "(share) Test IDs to share. At least one of test_ids/labels is required. Max 1000 tests per request."
212
- },
213
- "labels": {
214
- "type": "array",
215
- "items": {
216
- "type": "string"
217
- },
218
- "description": "(share) Label slugs or titles; every test carrying any of these labels is shared, in addition to test_ids."
219
- },
220
- "target_project_id": {
221
- "type": "string",
222
- "description": "(share) Project ID (slug) of the destination project. Must be accessible to the current user."
223
- },
224
- "target_suite_id": {
225
- "type": "string",
226
- "description": "(share) Suite ID in the target project to place the shared tests into. Must be a file-type suite, not a folder."
227
- },
228
- "verbose": {
229
- "type": "boolean",
230
- "default": false,
231
- "description": "(attachments_list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
232
- },
233
- "fields": {
234
- "type": "array",
235
- "items": {
236
- "type": "string"
237
- },
238
- "description": "(attachments_list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
239
- },
240
- "count": {
241
- "type": "boolean",
242
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
243
- },
244
- "group_by": {
245
- "type": "string",
246
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
247
- }
248
- },
249
- "required": [
250
- "command"
251
- ],
252
- "additionalProperties": false
253
- }
254
- },
255
- {
256
- "name": "suites",
257
- "description": "Manage suites as tree (/api/v2/{project_id}/suites) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
258
- "inputSchema": {
259
- "type": "object",
260
- "properties": {
261
- "command": {
262
- "type": "string",
263
- "enum": [
264
- "list",
265
- "get",
266
- "create",
267
- "update",
268
- "delete",
269
- "share",
270
- "unshare",
271
- "issues_list",
272
- "issues_link",
273
- "issues_unlink",
274
- "attachments_list",
275
- "attachments_upload",
276
- "attachments_delete"
277
- ],
278
- "description": "CLI-style operation to perform. list: List suites as tree (filters: file_type, tag, labels, search_text) | get: Get suite by ID | create: Create suite (title required) | update: Update suite by ID | delete: Delete suite by ID | share: Share suites (with their tests) into one or more other projects. Select by suite_ids, labels, or both. File-type suites are linked (read-only copies that stay in sync); folder suites are deep-copied as editable copies; re-sharing a linked suite into a project that already has it does not duplicate; suites that are themselves shared copies link to their original source; omit destination_folder_id to share into the root; processed asynchronously; projects must be of the same type (Classic/BDD). | unshare: Remove a suite's share, converting the shared copy back into a regular, editable suite. Only the shared (linked) copy can be targeted — the original source suite is untouched. Must be called against the project that holds the shared copy. | issues_list: List linked issues for a suite | issues_link: Link issue to a suite (url or jira_id) | issues_unlink: Unlink issue from a suite | attachments_list: List attachments for a suite | attachments_upload: Upload one attachment to a suite | attachments_delete: Delete attachment from a suite"
279
- },
280
- "suite_id": {
281
- "type": "string",
282
- "description": "(get|update|delete|unshare|issues_list|issues_link|issues_unlink|attachments_list|attachments_upload|attachments_delete) Suite ID (for unshare: ID of the shared suite copy to unlink)"
283
- },
284
- "title": {
285
- "type": "string",
286
- "description": "(create|update)"
287
- },
288
- "description": {
289
- "type": "string",
290
- "description": "(create|update)"
291
- },
292
- "emoji": {
293
- "type": "string",
294
- "description": "(create|update)"
295
- },
296
- "parent_id": {
297
- "type": "string",
298
- "description": "(create|update) Parent suite ID"
299
- },
300
- "file_type": {
301
- "type": "string",
302
- "enum": [
303
- "file",
304
- "folder"
305
- ],
306
- "description": "(list|create|update) list: filter by type; create/update: the type of suite"
307
- },
308
- "assigned_to": {
309
- "type": "string",
310
- "description": "(create|update)"
311
- },
312
- "file": {
313
- "type": "string",
314
- "description": "(create|update)"
315
- },
316
- "children": {
317
- "type": "array",
318
- "items": {},
319
- "description": "(create|update)"
320
- },
321
- "link": {
322
- "type": "array",
323
- "items": {
324
- "type": "object",
325
- "properties": {
326
- "action": {
327
- "type": "string",
328
- "enum": [
329
- "add",
330
- "remove"
331
- ]
332
- },
333
- "type": {
334
- "type": "string",
335
- "enum": [
336
- "label",
337
- "custom_field",
338
- "tag",
339
- "milestone",
340
- "issue",
341
- "jira",
342
- "requirement"
343
- ]
344
- },
345
- "value": {
346
- "type": "string"
347
- }
348
- },
349
- "required": [
350
- "action",
351
- "type",
352
- "value"
353
- ],
354
- "additionalProperties": false
355
- },
356
- "description": "(create|update)"
357
- },
358
- "tag": {
359
- "type": "string",
360
- "description": "(list) Filter by tag title"
361
- },
362
- "labels": {
363
- "type": [
364
- "string",
365
- "array"
366
- ],
367
- "items": {
368
- "type": "string"
369
- },
370
- "description": "(list|share) list: filter by label slugs/titles; share: every suite carrying any of these labels is shared, in addition to suite_ids."
371
- },
372
- "search_text": {
373
- "type": "string",
374
- "description": "(list)"
375
- },
376
- "branch": {
377
- "type": "string",
378
- "description": "(list|get|create|update|delete) Branch slug to scope the request to (omit or main for the main branch). For tests and suites, a branch-local record is used when it exists, falling back to main; updating/deleting a main-only record forks an isolated copy into the branch. Runs are tagged with the branch (only reachable with the same branch afterwards). Requires the branches feature."
379
- },
380
- "page": {
381
- "type": "integer",
382
- "minimum": 1,
383
- "description": "(list|issues_list)"
384
- },
385
- "per_page": {
386
- "type": "integer",
387
- "minimum": 1,
388
- "maximum": 100,
389
- "description": "(list|issues_list)"
390
- },
391
- "source": {
392
- "type": "string",
393
- "description": "(issues_list) Filter issues by source (e.g. jira)"
394
- },
395
- "url": {
396
- "type": "string",
397
- "description": "(issues_link) Issue URL to link"
398
- },
399
- "jira_id": {
400
- "type": "string",
401
- "description": "(issues_link) Jira issue key to link (alternative to url)"
402
- },
403
- "issue_id": {
404
- "type": "integer",
405
- "description": "(issues_unlink) ID of the linked issue to remove"
406
- },
407
- "type": {
408
- "type": "string",
409
- "enum": [
410
- "issue",
411
- "jira_issue"
412
- ],
413
- "description": "(issues_unlink) Kind of the linked issue"
414
- },
415
- "file_path": {
416
- "type": "string",
417
- "description": "(attachments_upload) Local path to the file that will be sent as multipart/form-data field \"files\"."
418
- },
419
- "attachment_id": {
420
- "type": "string",
421
- "description": "(attachments_delete) ID of the attachment to delete"
422
- },
423
- "suite_ids": {
424
- "type": "array",
425
- "items": {
426
- "type": "string"
427
- },
428
- "description": "(share) Suite IDs to share. At least one of suite_ids/labels is required. Max 200 suites per request."
429
- },
430
- "target_project_ids": {
431
- "type": "array",
432
- "items": {
433
- "type": "string"
434
- },
435
- "description": "(share) Project IDs (slugs) of the destination projects. Must be accessible to the current user."
436
- },
437
- "destination_folder_id": {
438
- "type": "string",
439
- "description": "(share) Folder suite ID in the target project to place the shared suites into. Only allowed when sharing to a single target project."
440
- },
441
- "verbose": {
442
- "type": "boolean",
443
- "default": false,
444
- "description": "(attachments_list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
445
- },
446
- "fields": {
447
- "type": "array",
448
- "items": {
449
- "type": "string"
450
- },
451
- "description": "(attachments_list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
452
- },
453
- "count": {
454
- "type": "boolean",
455
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
456
- },
457
- "group_by": {
458
- "type": "string",
459
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
460
- }
461
- },
462
- "required": [
463
- "command"
464
- ],
465
- "additionalProperties": false
466
- }
467
- },
468
- {
469
- "name": "runs",
470
- "description": "Manage runs (/api/v2/{project_id}/runs). Filter runs with `tql` (TQL); runs also accept boolean flags. Call `tql_help` for the syntax and full field list. CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
471
- "inputSchema": {
472
- "type": "object",
473
- "properties": {
474
- "command": {
475
- "type": "string",
476
- "enum": [
477
- "list",
478
- "get",
479
- "create",
480
- "update",
481
- "delete",
482
- "stats",
483
- "issues_list",
484
- "issues_link",
485
- "issues_unlink"
486
- ],
487
- "description": "CLI-style operation to perform. list: List runs (tql filter, pagination) | get: Get run by ID | create: Create run (title required) | update: Update run by ID | delete: Delete run by ID | stats: Break down one run's testruns by suite, tag, label, assignee, or priority (/api/v2/{project_id}/runs/{id}/stats/{dimension}). Each row has passed_count, failed_count, skipped_count, pending_count for its group — answers \"which areas/owners are affected by this run's failures\". Paginated with a fixed page size; meta uses page/perPage/totalCount/totalPages | issues_list: List linked issues for a run | issues_link: Link issue to a run (url or jira_id) | issues_unlink: Unlink issue from a run"
488
- },
489
- "run_id": {
490
- "type": "string",
491
- "description": "(get|update|delete|stats|issues_list|issues_link)"
492
- },
493
- "dimension": {
494
- "type": "string",
495
- "enum": [
496
- "suites",
497
- "tags",
498
- "labels",
499
- "assignees",
500
- "priorities"
501
- ],
502
- "description": "(stats)"
503
- },
504
- "sort_field": {
505
- "type": "string",
506
- "description": "(stats) Column to sort by, e.g. failed_count."
507
- },
508
- "sort_direction": {
509
- "type": "string",
510
- "enum": [
511
- "asc",
512
- "desc"
513
- ],
514
- "description": "(stats)"
515
- },
516
- "title": {
517
- "type": "string",
518
- "description": "(create|update)"
519
- },
520
- "description": {
521
- "type": "string",
522
- "description": "(create|update)"
523
- },
524
- "plan_ids": {
525
- "type": "array",
526
- "items": {
527
- "type": "string"
528
- },
529
- "description": "(create)"
530
- },
531
- "kind": {
532
- "type": "string",
533
- "enum": [
534
- "manual",
535
- "automated",
536
- "mixed"
537
- ],
538
- "description": "(create|update)"
539
- },
540
- "rungroup_id": {
541
- "type": "string",
542
- "description": "(create|update)"
543
- },
544
- "env": {
545
- "type": "string",
546
- "description": "(create|update)"
547
- },
548
- "status_event": {
549
- "type": "string",
550
- "enum": [
551
- "finish",
552
- "finish_manual",
553
- "launch",
554
- "rerun",
555
- "scheduled",
556
- "terminate"
557
- ],
558
- "description": "(update)"
559
- },
560
- "assigned_to": {
561
- "type": "string",
562
- "description": "(create|update)"
563
- },
564
- "assign_strategy": {
565
- "type": "string",
566
- "enum": [
567
- "test",
568
- "random",
569
- "none"
570
- ],
571
- "description": "(create|update)"
572
- },
573
- "test_ids": {
574
- "type": "array",
575
- "items": {
576
- "type": "string"
577
- },
578
- "description": "(create|update)"
579
- },
580
- "suite_ids": {
581
- "type": "array",
582
- "items": {
583
- "type": "string"
584
- },
585
- "description": "(create|update)"
586
- },
587
- "envs": {
588
- "type": "array",
589
- "items": {
590
- "type": "string"
591
- },
592
- "description": "(create)"
593
- },
594
- "link": {
595
- "type": "array",
596
- "items": {
597
- "type": "object",
598
- "properties": {
599
- "action": {
600
- "type": "string",
601
- "enum": [
602
- "add",
603
- "remove"
604
- ]
605
- },
606
- "type": {
607
- "type": "string",
608
- "enum": [
609
- "label",
610
- "custom_field",
611
- "tag",
612
- "milestone",
613
- "issue",
614
- "jira"
615
- ]
616
- },
617
- "value": {
618
- "type": "string"
619
- }
620
- },
621
- "required": [
622
- "action",
623
- "type",
624
- "value"
625
- ],
626
- "additionalProperties": false
627
- },
628
- "description": "(create|update)"
629
- },
630
- "tql": {
631
- "type": "string",
632
- "description": "(list) TQL filter for runs. Fields: title, plan, rungroup, env, tag, label, jira, duration, passed_count, failed_count, skipped_count, automated, manual, mixed, finished, unfinished, passed, failed, terminated, published, private, archived, unarchived, with_defect, has_defect, has_test, has_test_tag, has_test_label, has_suite, has_message, has_custom_status, has_assigned_to, has_retries, has_test_duration, has_priority, created_at, updated_at, launched_at, finished_at, milestone. Call `tql_help` for syntax. Examples: `finished and with_defect`, `env in ['Windows', 'Linux']`, `has_retries > 2`."
633
- },
634
- "branch": {
635
- "type": "string",
636
- "description": "(list|get|create|update|delete) Branch slug to scope the request to (omit or main for the main branch). For tests and suites, a branch-local record is used when it exists, falling back to main; updating/deleting a main-only record forks an isolated copy into the branch. Runs are tagged with the branch (only reachable with the same branch afterwards). Requires the branches feature."
637
- },
638
- "page": {
639
- "type": "integer",
640
- "minimum": 1,
641
- "description": "(list|issues_list|stats)"
642
- },
643
- "per_page": {
644
- "type": "integer",
645
- "minimum": 1,
646
- "maximum": 100,
647
- "description": "(list|issues_list)"
648
- },
649
- "source": {
650
- "type": "string",
651
- "description": "(issues_list) Filter issues by source (e.g. jira)"
652
- },
653
- "url": {
654
- "type": "string",
655
- "description": "(issues_link) Issue URL to link"
656
- },
657
- "jira_id": {
658
- "type": "string",
659
- "description": "(issues_link) Jira issue key to link (alternative to url)"
660
- },
661
- "issue_id": {
662
- "type": "integer",
663
- "description": "(issues_unlink) ID of the linked issue to remove"
664
- },
665
- "type": {
666
- "type": "string",
667
- "enum": [
668
- "issue",
669
- "jira_issue"
670
- ],
671
- "description": "(issues_unlink) Kind of the linked issue"
672
- },
673
- "verbose": {
674
- "type": "boolean",
675
- "default": false,
676
- "description": "(issues_list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
677
- },
678
- "fields": {
679
- "type": "array",
680
- "items": {
681
- "type": "string"
682
- },
683
- "description": "(issues_list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
684
- },
685
- "count": {
686
- "type": "boolean",
687
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
688
- },
689
- "group_by": {
690
- "type": "string",
691
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
692
- }
693
- },
694
- "required": [
695
- "command"
696
- ],
697
- "additionalProperties": false
698
- }
699
- },
700
- {
701
- "name": "testruns",
702
- "description": "Manage individual test runs (/api/v2/{project_id}/testruns) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
703
- "inputSchema": {
704
- "type": "object",
705
- "properties": {
706
- "command": {
707
- "type": "string",
708
- "enum": [
709
- "list",
710
- "get",
711
- "create",
712
- "update",
713
- "delete",
714
- "issues_list",
715
- "issues_link",
716
- "issues_unlink",
717
- "attachments_list",
718
- "attachments_upload",
719
- "attachments_delete"
720
- ],
721
- "description": "CLI-style operation to perform. list: List testruns (rich filters: filter_status, filter_kind, tags, labels, envs, rungroups, defects, ...) | get: Get testrun by ID | create: Create testrun in a run (run_id required) | update: Update testrun by ID | delete: Delete testrun by ID | issues_list: List linked issues for a testrun | issues_link: Link issue to a testrun (url or jira_id) | issues_unlink: Unlink issue from a testrun | attachments_list: List attachments for a testrun | attachments_upload: Upload one attachment to a testrun | attachments_delete: Delete attachment from a testrun"
722
- },
723
- "testrun_id": {
724
- "type": "integer",
725
- "description": "(get|update|delete|issues_list|issues_link|attachments_list|attachments_upload|attachments_delete)"
726
- },
727
- "run_id": {
728
- "type": "string",
729
- "description": "(list|create|update) list: filter by run; create/update: the run the testrun belongs to"
730
- },
731
- "test_id": {
732
- "type": "string",
733
- "description": "(create|update)"
734
- },
735
- "test_ids": {
736
- "type": [
737
- "array",
738
- "string"
739
- ],
740
- "items": {
741
- "type": "string"
742
- },
743
- "description": "(list)"
744
- },
745
- "sort": {
746
- "type": "string",
747
- "enum": [
748
- "created_at",
749
- "suite",
750
- "testcase",
751
- "failure"
752
- ],
753
- "description": "(list) Sort field. Default order is oldest-first — use created_at with order=desc to get the most recent executions first."
754
- },
755
- "order": {
756
- "type": "string",
757
- "enum": [
758
- "asc",
759
- "desc"
760
- ],
761
- "description": "(list) Sort direction. Defaults to asc."
762
- },
763
- "status": {
764
- "type": "string",
765
- "enum": [
766
- "passed",
767
- "failed",
768
- "skipped",
769
- "pending"
770
- ],
771
- "description": "(create|update)"
772
- },
773
- "message": {
774
- "type": "string",
775
- "description": "(create|update)"
776
- },
777
- "run_time": {
778
- "type": "number",
779
- "description": "(create|update)"
780
- },
781
- "assigned_to": {
782
- "type": "string",
783
- "description": "(create|update)"
784
- },
785
- "test_title": {
786
- "type": "string",
787
- "description": "(create|update)"
788
- },
789
- "automated": {
790
- "type": "boolean",
791
- "description": "(create|update)"
792
- },
793
- "filter_status": {
794
- "type": "string",
795
- "enum": [
796
- "passed",
797
- "failed",
798
- "skipped",
799
- "pending"
800
- ],
801
- "description": "(list)"
802
- },
803
- "filter_kind": {
804
- "type": "string",
805
- "enum": [
806
- "manual",
807
- "automated"
808
- ],
809
- "description": "(list)"
810
- },
811
- "filter_user": {
812
- "type": [
813
- "integer",
814
- "string"
815
- ],
816
- "description": "(list)"
817
- },
818
- "filter_priority": {
819
- "type": "string",
820
- "enum": [
821
- "low",
822
- "normal",
823
- "important",
824
- "high",
825
- "critical"
826
- ],
827
- "description": "(list)"
828
- },
829
- "filter_substatus": {
830
- "type": "string",
831
- "description": "(list)"
832
- },
833
- "filter_search": {
834
- "type": "string",
835
- "description": "(list)"
836
- },
837
- "filter_message": {
838
- "type": "boolean",
839
- "description": "(list)"
840
- },
841
- "filter_link": {
842
- "type": "boolean",
843
- "description": "(list)"
844
- },
845
- "filter_finished_at_date_range": {
846
- "type": "string",
847
- "description": "(list)"
848
- },
849
- "tags": {
850
- "type": [
851
- "array",
852
- "string"
853
- ],
854
- "items": {
855
- "type": "string"
856
- },
857
- "description": "(list)"
858
- },
859
- "labels": {
860
- "type": [
861
- "array",
862
- "string"
863
- ],
864
- "items": {
865
- "type": "string"
866
- },
867
- "description": "(list)"
868
- },
869
- "envs": {
870
- "type": [
871
- "array",
872
- "string"
873
- ],
874
- "items": {
875
- "type": "string"
876
- },
877
- "description": "(list)"
878
- },
879
- "rungroups": {
880
- "type": [
881
- "array",
882
- "string"
883
- ],
884
- "items": {
885
- "type": "string"
886
- },
887
- "description": "(list)"
888
- },
889
- "defects": {
890
- "type": "string",
891
- "enum": [
892
- "has_defects",
893
- "without_defects"
894
- ],
895
- "description": "(list)"
896
- },
897
- "page": {
898
- "type": "integer",
899
- "minimum": 1,
900
- "description": "(list|issues_list)"
901
- },
902
- "per_page": {
903
- "type": "integer",
904
- "minimum": 1,
905
- "maximum": 100,
906
- "description": "(list|issues_list)"
907
- },
908
- "source": {
909
- "type": "string",
910
- "description": "(issues_list) Filter issues by source (e.g. jira)"
911
- },
912
- "url": {
913
- "type": "string",
914
- "description": "(issues_link) Issue URL to link"
915
- },
916
- "jira_id": {
917
- "type": "string",
918
- "description": "(issues_link) Jira issue key to link (alternative to url)"
919
- },
920
- "issue_id": {
921
- "type": "integer",
922
- "description": "(issues_unlink) ID of the linked issue to remove"
923
- },
924
- "type": {
925
- "type": "string",
926
- "enum": [
927
- "issue",
928
- "jira_issue"
929
- ],
930
- "description": "(issues_unlink) Kind of the linked issue"
931
- },
932
- "file_path": {
933
- "type": "string",
934
- "description": "(attachments_upload) Local path to the file that will be sent as multipart/form-data field \"files\"."
935
- },
936
- "attachment_id": {
937
- "type": "string",
938
- "description": "(attachments_delete) ID of the attachment to delete"
939
- },
940
- "verbose": {
941
- "type": "boolean",
942
- "default": false,
943
- "description": "(attachments_list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
944
- },
945
- "fields": {
946
- "type": "array",
947
- "items": {
948
- "type": "string"
949
- },
950
- "description": "(attachments_list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
951
- },
952
- "count": {
953
- "type": "boolean",
954
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
955
- },
956
- "group_by": {
957
- "type": "string",
958
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
959
- }
960
- },
961
- "required": [
962
- "command"
963
- ],
964
- "additionalProperties": false
965
- }
966
- },
967
- {
968
- "name": "rungroups",
969
- "description": "Manage run groups as tree (/api/v2/{project_id}/rungroups) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
970
- "inputSchema": {
971
- "type": "object",
972
- "properties": {
973
- "command": {
974
- "type": "string",
975
- "enum": [
976
- "list",
977
- "get",
978
- "create",
979
- "update",
980
- "delete"
981
- ],
982
- "description": "CLI-style operation to perform. list: List run groups as tree | get: Get run group by ID | create: Create run group (title required) | update: Update run group by ID | delete: Delete run group by ID"
983
- },
984
- "rungroup_id": {
985
- "type": "string",
986
- "description": "(get|update|delete)"
987
- },
988
- "title": {
989
- "type": "string",
990
- "description": "(create|update)"
991
- },
992
- "description": {
993
- "type": "string",
994
- "description": "(create|update)"
995
- },
996
- "emoji": {
997
- "type": "string",
998
- "description": "(create|update)"
999
- },
1000
- "kind": {
1001
- "type": "string",
1002
- "description": "(create|update)"
1003
- },
1004
- "pin": {
1005
- "type": "boolean",
1006
- "description": "(create|update)"
1007
- },
1008
- "status": {
1009
- "type": "string",
1010
- "description": "(create|update)"
1011
- },
1012
- "parent_id": {
1013
- "type": "string",
1014
- "description": "(create|update)"
1015
- },
1016
- "children": {
1017
- "type": "array",
1018
- "items": {},
1019
- "description": "(create|update)"
1020
- },
1021
- "page": {
1022
- "type": "integer",
1023
- "minimum": 1,
1024
- "description": "(list)"
1025
- },
1026
- "per_page": {
1027
- "type": "integer",
1028
- "minimum": 1,
1029
- "maximum": 100,
1030
- "description": "(list)"
1031
- },
1032
- "verbose": {
1033
- "type": "boolean",
1034
- "default": false,
1035
- "description": "(list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1036
- },
1037
- "fields": {
1038
- "type": "array",
1039
- "items": {
1040
- "type": "string"
1041
- },
1042
- "description": "(list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1043
- },
1044
- "count": {
1045
- "type": "boolean",
1046
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1047
- },
1048
- "group_by": {
1049
- "type": "string",
1050
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1051
- }
1052
- },
1053
- "required": [
1054
- "command"
1055
- ],
1056
- "additionalProperties": false
1057
- }
1058
- },
1059
- {
1060
- "name": "steps",
1061
- "description": "Manage test steps (/api/v2/{project_id}/steps) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
1062
- "inputSchema": {
1063
- "type": "object",
1064
- "properties": {
1065
- "command": {
1066
- "type": "string",
1067
- "enum": [
1068
- "list",
1069
- "get",
1070
- "create",
1071
- "update",
1072
- "delete"
1073
- ],
1074
- "description": "CLI-style operation to perform. list: List steps | get: Get step by ID | create: Create step (title required) | update: Update step by ID | delete: Delete step by ID"
1075
- },
1076
- "step_id": {
1077
- "type": "integer",
1078
- "description": "(get|update|delete)"
1079
- },
1080
- "title": {
1081
- "type": "string",
1082
- "description": "(create|update)"
1083
- },
1084
- "description": {
1085
- "type": "string",
1086
- "description": "(create|update)"
1087
- },
1088
- "link": {
1089
- "type": "array",
1090
- "items": {
1091
- "type": "object",
1092
- "properties": {
1093
- "action": {
1094
- "type": "string",
1095
- "enum": [
1096
- "add",
1097
- "remove"
1098
- ]
1099
- },
1100
- "type": {
1101
- "type": "string",
1102
- "enum": [
1103
- "label",
1104
- "custom_field",
1105
- "tag",
1106
- "milestone",
1107
- "issue",
1108
- "jira"
1109
- ]
1110
- },
1111
- "value": {
1112
- "type": "string"
1113
- }
1114
- },
1115
- "required": [
1116
- "action",
1117
- "type",
1118
- "value"
1119
- ],
1120
- "additionalProperties": false
1121
- },
1122
- "description": "(create|update)"
1123
- },
1124
- "page": {
1125
- "type": "integer",
1126
- "minimum": 1,
1127
- "description": "(list)"
1128
- },
1129
- "per_page": {
1130
- "type": "integer",
1131
- "minimum": 1,
1132
- "maximum": 100,
1133
- "description": "(list)"
1134
- },
1135
- "verbose": {
1136
- "type": "boolean",
1137
- "default": false,
1138
- "description": "(list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1139
- },
1140
- "fields": {
1141
- "type": "array",
1142
- "items": {
1143
- "type": "string"
1144
- },
1145
- "description": "(list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1146
- },
1147
- "count": {
1148
- "type": "boolean",
1149
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1150
- },
1151
- "group_by": {
1152
- "type": "string",
1153
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1154
- }
1155
- },
1156
- "required": [
1157
- "command"
1158
- ],
1159
- "additionalProperties": false
1160
- }
1161
- },
1162
- {
1163
- "name": "snippets",
1164
- "description": "Manage code snippets (/api/v2/{project_id}/snippets) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
1165
- "inputSchema": {
1166
- "type": "object",
1167
- "properties": {
1168
- "command": {
1169
- "type": "string",
1170
- "enum": [
1171
- "list",
1172
- "get",
1173
- "create",
1174
- "update",
1175
- "delete"
1176
- ],
1177
- "description": "CLI-style operation to perform. list: List snippets | get: Get snippet by ID | create: Create snippet (title required) | update: Update snippet by ID | delete: Delete snippet by ID"
1178
- },
1179
- "snippet_id": {
1180
- "type": "integer",
1181
- "description": "(get|update|delete)"
1182
- },
1183
- "title": {
1184
- "type": "string",
1185
- "description": "(create|update)"
1186
- },
1187
- "description": {
1188
- "type": "string",
1189
- "description": "(create|update)"
1190
- },
1191
- "link": {
1192
- "type": "array",
1193
- "items": {
1194
- "type": "object",
1195
- "properties": {
1196
- "action": {
1197
- "type": "string",
1198
- "enum": [
1199
- "add",
1200
- "remove"
1201
- ]
1202
- },
1203
- "type": {
1204
- "type": "string",
1205
- "enum": [
1206
- "label",
1207
- "custom_field",
1208
- "tag",
1209
- "milestone",
1210
- "issue",
1211
- "jira"
1212
- ]
1213
- },
1214
- "value": {
1215
- "type": "string"
1216
- }
1217
- },
1218
- "required": [
1219
- "action",
1220
- "type",
1221
- "value"
1222
- ],
1223
- "additionalProperties": false
1224
- },
1225
- "description": "(create|update)"
1226
- },
1227
- "page": {
1228
- "type": "integer",
1229
- "minimum": 1,
1230
- "description": "(list)"
1231
- },
1232
- "per_page": {
1233
- "type": "integer",
1234
- "minimum": 1,
1235
- "maximum": 100,
1236
- "description": "(list)"
1237
- },
1238
- "verbose": {
1239
- "type": "boolean",
1240
- "default": false,
1241
- "description": "(list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1242
- },
1243
- "fields": {
1244
- "type": "array",
1245
- "items": {
1246
- "type": "string"
1247
- },
1248
- "description": "(list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1249
- },
1250
- "count": {
1251
- "type": "boolean",
1252
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1253
- },
1254
- "group_by": {
1255
- "type": "string",
1256
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1257
- }
1258
- },
1259
- "required": [
1260
- "command"
1261
- ],
1262
- "additionalProperties": false
1263
- }
1264
- },
1265
- {
1266
- "name": "labels",
1267
- "description": "Manage labels (/api/v2/{project_id}/labels) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
1268
- "inputSchema": {
1269
- "type": "object",
1270
- "properties": {
1271
- "command": {
1272
- "type": "string",
1273
- "enum": [
1274
- "list",
1275
- "get",
1276
- "create",
1277
- "update",
1278
- "delete"
1279
- ],
1280
- "description": "CLI-style operation to perform. list: List labels | get: Get label by slug | create: Create label (title required) | update: Update label by slug | delete: Delete label by slug"
1281
- },
1282
- "label_id": {
1283
- "type": "string",
1284
- "description": "(get|update|delete) Label slug"
1285
- },
1286
- "title": {
1287
- "type": "string",
1288
- "description": "(create|update)"
1289
- },
1290
- "color": {
1291
- "type": "string",
1292
- "description": "(create|update)"
1293
- },
1294
- "visibility": {
1295
- "type": "array",
1296
- "items": {
1297
- "type": "string",
1298
- "enum": [
1299
- "filter",
1300
- "list"
1301
- ]
1302
- },
1303
- "description": "(create|update)"
1304
- },
1305
- "scope": {
1306
- "type": "array",
1307
- "items": {
1308
- "type": "string",
1309
- "enum": [
1310
- "tests",
1311
- "suites",
1312
- "runs",
1313
- "plans",
1314
- "steps",
1315
- "templates"
1316
- ]
1317
- },
1318
- "description": "(create|update)"
1319
- },
1320
- "field": {
1321
- "type": "object",
1322
- "description": "(create|update)"
1323
- },
1324
- "page": {
1325
- "type": "integer",
1326
- "minimum": 1,
1327
- "description": "(list)"
1328
- },
1329
- "per_page": {
1330
- "type": "integer",
1331
- "minimum": 1,
1332
- "maximum": 100,
1333
- "description": "(list)"
1334
- },
1335
- "verbose": {
1336
- "type": "boolean",
1337
- "default": false,
1338
- "description": "(list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1339
- },
1340
- "fields": {
1341
- "type": "array",
1342
- "items": {
1343
- "type": "string"
1344
- },
1345
- "description": "(list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1346
- },
1347
- "count": {
1348
- "type": "boolean",
1349
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1350
- },
1351
- "group_by": {
1352
- "type": "string",
1353
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1354
- }
1355
- },
1356
- "required": [
1357
- "command"
1358
- ],
1359
- "additionalProperties": false
1360
- }
1361
- },
1362
- {
1363
- "name": "tags",
1364
- "description": "Tags: list with counts and get tests by tag (/api/v2/{project_id}/tags) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
1365
- "inputSchema": {
1366
- "type": "object",
1367
- "properties": {
1368
- "command": {
1369
- "type": "string",
1370
- "enum": [
1371
- "list",
1372
- "get",
1373
- "search"
1374
- ],
1375
- "description": "CLI-style operation to perform. list: List tags with counts | get: Get tests by tag title (tag_id) | search: Search by tag title (delegates to get)"
1376
- },
1377
- "tag_id": {
1378
- "type": "string",
1379
- "description": "(get|search) Tag title to look up"
1380
- },
1381
- "query": {
1382
- "type": "string",
1383
- "description": "(search)"
1384
- },
1385
- "verbose": {
1386
- "type": "boolean",
1387
- "default": false,
1388
- "description": "(list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1389
- },
1390
- "fields": {
1391
- "type": "array",
1392
- "items": {
1393
- "type": "string"
1394
- },
1395
- "description": "(list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1396
- },
1397
- "count": {
1398
- "type": "boolean",
1399
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1400
- },
1401
- "group_by": {
1402
- "type": "string",
1403
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1404
- }
1405
- },
1406
- "required": [
1407
- "command"
1408
- ],
1409
- "additionalProperties": false
1410
- }
1411
- },
1412
- {
1413
- "name": "milestones",
1414
- "description": "Milestones: list and get (/api/v2/{project_id}/milestones) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
1415
- "inputSchema": {
1416
- "type": "object",
1417
- "properties": {
1418
- "command": {
1419
- "type": "string",
1420
- "enum": [
1421
- "list",
1422
- "get"
1423
- ],
1424
- "description": "CLI-style operation to perform. list: List milestones (type, status filters) | get: Get milestone by ID"
1425
- },
1426
- "milestone_id": {
1427
- "type": "string",
1428
- "description": "(get)"
1429
- },
1430
- "type": {
1431
- "type": "string",
1432
- "description": "(list) Filter by milestone type (title), e.g. Sprint or Release."
1433
- },
1434
- "status": {
1435
- "type": "string",
1436
- "enum": [
1437
- "created",
1438
- "active",
1439
- "closed"
1440
- ],
1441
- "description": "(list)"
1442
- },
1443
- "page": {
1444
- "type": "integer",
1445
- "minimum": 1,
1446
- "description": "(list)"
1447
- },
1448
- "per_page": {
1449
- "type": "integer",
1450
- "minimum": 1,
1451
- "maximum": 100,
1452
- "description": "(list)"
1453
- },
1454
- "verbose": {
1455
- "type": "boolean",
1456
- "default": false,
1457
- "description": "(list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1458
- },
1459
- "fields": {
1460
- "type": "array",
1461
- "items": {
1462
- "type": "string"
1463
- },
1464
- "description": "(list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1465
- },
1466
- "count": {
1467
- "type": "boolean",
1468
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1469
- },
1470
- "group_by": {
1471
- "type": "string",
1472
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1473
- }
1474
- },
1475
- "required": [
1476
- "command"
1477
- ],
1478
- "additionalProperties": false
1479
- }
1480
- },
1481
- {
1482
- "name": "issues",
1483
- "description": "Linked issues across resources (/api/v2/{project_id}/issues) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
1484
- "inputSchema": {
1485
- "type": "object",
1486
- "properties": {
1487
- "command": {
1488
- "type": "string",
1489
- "enum": [
1490
- "list",
1491
- "create",
1492
- "delete"
1493
- ],
1494
- "description": "CLI-style operation to perform. list: List linked issues (scope by test_id/suite_id/run_id/testrun_id/plan_id, filter by source) | create: Link issue to a resource (url or jira_id + one scope id) | delete: Unlink issue"
1495
- },
1496
- "test_id": {
1497
- "type": "string",
1498
- "description": "(list|create)"
1499
- },
1500
- "suite_id": {
1501
- "type": "string",
1502
- "description": "(list|create)"
1503
- },
1504
- "run_id": {
1505
- "type": "string",
1506
- "description": "(list|create)"
1507
- },
1508
- "testrun_id": {
1509
- "type": "integer",
1510
- "description": "(list|create)"
1511
- },
1512
- "plan_id": {
1513
- "type": "string",
1514
- "description": "(list|create)"
1515
- },
1516
- "source": {
1517
- "type": "string",
1518
- "description": "(list) Filter issues by source (e.g. jira)"
1519
- },
1520
- "url": {
1521
- "type": "string",
1522
- "description": "(create) Issue URL to link"
1523
- },
1524
- "jira_id": {
1525
- "type": "string",
1526
- "description": "(create) Jira issue key to link (alternative to url)"
1527
- },
1528
- "issue_id": {
1529
- "type": "integer",
1530
- "description": "(delete) ID of the linked issue to remove"
1531
- },
1532
- "type": {
1533
- "type": "string",
1534
- "enum": [
1535
- "issue",
1536
- "jira_issue"
1537
- ],
1538
- "description": "(delete) Kind of the linked issue"
1539
- },
1540
- "page": {
1541
- "type": "integer",
1542
- "minimum": 1,
1543
- "description": "(list)"
1544
- },
1545
- "per_page": {
1546
- "type": "integer",
1547
- "minimum": 1,
1548
- "maximum": 100,
1549
- "description": "(list)"
1550
- },
1551
- "verbose": {
1552
- "type": "boolean",
1553
- "default": false,
1554
- "description": "(list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1555
- },
1556
- "fields": {
1557
- "type": "array",
1558
- "items": {
1559
- "type": "string"
1560
- },
1561
- "description": "(list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1562
- },
1563
- "count": {
1564
- "type": "boolean",
1565
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1566
- },
1567
- "group_by": {
1568
- "type": "string",
1569
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1570
- }
1571
- },
1572
- "required": [
1573
- "command"
1574
- ],
1575
- "additionalProperties": false
1576
- }
1577
- },
1578
- {
1579
- "name": "plans",
1580
- "description": "Manage test plans (/api/v2/{project_id}/plans). Select tests for the plan with `tql` (TQL); the API resolves matching tests. Call `tql_help` for the syntax and full field list. CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
1581
- "inputSchema": {
1582
- "type": "object",
1583
- "properties": {
1584
- "command": {
1585
- "type": "string",
1586
- "enum": [
1587
- "list",
1588
- "get",
1589
- "create",
1590
- "update",
1591
- "delete",
1592
- "issues_list",
1593
- "issues_link",
1594
- "issues_unlink"
1595
- ],
1596
- "description": "CLI-style operation to perform. list: List plans (kind, hidden, labels, search_text filters) | get: Get plan by ID | create: Create plan (title required; select tests via test_ids/suite_ids/tql) | update: Update plan by ID | delete: Delete plan by ID | issues_list: List linked issues for a plan | issues_link: Link issue to a plan (url or jira_id) | issues_unlink: Unlink issue from a plan"
1597
- },
1598
- "plan_id": {
1599
- "type": "string",
1600
- "description": "(get|update|delete|issues_list|issues_link)"
1601
- },
1602
- "title": {
1603
- "type": "string",
1604
- "description": "(create|update)"
1605
- },
1606
- "description": {
1607
- "type": "string",
1608
- "description": "(create|update)"
1609
- },
1610
- "kind": {
1611
- "type": "string",
1612
- "enum": [
1613
- "manual",
1614
- "automated",
1615
- "mixed"
1616
- ],
1617
- "description": "(list|create|update) list: filter by kind; create/update: the plan kind"
1618
- },
1619
- "hidden": {
1620
- "type": "boolean",
1621
- "description": "(list|create|update) list: include hidden plans; create/update: set hidden flag"
1622
- },
1623
- "as_manual": {
1624
- "type": "boolean",
1625
- "description": "(create|update)"
1626
- },
1627
- "labels": {
1628
- "type": "array",
1629
- "items": {
1630
- "type": "string"
1631
- },
1632
- "description": "(list)"
1633
- },
1634
- "search_text": {
1635
- "type": "string",
1636
- "description": "(list)"
1637
- },
1638
- "tql": {
1639
- "type": "string",
1640
- "description": "(create|update) TQL to select tests for the plan. Fields: tag, label, priority, issue, jira, state, status, custom_status, created_at, updated_at, last_run_at, executed_at, created_by, assigned_to, suite, test, shared, milestone. Call `tql_help` for syntax. Examples: `priority == 'high'`, `tag in ['smoke', 'stage1']`."
1641
- },
1642
- "test_ids": {
1643
- "type": "array",
1644
- "items": {
1645
- "type": "string"
1646
- },
1647
- "description": "(create|update) List of test IDs (8-char) to include in the plan. If omitted, all tests matching the plan kind are included."
1648
- },
1649
- "suite_ids": {
1650
- "type": "array",
1651
- "items": {
1652
- "type": "string"
1653
- },
1654
- "description": "(create|update) List of suite IDs (8-char) to include in the plan. If omitted, all suites are considered."
1655
- },
1656
- "link": {
1657
- "type": "array",
1658
- "items": {
1659
- "type": "object",
1660
- "properties": {
1661
- "action": {
1662
- "type": "string",
1663
- "enum": [
1664
- "add",
1665
- "remove"
1666
- ]
1667
- },
1668
- "type": {
1669
- "type": "string",
1670
- "enum": [
1671
- "label",
1672
- "custom_field",
1673
- "tag",
1674
- "milestone",
1675
- "issue",
1676
- "jira"
1677
- ]
1678
- },
1679
- "value": {
1680
- "type": "string"
1681
- }
1682
- },
1683
- "required": [
1684
- "action",
1685
- "type",
1686
- "value"
1687
- ],
1688
- "additionalProperties": false
1689
- },
1690
- "description": "(create|update)"
1691
- },
1692
- "page": {
1693
- "type": "integer",
1694
- "minimum": 1,
1695
- "description": "(list|issues_list)"
1696
- },
1697
- "per_page": {
1698
- "type": "integer",
1699
- "minimum": 1,
1700
- "maximum": 100,
1701
- "description": "(list|issues_list)"
1702
- },
1703
- "source": {
1704
- "type": "string",
1705
- "description": "(issues_list) Filter issues by source (e.g. jira)"
1706
- },
1707
- "url": {
1708
- "type": "string",
1709
- "description": "(issues_link) Issue URL to link"
1710
- },
1711
- "jira_id": {
1712
- "type": "string",
1713
- "description": "(issues_link) Jira issue key to link (alternative to url)"
1714
- },
1715
- "issue_id": {
1716
- "type": "integer",
1717
- "description": "(issues_unlink) ID of the linked issue to remove"
1718
- },
1719
- "type": {
1720
- "type": "string",
1721
- "enum": [
1722
- "issue",
1723
- "jira_issue"
1724
- ],
1725
- "description": "(issues_unlink) Kind of the linked issue"
1726
- },
1727
- "verbose": {
1728
- "type": "boolean",
1729
- "default": false,
1730
- "description": "(issues_list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1731
- },
1732
- "fields": {
1733
- "type": "array",
1734
- "items": {
1735
- "type": "string"
1736
- },
1737
- "description": "(issues_list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1738
- },
1739
- "count": {
1740
- "type": "boolean",
1741
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1742
- },
1743
- "group_by": {
1744
- "type": "string",
1745
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1746
- }
1747
- },
1748
- "required": [
1749
- "command"
1750
- ],
1751
- "additionalProperties": false
1752
- }
1753
- },
1754
- {
1755
- "name": "requirements",
1756
- "description": "Manage requirements (/api/v2/{project_id}/requirements) CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
1757
- "inputSchema": {
1758
- "type": "object",
1759
- "properties": {
1760
- "command": {
1761
- "type": "string",
1762
- "enum": [
1763
- "list",
1764
- "get",
1765
- "create",
1766
- "update",
1767
- "delete"
1768
- ],
1769
- "description": "CLI-style operation to perform. list: List requirements (source, scope filters) | get: Get requirement by ID | create: Create requirement (title and source_type required) | update: Update requirement by ID | delete: Delete requirement by ID"
1770
- },
1771
- "requirement_id": {
1772
- "type": "string",
1773
- "description": "(get|update|delete)"
1774
- },
1775
- "title": {
1776
- "type": "string",
1777
- "description": "(create|update)"
1778
- },
1779
- "source_type": {
1780
- "type": "string",
1781
- "enum": [
1782
- "jira",
1783
- "confluence",
1784
- "file",
1785
- "text"
1786
- ],
1787
- "description": "(create)"
1788
- },
1789
- "source": {
1790
- "type": "string",
1791
- "enum": [
1792
- "jira",
1793
- "confluence",
1794
- "file",
1795
- "text"
1796
- ],
1797
- "description": "(list)"
1798
- },
1799
- "scope": {
1800
- "type": "string",
1801
- "enum": [
1802
- "global",
1803
- "attached",
1804
- "detached",
1805
- "without_suites"
1806
- ],
1807
- "description": "(list)"
1808
- },
1809
- "description": {
1810
- "type": "string",
1811
- "description": "(create|update) Required for text requirements (min 500 chars on create); only applied for text requirements on update."
1812
- },
1813
- "details": {
1814
- "type": "string",
1815
- "description": "(create|update)"
1816
- },
1817
- "active": {
1818
- "type": "boolean",
1819
- "description": "(create|update)"
1820
- },
1821
- "global": {
1822
- "type": "boolean",
1823
- "description": "(create|update)"
1824
- },
1825
- "confluence_url": {
1826
- "type": "string",
1827
- "description": "(create) Required for confluence requirements."
1828
- },
1829
- "files": {
1830
- "type": "array",
1831
- "items": {
1832
- "type": "string"
1833
- },
1834
- "description": "(create|update) Local file paths to upload for file requirements."
1835
- },
1836
- "page": {
1837
- "type": "integer",
1838
- "minimum": 1,
1839
- "description": "(list)"
1840
- },
1841
- "per_page": {
1842
- "type": "integer",
1843
- "minimum": 1,
1844
- "maximum": 100,
1845
- "description": "(list)"
1846
- },
1847
- "verbose": {
1848
- "type": "boolean",
1849
- "default": false,
1850
- "description": "(list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1851
- },
1852
- "fields": {
1853
- "type": "array",
1854
- "items": {
1855
- "type": "string"
1856
- },
1857
- "description": "(list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1858
- },
1859
- "count": {
1860
- "type": "boolean",
1861
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1862
- },
1863
- "group_by": {
1864
- "type": "string",
1865
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1866
- }
1867
- },
1868
- "required": [
1869
- "command"
1870
- ],
1871
- "additionalProperties": false
1872
- }
1873
- },
1874
- {
1875
- "name": "branches",
1876
- "description": "Manage project branches (/api/v2/{project_id}/branches). Requires the branches feature (enterprise plan). CLI-style: pass \"command\" plus the params it needs; each param description lists the commands it applies to.",
1877
- "inputSchema": {
1878
- "type": "object",
1879
- "properties": {
1880
- "command": {
1881
- "type": "string",
1882
- "enum": [
1883
- "list",
1884
- "get",
1885
- "create",
1886
- "update",
1887
- "delete"
1888
- ],
1889
- "description": "CLI-style operation to perform. list: List project branches (filter_state / filter_title to narrow down) | get: Get branch by slug | create: Create branch (title required; slug is generated from it) | update: Update branch title | delete: Delete branch by slug"
1890
- },
1891
- "branch_id": {
1892
- "type": "string",
1893
- "description": "(get|update|delete) Branch slug"
1894
- },
1895
- "title": {
1896
- "type": "string",
1897
- "description": "(create|update) Branch title; a slug is generated from it"
1898
- },
1899
- "filter_state": {
1900
- "type": "string",
1901
- "enum": [
1902
- "active",
1903
- "merged"
1904
- ],
1905
- "description": "(list) Filter by branch state"
1906
- },
1907
- "filter_title": {
1908
- "type": "string",
1909
- "description": "(list) Filter by title (partial substring match)"
1910
- },
1911
- "page": {
1912
- "type": "integer",
1913
- "minimum": 1,
1914
- "description": "(list)"
1915
- },
1916
- "per_page": {
1917
- "type": "integer",
1918
- "minimum": 1,
1919
- "maximum": 100,
1920
- "description": "(list)"
1921
- },
1922
- "verbose": {
1923
- "type": "boolean",
1924
- "default": false,
1925
- "description": "(list) Return full response bodies. Default strips entity-specific heavy fields and null values; set true when you need those."
1926
- },
1927
- "fields": {
1928
- "type": "array",
1929
- "items": {
1930
- "type": "string"
1931
- },
1932
- "description": "(list) Fields to keep per item (e.g. [\"id\",\"title\",\"status\",\"message\"]). Ignored when verbose is true."
1933
- },
1934
- "count": {
1935
- "type": "boolean",
1936
- "description": "(list) Return only metadata with total counts instead of the entity list. Pair with group_by for an aggregated breakdown."
1937
- },
1938
- "group_by": {
1939
- "type": "string",
1940
- "description": "(list) Aggregate counts by this field, e.g. status, state, priority, created_by (use with count=true). The backend validates supported fields per resource. For created_by, counts are keyed by user email, not ID."
1941
- }
1942
- },
1943
- "required": [
1944
- "command"
1945
- ],
1946
- "additionalProperties": false
1947
- }
1948
- }
1949
- ]