@opentabs-dev/opentabs-plugin-meticulous 0.0.76
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/README.md +159 -0
- package/dist/adapter.iife.js +15945 -0
- package/dist/adapter.iife.js.map +7 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +80 -0
- package/dist/index.js.map +1 -0
- package/dist/meticulous-api.d.ts +34 -0
- package/dist/meticulous-api.d.ts.map +1 -0
- package/dist/meticulous-api.js +477 -0
- package/dist/meticulous-api.js.map +1 -0
- package/dist/tools/accept-all-diffs.d.ts +8 -0
- package/dist/tools/accept-all-diffs.d.ts.map +1 -0
- package/dist/tools/accept-all-diffs.js +23 -0
- package/dist/tools/accept-all-diffs.js.map +1 -0
- package/dist/tools/check-for-flakes.d.ts +8 -0
- package/dist/tools/check-for-flakes.d.ts.map +1 -0
- package/dist/tools/check-for-flakes.js +26 -0
- package/dist/tools/check-for-flakes.js.map +1 -0
- package/dist/tools/compare-replays.d.ts +68 -0
- package/dist/tools/compare-replays.d.ts.map +1 -0
- package/dist/tools/compare-replays.js +53 -0
- package/dist/tools/compare-replays.js.map +1 -0
- package/dist/tools/create-label-action.d.ts +16 -0
- package/dist/tools/create-label-action.d.ts.map +1 -0
- package/dist/tools/create-label-action.js +29 -0
- package/dist/tools/create-label-action.js.map +1 -0
- package/dist/tools/get-current-user.d.ts +12 -0
- package/dist/tools/get-current-user.d.ts.map +1 -0
- package/dist/tools/get-current-user.js +22 -0
- package/dist/tools/get-current-user.js.map +1 -0
- package/dist/tools/get-project-pull-request.d.ts +14 -0
- package/dist/tools/get-project-pull-request.d.ts.map +1 -0
- package/dist/tools/get-project-pull-request.js +23 -0
- package/dist/tools/get-project-pull-request.js.map +1 -0
- package/dist/tools/get-project.d.ts +20 -0
- package/dist/tools/get-project.d.ts.map +1 -0
- package/dist/tools/get-project.js +25 -0
- package/dist/tools/get-project.js.map +1 -0
- package/dist/tools/get-replay-screenshots.d.ts +16 -0
- package/dist/tools/get-replay-screenshots.d.ts.map +1 -0
- package/dist/tools/get-replay-screenshots.js +27 -0
- package/dist/tools/get-replay-screenshots.js.map +1 -0
- package/dist/tools/get-replay.d.ts +17 -0
- package/dist/tools/get-replay.d.ts.map +1 -0
- package/dist/tools/get-replay.js +21 -0
- package/dist/tools/get-replay.js.map +1 -0
- package/dist/tools/get-session-events.d.ts +14 -0
- package/dist/tools/get-session-events.d.ts.map +1 -0
- package/dist/tools/get-session-events.js +27 -0
- package/dist/tools/get-session-events.js.map +1 -0
- package/dist/tools/get-session.d.ts +19 -0
- package/dist/tools/get-session.d.ts.map +1 -0
- package/dist/tools/get-session.js +21 -0
- package/dist/tools/get-session.js.map +1 -0
- package/dist/tools/get-test-run-coverage.d.ts +83 -0
- package/dist/tools/get-test-run-coverage.d.ts.map +1 -0
- package/dist/tools/get-test-run-coverage.js +64 -0
- package/dist/tools/get-test-run-coverage.js.map +1 -0
- package/dist/tools/get-test-run-diffs.d.ts +56 -0
- package/dist/tools/get-test-run-diffs.d.ts.map +1 -0
- package/dist/tools/get-test-run-diffs.js +53 -0
- package/dist/tools/get-test-run-diffs.js.map +1 -0
- package/dist/tools/get-test-run-pr-description.d.ts +8 -0
- package/dist/tools/get-test-run-pr-description.d.ts.map +1 -0
- package/dist/tools/get-test-run-pr-description.js +26 -0
- package/dist/tools/get-test-run-pr-description.js.map +1 -0
- package/dist/tools/get-test-run-screenshots.d.ts +70 -0
- package/dist/tools/get-test-run-screenshots.d.ts.map +1 -0
- package/dist/tools/get-test-run-screenshots.js +61 -0
- package/dist/tools/get-test-run-screenshots.js.map +1 -0
- package/dist/tools/get-test-run-source-code.d.ts +9 -0
- package/dist/tools/get-test-run-source-code.d.ts.map +1 -0
- package/dist/tools/get-test-run-source-code.js +24 -0
- package/dist/tools/get-test-run-source-code.js.map +1 -0
- package/dist/tools/get-test-run-test-cases.d.ts +25 -0
- package/dist/tools/get-test-run-test-cases.d.ts.map +1 -0
- package/dist/tools/get-test-run-test-cases.js +60 -0
- package/dist/tools/get-test-run-test-cases.js.map +1 -0
- package/dist/tools/get-test-run.d.ts +29 -0
- package/dist/tools/get-test-run.d.ts.map +1 -0
- package/dist/tools/get-test-run.js +30 -0
- package/dist/tools/get-test-run.js.map +1 -0
- package/dist/tools/list-github-repositories.d.ts +11 -0
- package/dist/tools/list-github-repositories.d.ts.map +1 -0
- package/dist/tools/list-github-repositories.js +19 -0
- package/dist/tools/list-github-repositories.js.map +1 -0
- package/dist/tools/list-organization-members.d.ts +18 -0
- package/dist/tools/list-organization-members.d.ts.map +1 -0
- package/dist/tools/list-organization-members.js +21 -0
- package/dist/tools/list-organization-members.js.map +1 -0
- package/dist/tools/list-organizations.d.ts +9 -0
- package/dist/tools/list-organizations.d.ts.map +1 -0
- package/dist/tools/list-organizations.js +19 -0
- package/dist/tools/list-organizations.js.map +1 -0
- package/dist/tools/list-projects.d.ts +14 -0
- package/dist/tools/list-projects.d.ts.map +1 -0
- package/dist/tools/list-projects.js +19 -0
- package/dist/tools/list-projects.js.map +1 -0
- package/dist/tools/list-replays.d.ts +18 -0
- package/dist/tools/list-replays.d.ts.map +1 -0
- package/dist/tools/list-replays.js +25 -0
- package/dist/tools/list-replays.js.map +1 -0
- package/dist/tools/list-sessions.d.ts +20 -0
- package/dist/tools/list-sessions.d.ts.map +1 -0
- package/dist/tools/list-sessions.js +22 -0
- package/dist/tools/list-sessions.js.map +1 -0
- package/dist/tools/schemas.d.ts +560 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +303 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/tools/search-sessions.d.ts +24 -0
- package/dist/tools/search-sessions.d.ts.map +1 -0
- package/dist/tools/search-sessions.js +33 -0
- package/dist/tools/search-sessions.js.map +1 -0
- package/dist/tools/upsert-diff-approval.d.ts +12 -0
- package/dist/tools/upsert-diff-approval.d.ts.map +1 -0
- package/dist/tools/upsert-diff-approval.js +36 -0
- package/dist/tools/upsert-diff-approval.js.map +1 -0
- package/dist/tools.json +4020 -0
- package/package.json +58 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getTestRunCoverage: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
test_run_id: z.ZodString;
|
|
4
|
+
pr_mode: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
5
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
6
|
+
category: z.ZodDefault<z.ZodOptional<z.ZodEnum<{
|
|
7
|
+
with_diffs: "with_diffs";
|
|
8
|
+
without_diffs: "without_diffs";
|
|
9
|
+
not_compared: "not_compared";
|
|
10
|
+
all: "all";
|
|
11
|
+
}>>>;
|
|
12
|
+
route_filter: z.ZodOptional<z.ZodString>;
|
|
13
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
14
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
15
|
+
test_run: z.ZodObject<{
|
|
16
|
+
id: z.ZodString;
|
|
17
|
+
status: z.ZodString;
|
|
18
|
+
commit_sha: z.ZodNullable<z.ZodString>;
|
|
19
|
+
created_at: z.ZodString;
|
|
20
|
+
updated_at: z.ZodString;
|
|
21
|
+
project_name: z.ZodString;
|
|
22
|
+
organization_name: z.ZodString;
|
|
23
|
+
stats: z.ZodNullable<z.ZodObject<{
|
|
24
|
+
total_screenshots: z.ZodNumber;
|
|
25
|
+
total_sessions: z.ZodNumber;
|
|
26
|
+
total_sessions_replayed: z.ZodNullable<z.ZodNumber>;
|
|
27
|
+
sessions_skipped: z.ZodNullable<z.ZodNumber>;
|
|
28
|
+
screenshots_skipped: z.ZodNullable<z.ZodNumber>;
|
|
29
|
+
}, z.core.$strip>>;
|
|
30
|
+
ci_provider: z.ZodNullable<z.ZodString>;
|
|
31
|
+
pr_title: z.ZodNullable<z.ZodString>;
|
|
32
|
+
pr_number: z.ZodNullable<z.ZodNumber>;
|
|
33
|
+
pr_url: z.ZodNullable<z.ZodString>;
|
|
34
|
+
approval_state: z.ZodNullable<z.ZodString>;
|
|
35
|
+
describe_tested: z.ZodNullable<z.ZodString>;
|
|
36
|
+
}, z.core.$strip>;
|
|
37
|
+
coverage: z.ZodObject<{
|
|
38
|
+
with_diffs: z.ZodArray<z.ZodObject<{
|
|
39
|
+
route_group: z.ZodNullable<z.ZodString>;
|
|
40
|
+
route_url: z.ZodNullable<z.ZodString>;
|
|
41
|
+
screenshots: z.ZodArray<z.ZodObject<{
|
|
42
|
+
filename: z.ZodString;
|
|
43
|
+
public_url: z.ZodString;
|
|
44
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
45
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
46
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
47
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
48
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
49
|
+
}, z.core.$strip>>;
|
|
50
|
+
}, z.core.$strip>>;
|
|
51
|
+
without_diffs: z.ZodArray<z.ZodObject<{
|
|
52
|
+
route_group: z.ZodNullable<z.ZodString>;
|
|
53
|
+
route_url: z.ZodNullable<z.ZodString>;
|
|
54
|
+
screenshots: z.ZodArray<z.ZodObject<{
|
|
55
|
+
filename: z.ZodString;
|
|
56
|
+
public_url: z.ZodString;
|
|
57
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
58
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
59
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
60
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
61
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
62
|
+
}, z.core.$strip>>;
|
|
63
|
+
}, z.core.$strip>>;
|
|
64
|
+
not_compared: z.ZodArray<z.ZodObject<{
|
|
65
|
+
route_group: z.ZodNullable<z.ZodString>;
|
|
66
|
+
route_url: z.ZodNullable<z.ZodString>;
|
|
67
|
+
screenshots: z.ZodArray<z.ZodObject<{
|
|
68
|
+
filename: z.ZodString;
|
|
69
|
+
public_url: z.ZodString;
|
|
70
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
71
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
72
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
73
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
74
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
75
|
+
}, z.core.$strip>>;
|
|
76
|
+
}, z.core.$strip>>;
|
|
77
|
+
num_unmapped_files: z.ZodNumber;
|
|
78
|
+
total_with_diffs: z.ZodNumber;
|
|
79
|
+
total_without_diffs: z.ZodNumber;
|
|
80
|
+
total_not_compared: z.ZodNumber;
|
|
81
|
+
}, z.core.$strip>;
|
|
82
|
+
}, z.core.$strip>>;
|
|
83
|
+
//# sourceMappingURL=get-test-run-coverage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-coverage.d.ts","sourceRoot":"","sources":["../../src/tools/get-test-run-coverage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA0E7B,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { coverageSchema, testRunSchema, mapCoverage, mapTestRun } from './schemas.js';
|
|
5
|
+
export const getTestRunCoverage = defineTool({
|
|
6
|
+
name: 'get_test_run_coverage',
|
|
7
|
+
displayName: 'Get Test Run Coverage',
|
|
8
|
+
description: 'Get screenshot coverage data for a test run. Shows which routes have diffs, which were compared without diffs, and which were not compared. Use category filter to limit output size (defaults to with_diffs only). Use route_filter to search for specific routes.',
|
|
9
|
+
summary: 'Get test run coverage',
|
|
10
|
+
icon: 'shield-check',
|
|
11
|
+
group: 'Test Runs',
|
|
12
|
+
input: z.object({
|
|
13
|
+
test_run_id: z.string().describe('Test run ID'),
|
|
14
|
+
pr_mode: z.boolean().optional().default(true).describe('Whether to use PR mode for coverage calculation'),
|
|
15
|
+
replay_id: z.string().optional().describe('Optional replay ID to scope coverage to'),
|
|
16
|
+
category: z
|
|
17
|
+
.enum(['with_diffs', 'without_diffs', 'not_compared', 'all'])
|
|
18
|
+
.optional()
|
|
19
|
+
.default('with_diffs')
|
|
20
|
+
.describe('Coverage category to return (defaults to with_diffs to limit response size)'),
|
|
21
|
+
route_filter: z.string().optional().describe('Filter routes by substring match on route URL or group'),
|
|
22
|
+
limit: z.number().optional().default(50).describe('Max routes to return per category'),
|
|
23
|
+
}),
|
|
24
|
+
output: z.object({
|
|
25
|
+
test_run: testRunSchema,
|
|
26
|
+
coverage: z.object({
|
|
27
|
+
with_diffs: z.array(coverageSchema).describe('Routes with screenshot diffs'),
|
|
28
|
+
without_diffs: z.array(coverageSchema).describe('Routes compared but without diffs'),
|
|
29
|
+
not_compared: z.array(coverageSchema).describe('Routes not compared'),
|
|
30
|
+
num_unmapped_files: z.number().describe('Number of unmapped source files'),
|
|
31
|
+
total_with_diffs: z.number().describe('Total routes with diffs (before filtering)'),
|
|
32
|
+
total_without_diffs: z.number().describe('Total routes without diffs (before filtering)'),
|
|
33
|
+
total_not_compared: z.number().describe('Total routes not compared (before filtering)'),
|
|
34
|
+
}),
|
|
35
|
+
}),
|
|
36
|
+
handle: async ({ test_run_id, pr_mode, replay_id, category, route_filter, limit }) => {
|
|
37
|
+
const data = await graphql(queries.GET_TEST_RUN_COVERAGE, { testRunId: test_run_id, prMode: pr_mode, replayId: replay_id });
|
|
38
|
+
const cov = data.testRun.coverage;
|
|
39
|
+
const filterRoutes = (routes) => {
|
|
40
|
+
let mapped = routes.map(mapCoverage);
|
|
41
|
+
if (route_filter) {
|
|
42
|
+
const f = route_filter.toLowerCase();
|
|
43
|
+
mapped = mapped.filter(r => (r.route_url?.toLowerCase().includes(f) ?? false) || (r.route_group?.toLowerCase().includes(f) ?? false));
|
|
44
|
+
}
|
|
45
|
+
return mapped.slice(0, limit);
|
|
46
|
+
};
|
|
47
|
+
const allWithDiffs = cov.screenshotsComparedWithDiffs ?? [];
|
|
48
|
+
const allWithoutDiffs = cov.screenshotsComparedButWithoutDiffs ?? [];
|
|
49
|
+
const allNotCompared = cov.screenshotsNotCompared ?? [];
|
|
50
|
+
return {
|
|
51
|
+
test_run: mapTestRun(data.testRun),
|
|
52
|
+
coverage: {
|
|
53
|
+
with_diffs: category === 'all' || category === 'with_diffs' ? filterRoutes(allWithDiffs) : [],
|
|
54
|
+
without_diffs: category === 'all' || category === 'without_diffs' ? filterRoutes(allWithoutDiffs) : [],
|
|
55
|
+
not_compared: category === 'all' || category === 'not_compared' ? filterRoutes(allNotCompared) : [],
|
|
56
|
+
num_unmapped_files: cov.numUnmappedFiles ?? 0,
|
|
57
|
+
total_with_diffs: allWithDiffs.length,
|
|
58
|
+
total_without_diffs: allWithoutDiffs.length,
|
|
59
|
+
total_not_compared: allNotCompared.length,
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=get-test-run-coverage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-coverage.js","sourceRoot":"","sources":["../../src/tools/get-test-run-coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getTestRunDiffs: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
test_run_id: z.ZodString;
|
|
4
|
+
only_with_screenshot_diffs: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
5
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
6
|
+
offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
7
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
8
|
+
total_fetched: z.ZodNumber;
|
|
9
|
+
diffs: z.ZodArray<z.ZodObject<{
|
|
10
|
+
replay_diff_id: z.ZodString;
|
|
11
|
+
head_replay: z.ZodObject<{
|
|
12
|
+
id: z.ZodString;
|
|
13
|
+
status: z.ZodNullable<z.ZodString>;
|
|
14
|
+
is_accurate: z.ZodNullable<z.ZodBoolean>;
|
|
15
|
+
app_url: z.ZodNullable<z.ZodString>;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
base_replay: z.ZodObject<{
|
|
18
|
+
id: z.ZodString;
|
|
19
|
+
status: z.ZodNullable<z.ZodString>;
|
|
20
|
+
is_accurate: z.ZodNullable<z.ZodBoolean>;
|
|
21
|
+
app_url: z.ZodNullable<z.ZodString>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
has_screenshot_diffs: z.ZodBoolean;
|
|
24
|
+
screenshot_diff_count: z.ZodNumber;
|
|
25
|
+
screenshot_diffs: z.ZodArray<z.ZodObject<{
|
|
26
|
+
outcome: z.ZodString;
|
|
27
|
+
user_visible_outcome: z.ZodString;
|
|
28
|
+
group_id: z.ZodNullable<z.ZodString>;
|
|
29
|
+
width: z.ZodNullable<z.ZodNumber>;
|
|
30
|
+
mismatch_pixels: z.ZodNullable<z.ZodNumber>;
|
|
31
|
+
diff_hash: z.ZodNullable<z.ZodString>;
|
|
32
|
+
base_screenshot: z.ZodNullable<z.ZodObject<{
|
|
33
|
+
filename: z.ZodString;
|
|
34
|
+
public_url: z.ZodString;
|
|
35
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
36
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
37
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
38
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
39
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
40
|
+
}, z.core.$strip>>;
|
|
41
|
+
head_screenshot: z.ZodNullable<z.ZodObject<{
|
|
42
|
+
filename: z.ZodString;
|
|
43
|
+
public_url: z.ZodString;
|
|
44
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
45
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
46
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
47
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
48
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
49
|
+
}, z.core.$strip>>;
|
|
50
|
+
diff_url_thumb: z.ZodNullable<z.ZodString>;
|
|
51
|
+
diff_url_full: z.ZodNullable<z.ZodString>;
|
|
52
|
+
changed_class_names: z.ZodArray<z.ZodString>;
|
|
53
|
+
}, z.core.$strip>>;
|
|
54
|
+
}, z.core.$strip>>;
|
|
55
|
+
}, z.core.$strip>>;
|
|
56
|
+
//# sourceMappingURL=get-test-run-diffs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-diffs.d.ts","sourceRoot":"","sources":["../../src/tools/get-test-run-diffs.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA8D1B,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { diffResultSchema, replayInfoSchema, mapDiffResult, mapReplayInfo } from './schemas.js';
|
|
5
|
+
export const getTestRunDiffs = defineTool({
|
|
6
|
+
name: 'get_test_run_diffs',
|
|
7
|
+
displayName: 'Get Test Run Diffs',
|
|
8
|
+
description: 'Get replay diffs for a test run. Each diff compares a head replay against a base replay. Set only_with_screenshot_diffs=true to skip diffs that have no visual differences (many diffs are structural-only with empty screenshot_diffs). Use compare_replays with the base_replay.id to see full comparison details including screenshots.',
|
|
9
|
+
summary: 'Get replay diffs for a test run',
|
|
10
|
+
icon: 'diff',
|
|
11
|
+
group: 'Test Runs',
|
|
12
|
+
input: z.object({
|
|
13
|
+
test_run_id: z.string().describe('Test run ID'),
|
|
14
|
+
only_with_screenshot_diffs: z
|
|
15
|
+
.boolean()
|
|
16
|
+
.optional()
|
|
17
|
+
.default(false)
|
|
18
|
+
.describe('Only return diffs that have actual visual screenshot differences'),
|
|
19
|
+
limit: z.number().optional().default(100).describe('Max results to return'),
|
|
20
|
+
offset: z.number().optional().default(0).describe('Offset for pagination'),
|
|
21
|
+
}),
|
|
22
|
+
output: z.object({
|
|
23
|
+
total_fetched: z.number().describe('Total diffs fetched from API before filtering'),
|
|
24
|
+
diffs: z.array(z.object({
|
|
25
|
+
replay_diff_id: z.string().describe('Replay diff ID'),
|
|
26
|
+
head_replay: replayInfoSchema.describe('Head (actual) replay'),
|
|
27
|
+
base_replay: replayInfoSchema.describe('Base (expected) replay'),
|
|
28
|
+
has_screenshot_diffs: z.boolean().describe('Whether this diff has visual screenshot differences'),
|
|
29
|
+
screenshot_diff_count: z.number().describe('Number of screenshot diffs'),
|
|
30
|
+
screenshot_diffs: z.array(diffResultSchema),
|
|
31
|
+
})),
|
|
32
|
+
}),
|
|
33
|
+
handle: async ({ test_run_id, only_with_screenshot_diffs, limit, offset }) => {
|
|
34
|
+
const data = await graphql(queries.GET_TEST_RUN_DIFFS, { testRunId: test_run_id, limit, offset });
|
|
35
|
+
const allDiffs = (data.testRun.replayDiffs ?? []).map(rd => {
|
|
36
|
+
const diffs = (rd.screenshotDiffResults ?? []).map(mapDiffResult);
|
|
37
|
+
return {
|
|
38
|
+
replay_diff_id: rd.id,
|
|
39
|
+
head_replay: mapReplayInfo(rd.headReplay ?? {}),
|
|
40
|
+
base_replay: mapReplayInfo(rd.baseReplay ?? {}),
|
|
41
|
+
has_screenshot_diffs: diffs.length > 0,
|
|
42
|
+
screenshot_diff_count: diffs.length,
|
|
43
|
+
screenshot_diffs: diffs,
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
const filtered = only_with_screenshot_diffs ? allDiffs.filter(d => d.has_screenshot_diffs) : allDiffs;
|
|
47
|
+
return {
|
|
48
|
+
total_fetched: allDiffs.length,
|
|
49
|
+
diffs: filtered,
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=get-test-run-diffs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-diffs.js","sourceRoot":"","sources":["../../src/tools/get-test-run-diffs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getTestRunPrDescription: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
test_run_id: z.ZodString;
|
|
4
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
5
|
+
test_run_id: z.ZodString;
|
|
6
|
+
pr_description: z.ZodNullable<z.ZodString>;
|
|
7
|
+
}, z.core.$strip>>;
|
|
8
|
+
//# sourceMappingURL=get-test-run-pr-description.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-pr-description.d.ts","sourceRoot":"","sources":["../../src/tools/get-test-run-pr-description.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,uBAAuB;;;;;kBAwBlC,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
export const getTestRunPrDescription = defineTool({
|
|
5
|
+
name: 'get_test_run_pr_description',
|
|
6
|
+
displayName: 'Get Test Run PR Description',
|
|
7
|
+
description: 'Get the pull request description associated with a test run.',
|
|
8
|
+
summary: 'Get PR description for a test run',
|
|
9
|
+
icon: 'file-text',
|
|
10
|
+
group: 'Test Runs',
|
|
11
|
+
input: z.object({
|
|
12
|
+
test_run_id: z.string().describe('Test run ID'),
|
|
13
|
+
}),
|
|
14
|
+
output: z.object({
|
|
15
|
+
test_run_id: z.string(),
|
|
16
|
+
pr_description: z.string().nullable().describe('Pull request description text'),
|
|
17
|
+
}),
|
|
18
|
+
handle: async ({ test_run_id }) => {
|
|
19
|
+
const data = await graphql(queries.GET_TEST_RUN_PR_DESCRIPTION, { testRunId: test_run_id });
|
|
20
|
+
return {
|
|
21
|
+
test_run_id: data.testRun.id,
|
|
22
|
+
pr_description: data.testRun.pullRequest?.prDescription ?? null,
|
|
23
|
+
};
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=get-test-run-pr-description.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-pr-description.js","sourceRoot":"","sources":["../../src/tools/get-test-run-pr-description.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;IAChD,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,6BAA6B;IAC1C,WAAW,EAAE,8DAA8D;IAC3E,OAAO,EAAE,mCAAmC;IAC5C,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;KAChD,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;KAChF,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;QAChC,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,2BAA2B,EACnC,EAAE,SAAS,EAAE,WAAW,EAAE,CAC3B,CAAC;QACF,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;YAC5B,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,aAAa,IAAI,IAAI;SAChE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getTestRunScreenshots: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
test_run_id: z.ZodString;
|
|
4
|
+
replay_diff_limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
5
|
+
replay_diff_offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
6
|
+
test_case_limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
7
|
+
test_case_offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
8
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
9
|
+
diffs: z.ZodArray<z.ZodObject<{
|
|
10
|
+
replay_diff_id: z.ZodString;
|
|
11
|
+
head_replay: z.ZodObject<{
|
|
12
|
+
id: z.ZodString;
|
|
13
|
+
status: z.ZodNullable<z.ZodString>;
|
|
14
|
+
is_accurate: z.ZodNullable<z.ZodBoolean>;
|
|
15
|
+
app_url: z.ZodNullable<z.ZodString>;
|
|
16
|
+
}, z.core.$strip>;
|
|
17
|
+
base_replay: z.ZodObject<{
|
|
18
|
+
id: z.ZodString;
|
|
19
|
+
status: z.ZodNullable<z.ZodString>;
|
|
20
|
+
is_accurate: z.ZodNullable<z.ZodBoolean>;
|
|
21
|
+
app_url: z.ZodNullable<z.ZodString>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
screenshot_diffs: z.ZodArray<z.ZodObject<{
|
|
24
|
+
outcome: z.ZodString;
|
|
25
|
+
user_visible_outcome: z.ZodString;
|
|
26
|
+
group_id: z.ZodNullable<z.ZodString>;
|
|
27
|
+
width: z.ZodNullable<z.ZodNumber>;
|
|
28
|
+
mismatch_pixels: z.ZodNullable<z.ZodNumber>;
|
|
29
|
+
diff_hash: z.ZodNullable<z.ZodString>;
|
|
30
|
+
base_screenshot: z.ZodNullable<z.ZodObject<{
|
|
31
|
+
filename: z.ZodString;
|
|
32
|
+
public_url: z.ZodString;
|
|
33
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
34
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
35
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
36
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
37
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
38
|
+
}, z.core.$strip>>;
|
|
39
|
+
head_screenshot: z.ZodNullable<z.ZodObject<{
|
|
40
|
+
filename: z.ZodString;
|
|
41
|
+
public_url: z.ZodString;
|
|
42
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
43
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
44
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
45
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
46
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
47
|
+
}, z.core.$strip>>;
|
|
48
|
+
diff_url_thumb: z.ZodNullable<z.ZodString>;
|
|
49
|
+
diff_url_full: z.ZodNullable<z.ZodString>;
|
|
50
|
+
changed_class_names: z.ZodArray<z.ZodString>;
|
|
51
|
+
}, z.core.$strip>>;
|
|
52
|
+
}, z.core.$strip>>;
|
|
53
|
+
test_case_screenshots: z.ZodArray<z.ZodObject<{
|
|
54
|
+
replay_id: z.ZodString;
|
|
55
|
+
replay_status: z.ZodNullable<z.ZodString>;
|
|
56
|
+
replay_accurate: z.ZodNullable<z.ZodBoolean>;
|
|
57
|
+
app_url: z.ZodNullable<z.ZodString>;
|
|
58
|
+
session_id: z.ZodNullable<z.ZodString>;
|
|
59
|
+
screenshots: z.ZodArray<z.ZodObject<{
|
|
60
|
+
filename: z.ZodString;
|
|
61
|
+
public_url: z.ZodString;
|
|
62
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
63
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
64
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
65
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
66
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
67
|
+
}, z.core.$strip>>;
|
|
68
|
+
}, z.core.$strip>>;
|
|
69
|
+
}, z.core.$strip>>;
|
|
70
|
+
//# sourceMappingURL=get-test-run-screenshots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-screenshots.d.ts","sourceRoot":"","sources":["../../src/tools/get-test-run-screenshots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAgFhC,CAAC"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { diffResultSchema, replayInfoSchema, screenshotSchema, mapDiffResult, mapReplayInfo, mapScreenshot, } from './schemas.js';
|
|
5
|
+
export const getTestRunScreenshots = defineTool({
|
|
6
|
+
name: 'get_test_run_screenshots',
|
|
7
|
+
displayName: 'Get Test Run Screenshots',
|
|
8
|
+
description: 'Get screenshot diffs and test case screenshots for a test run. Each diff includes head/base replay info and screenshot comparison URLs (base image, head image, diff image).',
|
|
9
|
+
summary: 'Get test run screenshot diffs',
|
|
10
|
+
icon: 'image',
|
|
11
|
+
group: 'Test Runs',
|
|
12
|
+
input: z.object({
|
|
13
|
+
test_run_id: z.string().describe('Test run ID'),
|
|
14
|
+
replay_diff_limit: z.number().optional().default(50).describe('Max replay diffs to return'),
|
|
15
|
+
replay_diff_offset: z.number().optional().default(0).describe('Offset for replay diffs pagination'),
|
|
16
|
+
test_case_limit: z.number().optional().default(50).describe('Max test case results to return'),
|
|
17
|
+
test_case_offset: z.number().optional().default(0).describe('Offset for test case pagination'),
|
|
18
|
+
}),
|
|
19
|
+
output: z.object({
|
|
20
|
+
diffs: z.array(z.object({
|
|
21
|
+
replay_diff_id: z.string().describe('Replay diff ID'),
|
|
22
|
+
head_replay: replayInfoSchema.describe('Head (actual) replay'),
|
|
23
|
+
base_replay: replayInfoSchema.describe('Base (expected) replay'),
|
|
24
|
+
screenshot_diffs: z.array(diffResultSchema),
|
|
25
|
+
})),
|
|
26
|
+
test_case_screenshots: z.array(z.object({
|
|
27
|
+
replay_id: z.string().describe('Replay ID'),
|
|
28
|
+
replay_status: z.string().nullable().describe('Replay status'),
|
|
29
|
+
replay_accurate: z.boolean().nullable().describe('Whether replay was accurate'),
|
|
30
|
+
app_url: z.string().nullable().describe('Application URL'),
|
|
31
|
+
session_id: z.string().nullable().describe('Source session ID'),
|
|
32
|
+
screenshots: z.array(screenshotSchema),
|
|
33
|
+
})),
|
|
34
|
+
}),
|
|
35
|
+
handle: async ({ test_run_id, replay_diff_limit, replay_diff_offset, test_case_limit, test_case_offset }) => {
|
|
36
|
+
const data = await graphql(queries.GET_TEST_RUN_SCREENSHOTS, {
|
|
37
|
+
testRunId: test_run_id,
|
|
38
|
+
replayDiffLimit: replay_diff_limit,
|
|
39
|
+
replayDiffOffset: replay_diff_offset,
|
|
40
|
+
testCaseResultLimit: test_case_limit,
|
|
41
|
+
testCaseResultOffset: test_case_offset,
|
|
42
|
+
});
|
|
43
|
+
return {
|
|
44
|
+
diffs: (data.testRun.replayDiffs ?? []).map(rd => ({
|
|
45
|
+
replay_diff_id: rd.id,
|
|
46
|
+
head_replay: mapReplayInfo(rd.headReplay ?? {}),
|
|
47
|
+
base_replay: mapReplayInfo(rd.baseReplay ?? {}),
|
|
48
|
+
screenshot_diffs: (rd.screenshotDiffResults ?? []).map(mapDiffResult),
|
|
49
|
+
})),
|
|
50
|
+
test_case_screenshots: (data.testRun.testCaseResults ?? []).map(tc => ({
|
|
51
|
+
replay_id: tc.headReplay?.id ?? '',
|
|
52
|
+
replay_status: tc.headReplay?.status ?? null,
|
|
53
|
+
replay_accurate: tc.headReplay?.isAccurate ?? null,
|
|
54
|
+
app_url: tc.headReplay?.parameters?.appUrl ?? null,
|
|
55
|
+
session_id: tc.session?.id ?? null,
|
|
56
|
+
screenshots: (tc.headReplay?.screenshotsData ?? []).map(mapScreenshot),
|
|
57
|
+
})),
|
|
58
|
+
};
|
|
59
|
+
},
|
|
60
|
+
});
|
|
61
|
+
//# sourceMappingURL=get-test-run-screenshots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-screenshots.js","sourceRoot":"","sources":["../../src/tools/get-test-run-screenshots.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getTestRunSourceCode: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
test_run_id: z.ZodString;
|
|
4
|
+
path: z.ZodString;
|
|
5
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
6
|
+
test_run_id: z.ZodString;
|
|
7
|
+
source_code: z.ZodNullable<z.ZodString>;
|
|
8
|
+
}, z.core.$strip>>;
|
|
9
|
+
//# sourceMappingURL=get-test-run-source-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-source-code.d.ts","sourceRoot":"","sources":["../../src/tools/get-test-run-source-code.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,oBAAoB;;;;;;kBAsB/B,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
export const getTestRunSourceCode = defineTool({
|
|
5
|
+
name: 'get_test_run_source_code',
|
|
6
|
+
displayName: 'Get Test Run Source Code',
|
|
7
|
+
description: 'Get the source code of a file at the commit of a specific test run.',
|
|
8
|
+
summary: 'Get source code for a test run commit',
|
|
9
|
+
icon: 'file-code',
|
|
10
|
+
group: 'Test Runs',
|
|
11
|
+
input: z.object({
|
|
12
|
+
test_run_id: z.string().describe('Test run ID'),
|
|
13
|
+
path: z.string().describe('File path relative to repository root'),
|
|
14
|
+
}),
|
|
15
|
+
output: z.object({
|
|
16
|
+
test_run_id: z.string(),
|
|
17
|
+
source_code: z.string().nullable().describe('File source code content'),
|
|
18
|
+
}),
|
|
19
|
+
handle: async ({ test_run_id, path }) => {
|
|
20
|
+
const data = await graphql(queries.GET_TEST_RUN_SOURCE_CODE, { testRunId: test_run_id, path });
|
|
21
|
+
return { test_run_id: data.testRun.id, source_code: data.testRun.sourceCode };
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
//# sourceMappingURL=get-test-run-source-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-source-code.js","sourceRoot":"","sources":["../../src/tools/get-test-run-source-code.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAExD,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,0BAA0B;IACvC,WAAW,EAAE,qEAAqE;IAClF,OAAO,EAAE,uCAAuC;IAChD,IAAI,EAAE,WAAW;IACjB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;KACnE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE;QACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;KACxE,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE;QACtC,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,wBAAwB,EAChC,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,EAAE,CACjC,CAAC;QACF,OAAO,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;IAChF,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getTestRunTestCases: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
test_run_id: z.ZodString;
|
|
4
|
+
include_passes: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
5
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
6
|
+
offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
|
|
7
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
8
|
+
test_cases: z.ZodArray<z.ZodObject<{
|
|
9
|
+
replay_id: z.ZodString;
|
|
10
|
+
replay_status: z.ZodNullable<z.ZodString>;
|
|
11
|
+
replay_accurate: z.ZodNullable<z.ZodBoolean>;
|
|
12
|
+
app_url: z.ZodNullable<z.ZodString>;
|
|
13
|
+
session_id: z.ZodNullable<z.ZodString>;
|
|
14
|
+
screenshots: z.ZodArray<z.ZodObject<{
|
|
15
|
+
filename: z.ZodString;
|
|
16
|
+
public_url: z.ZodString;
|
|
17
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
18
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
19
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
20
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
21
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
22
|
+
}, z.core.$strip>>;
|
|
23
|
+
}, z.core.$strip>>;
|
|
24
|
+
}, z.core.$strip>>;
|
|
25
|
+
//# sourceMappingURL=get-test-run-test-cases.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-test-cases.d.ts","sourceRoot":"","sources":["../../src/tools/get-test-run-test-cases.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;kBAuE9B,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { screenshotSchema, mapScreenshot } from './schemas.js';
|
|
5
|
+
export const getTestRunTestCases = defineTool({
|
|
6
|
+
name: 'get_test_run_test_cases',
|
|
7
|
+
displayName: 'Get Test Run Test Cases',
|
|
8
|
+
description: 'Get test case results for a test run. Each test case has a head replay with status and accuracy info. A replay with is_accurate=false means the replay diverged from the original session (non-deterministic behavior, flaky). Note: test cases do not have a base replay — they represent individual session replays, not diff comparisons. For visual diffs, use get_test_run_diffs instead.',
|
|
9
|
+
summary: 'Get test case results',
|
|
10
|
+
icon: 'list-checks',
|
|
11
|
+
group: 'Test Runs',
|
|
12
|
+
input: z.object({
|
|
13
|
+
test_run_id: z.string().describe('Test run ID'),
|
|
14
|
+
include_passes: z
|
|
15
|
+
.boolean()
|
|
16
|
+
.optional()
|
|
17
|
+
.default(false)
|
|
18
|
+
.describe('Include passing test cases (defaults to failures only)'),
|
|
19
|
+
limit: z.number().optional().default(100).describe('Max results to return'),
|
|
20
|
+
offset: z.number().optional().default(0).describe('Offset for pagination'),
|
|
21
|
+
}),
|
|
22
|
+
output: z.object({
|
|
23
|
+
test_cases: z.array(z.object({
|
|
24
|
+
replay_id: z.string().describe('Replay ID — use with get_replay for full details'),
|
|
25
|
+
replay_status: z
|
|
26
|
+
.string()
|
|
27
|
+
.nullable()
|
|
28
|
+
.describe('Replay execution status (Success = completed, may still be inaccurate)'),
|
|
29
|
+
replay_accurate: z
|
|
30
|
+
.boolean()
|
|
31
|
+
.nullable()
|
|
32
|
+
.describe('Whether the replay accurately reproduced the session. false = flaky/non-deterministic failure'),
|
|
33
|
+
app_url: z.string().nullable().describe('Application URL used for replay'),
|
|
34
|
+
session_id: z
|
|
35
|
+
.string()
|
|
36
|
+
.nullable()
|
|
37
|
+
.describe('Source session ID — use with get_session_events to see original user interactions'),
|
|
38
|
+
screenshots: z.array(screenshotSchema),
|
|
39
|
+
})),
|
|
40
|
+
}),
|
|
41
|
+
handle: async ({ test_run_id, include_passes, limit, offset }) => {
|
|
42
|
+
const data = await graphql(queries.GET_TEST_RUN_TEST_CASES, {
|
|
43
|
+
testRunId: test_run_id,
|
|
44
|
+
limit,
|
|
45
|
+
offset,
|
|
46
|
+
excludePasses: !include_passes,
|
|
47
|
+
});
|
|
48
|
+
return {
|
|
49
|
+
test_cases: (data.testRun.testCaseResults ?? []).map(tc => ({
|
|
50
|
+
replay_id: tc.headReplay?.id ?? '',
|
|
51
|
+
replay_status: tc.headReplay?.status ?? null,
|
|
52
|
+
replay_accurate: tc.headReplay?.isAccurate ?? null,
|
|
53
|
+
app_url: tc.headReplay?.parameters?.appUrl ?? null,
|
|
54
|
+
session_id: tc.session?.id ?? null,
|
|
55
|
+
screenshots: (tc.headReplay?.screenshotsData ?? []).map(mapScreenshot),
|
|
56
|
+
})),
|
|
57
|
+
};
|
|
58
|
+
},
|
|
59
|
+
});
|
|
60
|
+
//# sourceMappingURL=get-test-run-test-cases.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-test-run-test-cases.js","sourceRoot":"","sources":["../../src/tools/get-test-run-test-cases.ts"],"names":[],"mappings":"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"}
|