@qase/mcp-server 1.1.8 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +25 -0
- package/README.md +75 -542
- package/build/auth/client-context.d.ts +12 -0
- package/build/auth/client-context.d.ts.map +1 -0
- package/build/auth/client-context.js +12 -0
- package/build/auth/client-context.js.map +1 -0
- package/build/auth/jwks-verifier.d.ts +15 -0
- package/build/auth/jwks-verifier.d.ts.map +1 -0
- package/build/auth/jwks-verifier.js +31 -0
- package/build/auth/jwks-verifier.js.map +1 -0
- package/build/auth/mcp-guard.d.ts +15 -0
- package/build/auth/mcp-guard.d.ts.map +1 -0
- package/build/auth/mcp-guard.js +44 -0
- package/build/auth/mcp-guard.js.map +1 -0
- package/build/auth/oauth-config.d.ts +40 -0
- package/build/auth/oauth-config.d.ts.map +1 -0
- package/build/auth/oauth-config.js +34 -0
- package/build/auth/oauth-config.js.map +1 -0
- package/build/auth/proxy-provider.d.ts +31 -0
- package/build/auth/proxy-provider.d.ts.map +1 -0
- package/build/auth/proxy-provider.js +87 -0
- package/build/auth/proxy-provider.js.map +1 -0
- package/build/auth/token-type.d.ts +7 -0
- package/build/auth/token-type.d.ts.map +1 -0
- package/build/auth/token-type.js +10 -0
- package/build/auth/token-type.js.map +1 -0
- package/build/cache/circuit-breaker.d.ts +33 -0
- package/build/cache/circuit-breaker.d.ts.map +1 -0
- package/build/cache/circuit-breaker.js +68 -0
- package/build/cache/circuit-breaker.js.map +1 -0
- package/build/cache/index.d.ts +24 -0
- package/build/cache/index.d.ts.map +1 -0
- package/build/cache/index.js +86 -0
- package/build/cache/index.js.map +1 -0
- package/build/cache/keys.d.ts +25 -0
- package/build/cache/keys.d.ts.map +1 -0
- package/build/cache/keys.js +36 -0
- package/build/cache/keys.js.map +1 -0
- package/build/cache/layered.d.ts +31 -0
- package/build/cache/layered.d.ts.map +1 -0
- package/build/cache/layered.js +88 -0
- package/build/cache/layered.js.map +1 -0
- package/build/cache/memory.d.ts +32 -0
- package/build/cache/memory.d.ts.map +1 -0
- package/build/cache/memory.js +108 -0
- package/build/cache/memory.js.map +1 -0
- package/build/cache/metrics.d.ts +31 -0
- package/build/cache/metrics.d.ts.map +1 -0
- package/build/cache/metrics.js +95 -0
- package/build/cache/metrics.js.map +1 -0
- package/build/cache/prom-format.d.ts +7 -0
- package/build/cache/prom-format.d.ts.map +1 -0
- package/build/cache/prom-format.js +16 -0
- package/build/cache/prom-format.js.map +1 -0
- package/build/cache/redis-bus.d.ts +29 -0
- package/build/cache/redis-bus.d.ts.map +1 -0
- package/build/cache/redis-bus.js +50 -0
- package/build/cache/redis-bus.js.map +1 -0
- package/build/cache/redis.d.ts +32 -0
- package/build/cache/redis.d.ts.map +1 -0
- package/build/cache/redis.js +89 -0
- package/build/cache/redis.js.map +1 -0
- package/build/cache/types.d.ts +38 -0
- package/build/cache/types.d.ts.map +1 -0
- package/build/cache/types.js +2 -0
- package/build/cache/types.js.map +1 -0
- package/build/client/index.d.ts +10 -3
- package/build/client/index.d.ts.map +1 -1
- package/build/client/index.js +75 -50
- package/build/client/index.js.map +1 -1
- package/build/http/agent.d.ts +16 -0
- package/build/http/agent.d.ts.map +1 -0
- package/build/http/agent.js +16 -0
- package/build/http/agent.js.map +1 -0
- package/build/http/dedupe.d.ts +14 -0
- package/build/http/dedupe.d.ts.map +1 -0
- package/build/http/dedupe.js +69 -0
- package/build/http/dedupe.js.map +1 -0
- package/build/http/index.d.ts +6 -0
- package/build/http/index.d.ts.map +1 -0
- package/build/http/index.js +4 -0
- package/build/http/index.js.map +1 -0
- package/build/http/retry.d.ts +18 -0
- package/build/http/retry.d.ts.map +1 -0
- package/build/http/retry.js +52 -0
- package/build/http/retry.js.map +1 -0
- package/build/index.d.ts +1 -18
- package/build/index.d.ts.map +1 -1
- package/build/index.js +95 -63
- package/build/index.js.map +1 -1
- package/build/operations-v2/composites/ci-report.d.ts +2 -0
- package/build/operations-v2/composites/ci-report.d.ts.map +1 -0
- package/build/operations-v2/composites/ci-report.js +99 -0
- package/build/operations-v2/composites/ci-report.js.map +1 -0
- package/build/operations-v2/composites/regression-run.d.ts +2 -0
- package/build/operations-v2/composites/regression-run.d.ts.map +1 -0
- package/build/operations-v2/composites/regression-run.js +81 -0
- package/build/operations-v2/composites/regression-run.js.map +1 -0
- package/build/operations-v2/composites/triage-defect.d.ts +2 -0
- package/build/operations-v2/composites/triage-defect.d.ts.map +1 -0
- package/build/operations-v2/composites/triage-defect.js +67 -0
- package/build/operations-v2/composites/triage-defect.js.map +1 -0
- package/build/operations-v2/escape/api.d.ts +2 -0
- package/build/operations-v2/escape/api.d.ts.map +1 -0
- package/build/operations-v2/escape/api.js +34 -0
- package/build/operations-v2/escape/api.js.map +1 -0
- package/build/operations-v2/index.d.ts +19 -0
- package/build/operations-v2/index.d.ts.map +1 -0
- package/build/operations-v2/index.js +25 -0
- package/build/operations-v2/index.js.map +1 -0
- package/build/operations-v2/meta/discover.d.ts +9 -0
- package/build/operations-v2/meta/discover.d.ts.map +1 -0
- package/build/operations-v2/meta/discover.js +76 -0
- package/build/operations-v2/meta/discover.js.map +1 -0
- package/build/{operations/search.d.ts → operations-v2/qql/index.d.ts} +1 -1
- package/build/operations-v2/qql/index.d.ts.map +1 -0
- package/build/{operations/search.js → operations-v2/qql/index.js} +34 -9
- package/build/operations-v2/qql/index.js.map +1 -0
- package/build/operations-v2/read/get.d.ts +2 -0
- package/build/operations-v2/read/get.d.ts.map +1 -0
- package/build/operations-v2/read/get.js +91 -0
- package/build/operations-v2/read/get.js.map +1 -0
- package/build/operations-v2/read/project-context.d.ts +2 -0
- package/build/operations-v2/read/project-context.d.ts.map +1 -0
- package/build/operations-v2/read/project-context.js +102 -0
- package/build/operations-v2/read/project-context.js.map +1 -0
- package/build/operations-v2/write/attachments.d.ts +2 -0
- package/build/operations-v2/write/attachments.d.ts.map +1 -0
- package/build/operations-v2/write/attachments.js +58 -0
- package/build/operations-v2/write/attachments.js.map +1 -0
- package/build/operations-v2/write/cases.d.ts +2 -0
- package/build/operations-v2/write/cases.d.ts.map +1 -0
- package/build/operations-v2/write/cases.js +121 -0
- package/build/operations-v2/write/cases.js.map +1 -0
- package/build/operations-v2/write/defects.d.ts +2 -0
- package/build/operations-v2/write/defects.d.ts.map +1 -0
- package/build/operations-v2/write/defects.js +81 -0
- package/build/operations-v2/write/defects.js.map +1 -0
- package/build/operations-v2/write/environments.d.ts +2 -0
- package/build/operations-v2/write/environments.d.ts.map +1 -0
- package/build/operations-v2/write/environments.js +56 -0
- package/build/operations-v2/write/environments.js.map +1 -0
- package/build/operations-v2/write/milestones.d.ts +2 -0
- package/build/operations-v2/write/milestones.d.ts.map +1 -0
- package/build/operations-v2/write/milestones.js +56 -0
- package/build/operations-v2/write/milestones.js.map +1 -0
- package/build/operations-v2/write/plans.d.ts +2 -0
- package/build/operations-v2/write/plans.d.ts.map +1 -0
- package/build/operations-v2/write/plans.js +55 -0
- package/build/operations-v2/write/plans.js.map +1 -0
- package/build/operations-v2/write/results.d.ts +2 -0
- package/build/operations-v2/write/results.d.ts.map +1 -0
- package/build/operations-v2/write/results.js +72 -0
- package/build/operations-v2/write/results.js.map +1 -0
- package/build/operations-v2/write/runs.d.ts +2 -0
- package/build/operations-v2/write/runs.d.ts.map +1 -0
- package/build/operations-v2/write/runs.js +84 -0
- package/build/operations-v2/write/runs.js.map +1 -0
- package/build/operations-v2/write/shared-steps.d.ts +2 -0
- package/build/operations-v2/write/shared-steps.d.ts.map +1 -0
- package/build/operations-v2/write/shared-steps.js +60 -0
- package/build/operations-v2/write/shared-steps.js.map +1 -0
- package/build/operations-v2/write/suites.d.ts +2 -0
- package/build/operations-v2/write/suites.d.ts.map +1 -0
- package/build/operations-v2/write/suites.js +63 -0
- package/build/operations-v2/write/suites.js.map +1 -0
- package/build/prompts/index.d.ts +31 -0
- package/build/prompts/index.d.ts.map +1 -0
- package/build/prompts/index.js +229 -0
- package/build/prompts/index.js.map +1 -0
- package/build/transports/sse.d.ts.map +1 -1
- package/build/transports/sse.js +6 -0
- package/build/transports/sse.js.map +1 -1
- package/build/transports/streamableHttp.d.ts +6 -1
- package/build/transports/streamableHttp.d.ts.map +1 -1
- package/build/transports/streamableHttp.js +128 -16
- package/build/transports/streamableHttp.js.map +1 -1
- package/build/utils/auth-context.d.ts +8 -0
- package/build/utils/auth-context.d.ts.map +1 -1
- package/build/utils/auth-context.js +18 -0
- package/build/utils/auth-context.js.map +1 -1
- package/build/utils/case-enums.d.ts +5 -3
- package/build/utils/case-enums.d.ts.map +1 -1
- package/build/utils/case-enums.js +77 -59
- package/build/utils/case-enums.js.map +1 -1
- package/build/utils/output-schemas.d.ts +16 -0
- package/build/utils/output-schemas.d.ts.map +1 -0
- package/build/utils/output-schemas.js +82 -0
- package/build/utils/output-schemas.js.map +1 -0
- package/build/utils/registry.d.ts +42 -9
- package/build/utils/registry.d.ts.map +1 -1
- package/build/utils/registry.js +64 -11
- package/build/utils/registry.js.map +1 -1
- package/build/utils/response-shape.d.ts +23 -0
- package/build/utils/response-shape.d.ts.map +1 -0
- package/build/utils/response-shape.js +73 -0
- package/build/utils/response-shape.js.map +1 -0
- package/build/utils/rich-response.d.ts +58 -0
- package/build/utils/rich-response.d.ts.map +1 -0
- package/build/utils/rich-response.js +93 -0
- package/build/utils/rich-response.js.map +1 -0
- package/build/utils/server-context.d.ts +65 -0
- package/build/utils/server-context.d.ts.map +1 -0
- package/build/utils/server-context.js +67 -0
- package/build/utils/server-context.js.map +1 -0
- package/build/version.d.ts +1 -1
- package/build/version.js +1 -1
- package/docs/connect.md +81 -0
- package/docs/migration.md +351 -0
- package/docs/self-run.md +270 -0
- package/docs/tools.md +109 -0
- package/docs/troubleshooting.md +144 -0
- package/package.json +11 -2
- package/server.json +8 -2
- package/build/operations/attachments.d.ts +0 -8
- package/build/operations/attachments.d.ts.map +0 -1
- package/build/operations/attachments.js +0 -146
- package/build/operations/attachments.js.map +0 -1
- package/build/operations/authors.d.ts +0 -8
- package/build/operations/authors.d.ts.map +0 -1
- package/build/operations/authors.js +0 -70
- package/build/operations/authors.js.map +0 -1
- package/build/operations/cases.d.ts +0 -8
- package/build/operations/cases.d.ts.map +0 -1
- package/build/operations/cases.js +0 -370
- package/build/operations/cases.js.map +0 -1
- package/build/operations/configurations.d.ts +0 -10
- package/build/operations/configurations.d.ts.map +0 -1
- package/build/operations/configurations.js +0 -125
- package/build/operations/configurations.js.map +0 -1
- package/build/operations/custom-fields.d.ts +0 -8
- package/build/operations/custom-fields.d.ts.map +0 -1
- package/build/operations/custom-fields.js +0 -172
- package/build/operations/custom-fields.js.map +0 -1
- package/build/operations/defects.d.ts +0 -8
- package/build/operations/defects.d.ts.map +0 -1
- package/build/operations/defects.js +0 -256
- package/build/operations/defects.js.map +0 -1
- package/build/operations/environments.d.ts +0 -8
- package/build/operations/environments.d.ts.map +0 -1
- package/build/operations/environments.js +0 -154
- package/build/operations/environments.js.map +0 -1
- package/build/operations/milestones.d.ts +0 -8
- package/build/operations/milestones.d.ts.map +0 -1
- package/build/operations/milestones.js +0 -155
- package/build/operations/milestones.js.map +0 -1
- package/build/operations/plans.d.ts +0 -8
- package/build/operations/plans.d.ts.map +0 -1
- package/build/operations/plans.js +0 -158
- package/build/operations/plans.js.map +0 -1
- package/build/operations/projects.d.ts +0 -8
- package/build/operations/projects.d.ts.map +0 -1
- package/build/operations/projects.js +0 -192
- package/build/operations/projects.js.map +0 -1
- package/build/operations/results.d.ts +0 -8
- package/build/operations/results.d.ts.map +0 -1
- package/build/operations/results.js +0 -214
- package/build/operations/results.js.map +0 -1
- package/build/operations/runs.d.ts +0 -8
- package/build/operations/runs.d.ts.map +0 -1
- package/build/operations/runs.js +0 -224
- package/build/operations/runs.js.map +0 -1
- package/build/operations/search.d.ts.map +0 -1
- package/build/operations/search.js.map +0 -1
- package/build/operations/shared-parameters.d.ts +0 -10
- package/build/operations/shared-parameters.d.ts.map +0 -1
- package/build/operations/shared-parameters.js +0 -93
- package/build/operations/shared-parameters.js.map +0 -1
- package/build/operations/shared-steps.d.ts +0 -8
- package/build/operations/shared-steps.d.ts.map +0 -1
- package/build/operations/shared-steps.js +0 -160
- package/build/operations/shared-steps.js.map +0 -1
- package/build/operations/suites.d.ts +0 -8
- package/build/operations/suites.d.ts.map +0 -1
- package/build/operations/suites.js +0 -169
- package/build/operations/suites.js.map +0 -1
- package/build/operations/system-fields.d.ts +0 -10
- package/build/operations/system-fields.d.ts.map +0 -1
- package/build/operations/system-fields.js +0 -47
- package/build/operations/system-fields.js.map +0 -1
- package/build/operations/users.d.ts +0 -10
- package/build/operations/users.d.ts.map +0 -1
- package/build/operations/users.js +0 -78
- package/build/operations/users.js.map +0 -1
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getApiClient } from '../../client/index.js';
|
|
3
|
+
import { toolRegistry, CreateAnnotation, DeleteAnnotation } from '../../utils/registry.js';
|
|
4
|
+
import { toResultAsync, createToolError } from '../../utils/errors.js';
|
|
5
|
+
import { ProjectCodeSchema, IdSchema } from '../../utils/validation.js';
|
|
6
|
+
import { normalizeCaseEnums } from '../../utils/case-enums.js';
|
|
7
|
+
const stepFields = {
|
|
8
|
+
action: z.string().optional().describe('Step action (classic steps)'),
|
|
9
|
+
expected_result: z.string().optional().describe('Expected result'),
|
|
10
|
+
data: z.string().optional().describe('Test data'),
|
|
11
|
+
value: z.string().optional().describe('Gherkin scenario text (when steps_type is "gherkin")'),
|
|
12
|
+
attachments: z.array(z.string()).optional().describe('Attachment hashes'),
|
|
13
|
+
};
|
|
14
|
+
const TestStepSchema = z.object({
|
|
15
|
+
...stepFields,
|
|
16
|
+
steps: z
|
|
17
|
+
.array(z.object(stepFields).passthrough())
|
|
18
|
+
.optional()
|
|
19
|
+
.describe('Nested substeps. Same structure as parent steps, supports further nesting.'),
|
|
20
|
+
});
|
|
21
|
+
const CaseFieldsSchema = z.object({
|
|
22
|
+
title: z.string().min(1).max(255).describe('Test case title'),
|
|
23
|
+
description: z.string().optional(),
|
|
24
|
+
preconditions: z.string().optional(),
|
|
25
|
+
postconditions: z.string().optional(),
|
|
26
|
+
severity: z.string().optional().describe('Severity label or numeric ID'),
|
|
27
|
+
priority: z
|
|
28
|
+
.string()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe('Priority label or numeric ID (0=not set, 1=high, 2=medium, 3=low)'),
|
|
31
|
+
type: z.string().optional().describe('Type label or numeric ID'),
|
|
32
|
+
layer: z.string().optional().describe('Layer label or numeric ID'),
|
|
33
|
+
behavior: z.string().optional().describe('Behavior label or numeric ID'),
|
|
34
|
+
automation: z
|
|
35
|
+
.string()
|
|
36
|
+
.optional()
|
|
37
|
+
.describe('Automation status (label, slug, or numeric ID: 0=Manual / is-not-automated, 1=To be automated, 2=Automated)'),
|
|
38
|
+
status: z.string().optional().describe('Status label or numeric ID'),
|
|
39
|
+
is_flaky: z.boolean().optional(),
|
|
40
|
+
suite_id: z.number().int().positive().optional(),
|
|
41
|
+
milestone_id: z.number().int().positive().optional(),
|
|
42
|
+
steps: z.array(TestStepSchema).optional(),
|
|
43
|
+
steps_type: z.enum(['classic', 'gherkin']).optional(),
|
|
44
|
+
tags: z.array(z.string()).optional(),
|
|
45
|
+
attachments: z.array(z.string()).optional(),
|
|
46
|
+
custom_field: z.record(z.any()).optional(),
|
|
47
|
+
});
|
|
48
|
+
const UpsertSchema = z.object({
|
|
49
|
+
code: ProjectCodeSchema,
|
|
50
|
+
id: IdSchema.optional().describe('Case ID — if provided, updates the case; if omitted, creates a new one'),
|
|
51
|
+
...CaseFieldsSchema.shape,
|
|
52
|
+
});
|
|
53
|
+
const DeleteSchema = z.object({
|
|
54
|
+
code: ProjectCodeSchema,
|
|
55
|
+
id: IdSchema,
|
|
56
|
+
});
|
|
57
|
+
/**
|
|
58
|
+
* Map the user-facing `automation` enum (0=Manual, 1=To be automated,
|
|
59
|
+
* 2=Automated) to the current API contract (`isManual` + `isToBeAutomated`).
|
|
60
|
+
* The legacy `automation` field is deprecated in qase-api-client and dropped
|
|
61
|
+
* from the outbound payload.
|
|
62
|
+
*/
|
|
63
|
+
function applyAutomationMapping(caseData) {
|
|
64
|
+
const automationId = caseData.automation;
|
|
65
|
+
if (typeof automationId !== 'number') {
|
|
66
|
+
return caseData;
|
|
67
|
+
}
|
|
68
|
+
const { automation: _drop, ...rest } = caseData;
|
|
69
|
+
const mapped = rest;
|
|
70
|
+
switch (automationId) {
|
|
71
|
+
case 2: // Automated
|
|
72
|
+
mapped.isManual = 0;
|
|
73
|
+
break;
|
|
74
|
+
case 1: // To be automated
|
|
75
|
+
mapped.isManual = 1;
|
|
76
|
+
mapped.isToBeAutomated = 1;
|
|
77
|
+
break;
|
|
78
|
+
case 0: // Manual
|
|
79
|
+
default:
|
|
80
|
+
mapped.isManual = 1;
|
|
81
|
+
mapped.isToBeAutomated = 0;
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
return mapped;
|
|
85
|
+
}
|
|
86
|
+
async function upsert(args) {
|
|
87
|
+
const client = getApiClient();
|
|
88
|
+
const { code, id, ...data } = args;
|
|
89
|
+
const normalized = applyAutomationMapping(await normalizeCaseEnums(data));
|
|
90
|
+
const result = await toResultAsync(id
|
|
91
|
+
? client.cases.updateCase(code, id, normalized)
|
|
92
|
+
: client.cases.createCase(code, normalized));
|
|
93
|
+
return result.match((r) => r.data.result, (e) => {
|
|
94
|
+
throw createToolError(e, 'case operation');
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
async function del(args) {
|
|
98
|
+
const client = getApiClient();
|
|
99
|
+
const result = await toResultAsync(client.cases.deleteCase(args.code, args.id));
|
|
100
|
+
return result.match(() => ({ success: true, id: args.id }), (e) => {
|
|
101
|
+
throw createToolError(e, 'case operation');
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
toolRegistry.register({
|
|
105
|
+
name: 'qase_case_upsert',
|
|
106
|
+
description: 'Create or update a test case. If `id` is provided, updates the existing case; ' +
|
|
107
|
+
'if omitted, creates a new one. Enum fields (priority, severity, type, etc.) accept ' +
|
|
108
|
+
'both labels ("high", "blocker") and numeric IDs — the server normalizes automatically.',
|
|
109
|
+
schema: UpsertSchema,
|
|
110
|
+
handler: upsert,
|
|
111
|
+
annotations: CreateAnnotation,
|
|
112
|
+
});
|
|
113
|
+
toolRegistry.register({
|
|
114
|
+
name: 'qase_case_delete',
|
|
115
|
+
description: 'Delete a test case by project code and case ID.',
|
|
116
|
+
schema: DeleteSchema,
|
|
117
|
+
handler: del,
|
|
118
|
+
annotations: DeleteAnnotation,
|
|
119
|
+
visibility: 'discoverable',
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=cases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cases.js","sourceRoot":"","sources":["../../../src/operations-v2/write/cases.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defects.d.ts","sourceRoot":"","sources":["../../../src/operations-v2/write/defects.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getApiClient } from '../../client/index.js';
|
|
3
|
+
import { toolRegistry, CreateAnnotation, DeleteAnnotation } from '../../utils/registry.js';
|
|
4
|
+
import { toResultAsync, createToolError } from '../../utils/errors.js';
|
|
5
|
+
import { ProjectCodeSchema, IdSchema } from '../../utils/validation.js';
|
|
6
|
+
const DefectFieldsSchema = z.object({
|
|
7
|
+
title: z.string().min(1).max(255).describe('Defect title'),
|
|
8
|
+
actual_result: z.string().optional(),
|
|
9
|
+
severity: z
|
|
10
|
+
.enum(['undefined', 'blocker', 'critical', 'major', 'normal', 'minor', 'trivial'])
|
|
11
|
+
.optional(),
|
|
12
|
+
status: z
|
|
13
|
+
.enum(['open', 'in_progress', 'resolved', 'invalid'])
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('Set to "resolved" to resolve the defect'),
|
|
16
|
+
tags: z.array(z.string()).optional(),
|
|
17
|
+
attachments: z.array(z.string()).optional(),
|
|
18
|
+
custom_field: z.record(z.any()).optional(),
|
|
19
|
+
});
|
|
20
|
+
const UpsertSchema = z.object({
|
|
21
|
+
code: ProjectCodeSchema,
|
|
22
|
+
id: IdSchema.optional().describe('Defect ID — if provided, updates; if omitted, creates'),
|
|
23
|
+
...DefectFieldsSchema.shape,
|
|
24
|
+
});
|
|
25
|
+
const DeleteSchema = z.object({
|
|
26
|
+
code: ProjectCodeSchema,
|
|
27
|
+
id: IdSchema,
|
|
28
|
+
});
|
|
29
|
+
async function upsert(args) {
|
|
30
|
+
const client = getApiClient();
|
|
31
|
+
const { code, id, status, ...data } = args;
|
|
32
|
+
if (id) {
|
|
33
|
+
// Update path: handle status changes
|
|
34
|
+
if (status === 'resolved') {
|
|
35
|
+
const res = await toResultAsync(client.defects.resolveDefect(code, id));
|
|
36
|
+
return res.match((r) => r.data.result ?? { success: true, id, status: 'resolved' }, (e) => {
|
|
37
|
+
throw createToolError(e, 'defect operation');
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
if (status) {
|
|
41
|
+
const res = await toResultAsync(client.defects.updateDefectStatus(code, id, { status }));
|
|
42
|
+
return res.match(() => ({ success: true, id, status }), (e) => {
|
|
43
|
+
throw createToolError(e, 'defect operation');
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
const res = await toResultAsync(client.defects.updateDefect(code, id, data));
|
|
47
|
+
return res.match((r) => r.data.result, (e) => {
|
|
48
|
+
throw createToolError(e, 'defect operation');
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// Create path
|
|
52
|
+
const createData = { ...data, ...(status && { status }) };
|
|
53
|
+
const res = await toResultAsync(client.defects.createDefect(code, createData));
|
|
54
|
+
return res.match((r) => r.data.result, (e) => {
|
|
55
|
+
throw createToolError(e, 'defect operation');
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
async function del(args) {
|
|
59
|
+
const client = getApiClient();
|
|
60
|
+
const result = await toResultAsync(client.defects.deleteDefect(args.code, args.id));
|
|
61
|
+
return result.match(() => ({ success: true, id: args.id }), (e) => {
|
|
62
|
+
throw createToolError(e, 'defect operation');
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
toolRegistry.register({
|
|
66
|
+
name: 'qase_defect_upsert',
|
|
67
|
+
description: 'Create or update a defect. If `id` is provided, updates (including status changes and resolve). ' +
|
|
68
|
+
'If omitted, creates a new defect. Set `status: "resolved"` to resolve an existing defect.',
|
|
69
|
+
schema: UpsertSchema,
|
|
70
|
+
handler: upsert,
|
|
71
|
+
annotations: CreateAnnotation,
|
|
72
|
+
});
|
|
73
|
+
toolRegistry.register({
|
|
74
|
+
name: 'qase_defect_delete',
|
|
75
|
+
description: 'Delete a defect by project code and defect ID.',
|
|
76
|
+
schema: DeleteSchema,
|
|
77
|
+
handler: del,
|
|
78
|
+
annotations: DeleteAnnotation,
|
|
79
|
+
visibility: 'discoverable',
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=defects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defects.js","sourceRoot":"","sources":["../../../src/operations-v2/write/defects.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environments.d.ts","sourceRoot":"","sources":["../../../src/operations-v2/write/environments.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getApiClient } from '../../client/index.js';
|
|
3
|
+
import { toolRegistry, CreateAnnotation, DeleteAnnotation } from '../../utils/registry.js';
|
|
4
|
+
import { toResultAsync, createToolError } from '../../utils/errors.js';
|
|
5
|
+
import { ProjectCodeSchema, IdSchema } from '../../utils/validation.js';
|
|
6
|
+
const UpsertSchema = z.object({
|
|
7
|
+
code: ProjectCodeSchema,
|
|
8
|
+
id: IdSchema.optional().describe('Environment ID — if provided, updates; if omitted, creates'),
|
|
9
|
+
title: z.string().min(1).max(255).describe('Environment title'),
|
|
10
|
+
description: z.string().optional(),
|
|
11
|
+
slug: z.string().optional().describe('URL-friendly identifier'),
|
|
12
|
+
host: z.string().optional().describe('Environment host/URL'),
|
|
13
|
+
});
|
|
14
|
+
const DeleteSchema = z.object({
|
|
15
|
+
code: ProjectCodeSchema,
|
|
16
|
+
id: IdSchema,
|
|
17
|
+
});
|
|
18
|
+
async function upsert(args) {
|
|
19
|
+
const client = getApiClient();
|
|
20
|
+
const { code, id, ...data } = args;
|
|
21
|
+
if (id) {
|
|
22
|
+
const result = await toResultAsync(client.environment.updateEnvironment(code, id, data));
|
|
23
|
+
return result.match(() => ({ success: true, id }), (e) => {
|
|
24
|
+
throw createToolError(e, 'environment operation');
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const result = await toResultAsync(client.environment.createEnvironment(code, data));
|
|
28
|
+
return result.match((r) => r.data.result, (e) => {
|
|
29
|
+
throw createToolError(e, 'environment operation');
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async function del(args) {
|
|
33
|
+
const client = getApiClient();
|
|
34
|
+
const result = await toResultAsync(client.environment.deleteEnvironment(args.code, args.id));
|
|
35
|
+
return result.match(() => ({ success: true, id: args.id }), (e) => {
|
|
36
|
+
throw createToolError(e, 'environment operation');
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
toolRegistry.register({
|
|
40
|
+
name: 'qase_environment_upsert',
|
|
41
|
+
description: 'Create or update a test environment. If `id` is provided, updates the existing environment; ' +
|
|
42
|
+
'if omitted, creates a new one.',
|
|
43
|
+
schema: UpsertSchema,
|
|
44
|
+
handler: upsert,
|
|
45
|
+
annotations: CreateAnnotation,
|
|
46
|
+
visibility: 'discoverable',
|
|
47
|
+
});
|
|
48
|
+
toolRegistry.register({
|
|
49
|
+
name: 'qase_environment_delete',
|
|
50
|
+
description: 'Delete a test environment by project code and environment ID.',
|
|
51
|
+
schema: DeleteSchema,
|
|
52
|
+
handler: del,
|
|
53
|
+
annotations: DeleteAnnotation,
|
|
54
|
+
visibility: 'discoverable',
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=environments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"environments.js","sourceRoot":"","sources":["../../../src/operations-v2/write/environments.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestones.d.ts","sourceRoot":"","sources":["../../../src/operations-v2/write/milestones.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getApiClient } from '../../client/index.js';
|
|
3
|
+
import { toolRegistry, CreateAnnotation, DeleteAnnotation } from '../../utils/registry.js';
|
|
4
|
+
import { toResultAsync, createToolError } from '../../utils/errors.js';
|
|
5
|
+
import { ProjectCodeSchema, IdSchema } from '../../utils/validation.js';
|
|
6
|
+
const UpsertSchema = z.object({
|
|
7
|
+
code: ProjectCodeSchema,
|
|
8
|
+
id: IdSchema.optional().describe('Milestone ID — if provided, updates; if omitted, creates'),
|
|
9
|
+
title: z.string().min(1).max(255).describe('Milestone title'),
|
|
10
|
+
description: z.string().optional(),
|
|
11
|
+
status: z.enum(['active', 'completed']).optional(),
|
|
12
|
+
due_date: z.number().optional().describe('Due date as Unix timestamp'),
|
|
13
|
+
});
|
|
14
|
+
const DeleteSchema = z.object({
|
|
15
|
+
code: ProjectCodeSchema,
|
|
16
|
+
id: IdSchema,
|
|
17
|
+
});
|
|
18
|
+
async function upsert(args) {
|
|
19
|
+
const client = getApiClient();
|
|
20
|
+
const { code, id, ...data } = args;
|
|
21
|
+
if (id) {
|
|
22
|
+
const result = await toResultAsync(client.milestones.updateMilestone(code, id, data));
|
|
23
|
+
return result.match(() => ({ success: true, id }), (e) => {
|
|
24
|
+
throw createToolError(e, 'milestone operation');
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
const result = await toResultAsync(client.milestones.createMilestone(code, data));
|
|
28
|
+
return result.match((r) => r.data.result, (e) => {
|
|
29
|
+
throw createToolError(e, 'milestone operation');
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
async function del(args) {
|
|
33
|
+
const client = getApiClient();
|
|
34
|
+
const result = await toResultAsync(client.milestones.deleteMilestone(args.code, args.id));
|
|
35
|
+
return result.match(() => ({ success: true, id: args.id }), (e) => {
|
|
36
|
+
throw createToolError(e, 'milestone operation');
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
toolRegistry.register({
|
|
40
|
+
name: 'qase_milestone_upsert',
|
|
41
|
+
description: 'Create or update a milestone. If `id` is provided, updates the existing milestone; ' +
|
|
42
|
+
'if omitted, creates a new one.',
|
|
43
|
+
schema: UpsertSchema,
|
|
44
|
+
handler: upsert,
|
|
45
|
+
annotations: CreateAnnotation,
|
|
46
|
+
visibility: 'discoverable',
|
|
47
|
+
});
|
|
48
|
+
toolRegistry.register({
|
|
49
|
+
name: 'qase_milestone_delete',
|
|
50
|
+
description: 'Delete a milestone by project code and milestone ID.',
|
|
51
|
+
schema: DeleteSchema,
|
|
52
|
+
handler: del,
|
|
53
|
+
annotations: DeleteAnnotation,
|
|
54
|
+
visibility: 'discoverable',
|
|
55
|
+
});
|
|
56
|
+
//# sourceMappingURL=milestones.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"milestones.js","sourceRoot":"","sources":["../../../src/operations-v2/write/milestones.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,iBAAiB;IACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;IAC5F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE;IAClD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;CACvE,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,iBAAiB;IACvB,EAAE,EAAE,QAAQ;CACb,CAAC,CAAC;AAEH,KAAK,UAAU,MAAM,CAAC,IAAkC;IACtD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAEnC,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,IAAW,CAAC,CAAC,CAAC;QAC7F,OAAO,MAAM,CAAC,KAAK,CACjB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAC7B,CAAC,CAAC,EAAE,EAAE;YACJ,MAAM,eAAe,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;QAClD,CAAC,CACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,IAAW,CAAC,CAAC,CAAC;IACzF,OAAO,MAAM,CAAC,KAAK,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EACpB,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,eAAe,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAClD,CAAC,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,IAAkC;IACnD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1F,OAAO,MAAM,CAAC,KAAK,CACjB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EACtC,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,eAAe,CAAC,CAAC,EAAE,qBAAqB,CAAC,CAAC;IAClD,CAAC,CACF,CAAC;AACJ,CAAC;AAED,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EACT,qFAAqF;QACrF,gCAAgC;IAClC,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,cAAc;CAC3B,CAAC,CAAC;AAEH,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,uBAAuB;IAC7B,WAAW,EAAE,sDAAsD;IACnE,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,cAAc;CAC3B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.d.ts","sourceRoot":"","sources":["../../../src/operations-v2/write/plans.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getApiClient } from '../../client/index.js';
|
|
3
|
+
import { toolRegistry, CreateAnnotation, DeleteAnnotation } from '../../utils/registry.js';
|
|
4
|
+
import { toResultAsync, createToolError } from '../../utils/errors.js';
|
|
5
|
+
import { ProjectCodeSchema, IdSchema } from '../../utils/validation.js';
|
|
6
|
+
const UpsertSchema = z.object({
|
|
7
|
+
code: ProjectCodeSchema,
|
|
8
|
+
id: IdSchema.optional().describe('Plan ID — if provided, updates; if omitted, creates'),
|
|
9
|
+
title: z.string().min(1).max(255).describe('Test plan title'),
|
|
10
|
+
description: z.string().optional(),
|
|
11
|
+
cases: z.array(z.number().int().positive()).optional().describe('Case IDs to include'),
|
|
12
|
+
});
|
|
13
|
+
const DeleteSchema = z.object({
|
|
14
|
+
code: ProjectCodeSchema,
|
|
15
|
+
id: IdSchema,
|
|
16
|
+
});
|
|
17
|
+
async function upsert(args) {
|
|
18
|
+
const client = getApiClient();
|
|
19
|
+
const { code, id, ...data } = args;
|
|
20
|
+
if (id) {
|
|
21
|
+
const result = await toResultAsync(client.plans.updatePlan(code, id, data));
|
|
22
|
+
return result.match(() => ({ success: true, id }), (e) => {
|
|
23
|
+
throw createToolError(e, 'plan operation');
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const result = await toResultAsync(client.plans.createPlan(code, data));
|
|
27
|
+
return result.match((r) => r.data.result, (e) => {
|
|
28
|
+
throw createToolError(e, 'plan operation');
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
async function del(args) {
|
|
32
|
+
const client = getApiClient();
|
|
33
|
+
const result = await toResultAsync(client.plans.deletePlan(args.code, args.id));
|
|
34
|
+
return result.match(() => ({ success: true, id: args.id }), (e) => {
|
|
35
|
+
throw createToolError(e, 'plan operation');
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
toolRegistry.register({
|
|
39
|
+
name: 'qase_plan_upsert',
|
|
40
|
+
description: 'Create or update a test plan. If `id` is provided, updates the existing plan; ' +
|
|
41
|
+
'if omitted, creates a new one.',
|
|
42
|
+
schema: UpsertSchema,
|
|
43
|
+
handler: upsert,
|
|
44
|
+
annotations: CreateAnnotation,
|
|
45
|
+
visibility: 'discoverable',
|
|
46
|
+
});
|
|
47
|
+
toolRegistry.register({
|
|
48
|
+
name: 'qase_plan_delete',
|
|
49
|
+
description: 'Delete a test plan by project code and plan ID.',
|
|
50
|
+
schema: DeleteSchema,
|
|
51
|
+
handler: del,
|
|
52
|
+
annotations: DeleteAnnotation,
|
|
53
|
+
visibility: 'discoverable',
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=plans.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plans.js","sourceRoot":"","sources":["../../../src/operations-v2/write/plans.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAExE,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,iBAAiB;IACvB,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;IACvF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAC7D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;CACvF,CAAC,CAAC;AAEH,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,IAAI,EAAE,iBAAiB;IACvB,EAAE,EAAE,QAAQ;CACb,CAAC,CAAC;AAEH,KAAK,UAAU,MAAM,CAAC,IAAkC;IACtD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC;IAEnC,IAAI,EAAE,EAAE,CAAC;QACP,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,EAAE,IAAW,CAAC,CAAC,CAAC;QACnF,OAAO,MAAM,CAAC,KAAK,CACjB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAC7B,CAAC,CAAC,EAAE,EAAE;YACJ,MAAM,eAAe,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;QAC7C,CAAC,CACF,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,IAAW,CAAC,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,KAAK,CACjB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,EACpB,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,eAAe,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,GAAG,CAAC,IAAkC;IACnD,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAChF,OAAO,MAAM,CAAC,KAAK,CACjB,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,EACtC,CAAC,CAAC,EAAE,EAAE;QACJ,MAAM,eAAe,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAC;IAC7C,CAAC,CACF,CAAC;AACJ,CAAC;AAED,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,gFAAgF;QAChF,gCAAgC;IAClC,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,MAAM;IACf,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,cAAc;CAC3B,CAAC,CAAC;AAEH,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,iDAAiD;IAC9D,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,GAAG;IACZ,WAAW,EAAE,gBAAgB;IAC7B,UAAU,EAAE,cAAc;CAC3B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.d.ts","sourceRoot":"","sources":["../../../src/operations-v2/write/results.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getApiClient } from '../../client/index.js';
|
|
3
|
+
import { toolRegistry, CreateAnnotation, DeleteAnnotation } from '../../utils/registry.js';
|
|
4
|
+
import { toResultAsync, createToolError } from '../../utils/errors.js';
|
|
5
|
+
import { ProjectCodeSchema, IdSchema } from '../../utils/validation.js';
|
|
6
|
+
const ResultStepSchema = z.object({
|
|
7
|
+
position: z.number().int().min(0),
|
|
8
|
+
status: z.enum(['passed', 'failed', 'blocked', 'skipped']),
|
|
9
|
+
comment: z.string().optional(),
|
|
10
|
+
attachments: z.array(z.string()).optional(),
|
|
11
|
+
});
|
|
12
|
+
const SingleResultSchema = z.object({
|
|
13
|
+
case_id: z.number().int().positive().optional(),
|
|
14
|
+
status: z.enum(['passed', 'failed', 'blocked', 'skipped', 'invalid']),
|
|
15
|
+
comment: z.string().optional(),
|
|
16
|
+
stacktrace: z.string().optional(),
|
|
17
|
+
time_ms: z.number().int().min(0).optional(),
|
|
18
|
+
defect: z.boolean().optional(),
|
|
19
|
+
steps: z.array(ResultStepSchema).optional(),
|
|
20
|
+
attachments: z.array(z.string()).optional(),
|
|
21
|
+
custom_field: z.record(z.any()).optional(),
|
|
22
|
+
});
|
|
23
|
+
const RecordSchema = z.object({
|
|
24
|
+
code: ProjectCodeSchema,
|
|
25
|
+
run_id: IdSchema.describe('Run ID to record results into'),
|
|
26
|
+
results: z.array(SingleResultSchema).min(1).describe('One or more results to record'),
|
|
27
|
+
});
|
|
28
|
+
const DeleteSchema = z.object({
|
|
29
|
+
code: ProjectCodeSchema,
|
|
30
|
+
run_id: IdSchema,
|
|
31
|
+
hash: z.string().min(1).describe('Result hash to delete'),
|
|
32
|
+
});
|
|
33
|
+
async function record(args) {
|
|
34
|
+
const client = getApiClient();
|
|
35
|
+
const { code, run_id, results } = args;
|
|
36
|
+
if (results.length === 1) {
|
|
37
|
+
const single = results[0];
|
|
38
|
+
const res = await toResultAsync(client.results.createResult(code, run_id, single));
|
|
39
|
+
return res.match((r) => r.data.result, (e) => {
|
|
40
|
+
throw createToolError(e, 'result operation');
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
const res = await toResultAsync(client.results.createResultBulk(code, run_id, { results: results }));
|
|
44
|
+
return res.match(() => ({ success: true, count: results.length }), (e) => {
|
|
45
|
+
throw createToolError(e, 'result operation');
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
async function del(args) {
|
|
49
|
+
const client = getApiClient();
|
|
50
|
+
const result = await toResultAsync(client.results.deleteResult(args.code, args.run_id, args.hash));
|
|
51
|
+
return result.match(() => ({ success: true, hash: args.hash }), (e) => {
|
|
52
|
+
throw createToolError(e, 'result operation');
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
toolRegistry.register({
|
|
56
|
+
name: 'qase_result_record',
|
|
57
|
+
description: 'Record one or more test results into a run. Accepts an array of results — ' +
|
|
58
|
+
'a single entry uses the single-result API, multiple entries use bulk. ' +
|
|
59
|
+
'Each result must include a status; case_id is recommended.',
|
|
60
|
+
schema: RecordSchema,
|
|
61
|
+
handler: record,
|
|
62
|
+
annotations: CreateAnnotation,
|
|
63
|
+
});
|
|
64
|
+
toolRegistry.register({
|
|
65
|
+
name: 'qase_result_delete',
|
|
66
|
+
description: 'Delete a test result by run ID and result hash.',
|
|
67
|
+
schema: DeleteSchema,
|
|
68
|
+
handler: del,
|
|
69
|
+
annotations: DeleteAnnotation,
|
|
70
|
+
visibility: 'discoverable',
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=results.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"results.js","sourceRoot":"","sources":["../../../src/operations-v2/write/results.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../../src/operations-v2/write/runs.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { getApiClient } from '../../client/index.js';
|
|
3
|
+
import { toolRegistry, CreateAnnotation, UpdateAnnotation, DeleteAnnotation, } from '../../utils/registry.js';
|
|
4
|
+
import { toResultAsync, createToolError } from '../../utils/errors.js';
|
|
5
|
+
import { ProjectCodeSchema, IdSchema } from '../../utils/validation.js';
|
|
6
|
+
const RunFieldsSchema = z.object({
|
|
7
|
+
title: z.string().min(1).max(255).describe('Run title'),
|
|
8
|
+
description: z.string().optional(),
|
|
9
|
+
environment_id: z.number().int().positive().optional(),
|
|
10
|
+
milestone_id: z.number().int().positive().optional(),
|
|
11
|
+
plan_id: z.number().int().positive().optional().describe('Test plan to base run on'),
|
|
12
|
+
cases: z.array(z.number().int().positive()).optional().describe('Case IDs to include'),
|
|
13
|
+
tags: z.array(z.string()).optional(),
|
|
14
|
+
is_autotest: z.boolean().optional(),
|
|
15
|
+
start_time: z.string().optional().describe('RFC3339 start time'),
|
|
16
|
+
end_time: z.string().optional().describe('RFC3339 end time'),
|
|
17
|
+
custom_field: z.record(z.any()).optional(),
|
|
18
|
+
});
|
|
19
|
+
const UpsertSchema = z.object({
|
|
20
|
+
code: ProjectCodeSchema,
|
|
21
|
+
id: IdSchema.optional().describe('Run ID — if provided, this is an update (note: Qase API has limited run update support)'),
|
|
22
|
+
...RunFieldsSchema.shape,
|
|
23
|
+
});
|
|
24
|
+
const CompleteSchema = z.object({
|
|
25
|
+
code: ProjectCodeSchema,
|
|
26
|
+
id: IdSchema,
|
|
27
|
+
});
|
|
28
|
+
const DeleteSchema = z.object({
|
|
29
|
+
code: ProjectCodeSchema,
|
|
30
|
+
id: IdSchema,
|
|
31
|
+
});
|
|
32
|
+
async function upsert(args) {
|
|
33
|
+
const client = getApiClient();
|
|
34
|
+
const { code, id, ...data } = args;
|
|
35
|
+
if (id) {
|
|
36
|
+
const result = await toResultAsync(client.runs.updateRun(code, id, data));
|
|
37
|
+
return result.match(() => ({ success: true, id }), (e) => {
|
|
38
|
+
throw createToolError(e, 'run operation');
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const result = await toResultAsync(client.runs.createRun(code, data));
|
|
42
|
+
return result.match((r) => r.data.result, (e) => {
|
|
43
|
+
throw createToolError(e, 'run operation');
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
async function complete(args) {
|
|
47
|
+
const client = getApiClient();
|
|
48
|
+
const { code, id } = args;
|
|
49
|
+
const result = await toResultAsync(client.runs.completeRun(code, id));
|
|
50
|
+
return result.match(() => ({ success: true, id, status: 'complete' }), (e) => {
|
|
51
|
+
throw createToolError(e, 'run operation');
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
async function del(args) {
|
|
55
|
+
const client = getApiClient();
|
|
56
|
+
const result = await toResultAsync(client.runs.deleteRun(args.code, args.id));
|
|
57
|
+
return result.match(() => ({ success: true, id: args.id }), (e) => {
|
|
58
|
+
throw createToolError(e, 'run operation');
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
toolRegistry.register({
|
|
62
|
+
name: 'qase_run_upsert',
|
|
63
|
+
description: 'Create or update a test run. If `id` is provided, updates; if omitted, creates.',
|
|
64
|
+
schema: UpsertSchema,
|
|
65
|
+
handler: upsert,
|
|
66
|
+
annotations: CreateAnnotation,
|
|
67
|
+
});
|
|
68
|
+
toolRegistry.register({
|
|
69
|
+
name: 'qase_run_complete',
|
|
70
|
+
description: 'Mark a test run as complete.',
|
|
71
|
+
schema: CompleteSchema,
|
|
72
|
+
handler: complete,
|
|
73
|
+
annotations: UpdateAnnotation,
|
|
74
|
+
visibility: 'discoverable',
|
|
75
|
+
});
|
|
76
|
+
toolRegistry.register({
|
|
77
|
+
name: 'qase_run_delete',
|
|
78
|
+
description: 'Delete a test run.',
|
|
79
|
+
schema: DeleteSchema,
|
|
80
|
+
handler: del,
|
|
81
|
+
annotations: DeleteAnnotation,
|
|
82
|
+
visibility: 'discoverable',
|
|
83
|
+
});
|
|
84
|
+
//# sourceMappingURL=runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../src/operations-v2/write/runs.ts"],"names":[],"mappings":"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"}
|