@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,26 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, mutations } from '../meticulous-api.js';
|
|
4
|
+
export const checkForFlakes = defineTool({
|
|
5
|
+
name: 'check_for_flakes',
|
|
6
|
+
displayName: 'Check for Flakes',
|
|
7
|
+
description: 'Trigger a flake detection check for a test run. Re-runs failing tests multiple times to determine if failures are flaky (non-deterministic).',
|
|
8
|
+
summary: 'Check for flaky tests',
|
|
9
|
+
icon: 'refresh-cw',
|
|
10
|
+
group: 'Test Runs',
|
|
11
|
+
input: z.object({
|
|
12
|
+
test_run_id: z.string().describe('Test run ID'),
|
|
13
|
+
rerun_count: z.number().optional().default(3).describe('Number of times to re-run tests for flake detection'),
|
|
14
|
+
}),
|
|
15
|
+
output: z.object({
|
|
16
|
+
id: z.string().nullable().describe('ID of the flake check run'),
|
|
17
|
+
}),
|
|
18
|
+
handle: async ({ test_run_id, rerun_count }) => {
|
|
19
|
+
const data = await graphql(mutations.CHECK_FOR_FLAKES, {
|
|
20
|
+
testRunId: test_run_id,
|
|
21
|
+
rerunTestsNTimes: rerun_count,
|
|
22
|
+
});
|
|
23
|
+
return { id: data.checkForFlakes?.id ?? null };
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
//# sourceMappingURL=check-for-flakes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check-for-flakes.js","sourceRoot":"","sources":["../../src/tools/check-for-flakes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EACT,8IAA8I;IAChJ,OAAO,EAAE,uBAAuB;IAChC,IAAI,EAAE,YAAY;IAClB,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,qDAAqD,CAAC;KAC9G,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KAChE,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,EAAE;QAC7C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAqC,SAAS,CAAC,gBAAgB,EAAE;YACzF,SAAS,EAAE,WAAW;YACtB,gBAAgB,EAAE,WAAW;SAC9B,CAAC,CAAC;QACH,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC;IACjD,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const compareReplays: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
test_run_id: z.ZodString;
|
|
4
|
+
base_replay_id: z.ZodString;
|
|
5
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
6
|
+
diff_id: z.ZodNullable<z.ZodString>;
|
|
7
|
+
divergences: z.ZodNullable<z.ZodArray<z.ZodString>>;
|
|
8
|
+
head_replay: z.ZodNullable<z.ZodObject<{
|
|
9
|
+
id: z.ZodString;
|
|
10
|
+
status: z.ZodNullable<z.ZodString>;
|
|
11
|
+
is_accurate: z.ZodNullable<z.ZodBoolean>;
|
|
12
|
+
app_url: z.ZodNullable<z.ZodString>;
|
|
13
|
+
}, z.core.$strip>>;
|
|
14
|
+
base_replay: z.ZodNullable<z.ZodObject<{
|
|
15
|
+
id: z.ZodString;
|
|
16
|
+
status: z.ZodNullable<z.ZodString>;
|
|
17
|
+
is_accurate: z.ZodNullable<z.ZodBoolean>;
|
|
18
|
+
app_url: z.ZodNullable<z.ZodString>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
head_screenshots: z.ZodArray<z.ZodObject<{
|
|
21
|
+
filename: z.ZodString;
|
|
22
|
+
public_url: z.ZodString;
|
|
23
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
24
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
25
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
26
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
27
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
base_screenshots: z.ZodArray<z.ZodObject<{
|
|
30
|
+
filename: z.ZodString;
|
|
31
|
+
public_url: z.ZodString;
|
|
32
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
33
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
34
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
35
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
36
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
37
|
+
}, z.core.$strip>>;
|
|
38
|
+
screenshot_diffs: z.ZodArray<z.ZodObject<{
|
|
39
|
+
outcome: z.ZodString;
|
|
40
|
+
user_visible_outcome: z.ZodString;
|
|
41
|
+
group_id: z.ZodNullable<z.ZodString>;
|
|
42
|
+
width: z.ZodNullable<z.ZodNumber>;
|
|
43
|
+
mismatch_pixels: z.ZodNullable<z.ZodNumber>;
|
|
44
|
+
diff_hash: z.ZodNullable<z.ZodString>;
|
|
45
|
+
base_screenshot: z.ZodNullable<z.ZodObject<{
|
|
46
|
+
filename: z.ZodString;
|
|
47
|
+
public_url: z.ZodString;
|
|
48
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
49
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
50
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
51
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
52
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
53
|
+
}, z.core.$strip>>;
|
|
54
|
+
head_screenshot: z.ZodNullable<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
|
+
diff_url_thumb: z.ZodNullable<z.ZodString>;
|
|
64
|
+
diff_url_full: z.ZodNullable<z.ZodString>;
|
|
65
|
+
changed_class_names: z.ZodArray<z.ZodString>;
|
|
66
|
+
}, z.core.$strip>>;
|
|
67
|
+
}, z.core.$strip>>;
|
|
68
|
+
//# sourceMappingURL=compare-replays.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-replays.d.ts","sourceRoot":"","sources":["../../src/tools/compare-replays.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA4DzB,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, screenshotSchema, mapDiffResult, mapReplayInfo, mapScreenshot, } from './schemas.js';
|
|
5
|
+
export const compareReplays = defineTool({
|
|
6
|
+
name: 'compare_replays',
|
|
7
|
+
displayName: 'Compare Replays',
|
|
8
|
+
description: 'Compare a head replay against its base replay within a test run. Returns screenshot diffs with base/head/diff image URLs, divergences, and replay metadata. Use the base_replay_id from get_test_run_diffs results.',
|
|
9
|
+
summary: 'Compare replays in a test run',
|
|
10
|
+
icon: 'columns',
|
|
11
|
+
group: 'Replays',
|
|
12
|
+
input: z.object({
|
|
13
|
+
test_run_id: z.string().describe('Test run ID'),
|
|
14
|
+
base_replay_id: z.string().describe('Base replay ID (from get_test_run_diffs base_replay.id)'),
|
|
15
|
+
}),
|
|
16
|
+
output: z.object({
|
|
17
|
+
diff_id: z.string().nullable().describe('Replay diff ID'),
|
|
18
|
+
divergences: z
|
|
19
|
+
.array(z.string())
|
|
20
|
+
.nullable()
|
|
21
|
+
.describe('Structural divergences between replays (list of divergence descriptions)'),
|
|
22
|
+
head_replay: replayInfoSchema.nullable().describe('Head replay info'),
|
|
23
|
+
base_replay: replayInfoSchema.nullable().describe('Base replay info'),
|
|
24
|
+
head_screenshots: z.array(screenshotSchema).describe('Head replay screenshots'),
|
|
25
|
+
base_screenshots: z.array(screenshotSchema).describe('Base replay screenshots'),
|
|
26
|
+
screenshot_diffs: z.array(diffResultSchema).describe('Visual differences between screenshots'),
|
|
27
|
+
}),
|
|
28
|
+
handle: async ({ test_run_id, base_replay_id }) => {
|
|
29
|
+
const data = await graphql(queries.GET_COMPARE_REPLAYS, { testRunId: test_run_id, baseReplayId: base_replay_id });
|
|
30
|
+
const diff = data.testRun.replayDiff;
|
|
31
|
+
if (!diff) {
|
|
32
|
+
return {
|
|
33
|
+
diff_id: null,
|
|
34
|
+
divergences: null,
|
|
35
|
+
head_replay: null,
|
|
36
|
+
base_replay: null,
|
|
37
|
+
head_screenshots: [],
|
|
38
|
+
base_screenshots: [],
|
|
39
|
+
screenshot_diffs: [],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
diff_id: diff.id,
|
|
44
|
+
divergences: Array.isArray(diff.divergences) ? diff.divergences : null,
|
|
45
|
+
head_replay: mapReplayInfo(diff.headReplay),
|
|
46
|
+
base_replay: mapReplayInfo(diff.baseReplay),
|
|
47
|
+
head_screenshots: (diff.headReplay.screenshotsData ?? []).map(mapScreenshot),
|
|
48
|
+
base_screenshots: (diff.baseReplay.screenshotsData ?? []).map(mapScreenshot),
|
|
49
|
+
screenshot_diffs: (diff.screenshotDiffResults ?? []).map(mapDiffResult),
|
|
50
|
+
};
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
//# sourceMappingURL=compare-replays.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compare-replays.js","sourceRoot":"","sources":["../../src/tools/compare-replays.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const createLabelAction: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
test_run_id: z.ZodString;
|
|
4
|
+
replay_diff_id: z.ZodOptional<z.ZodString>;
|
|
5
|
+
screenshot_file_name: z.ZodOptional<z.ZodString>;
|
|
6
|
+
label: z.ZodString;
|
|
7
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
8
|
+
label_action: z.ZodObject<{
|
|
9
|
+
id: z.ZodString;
|
|
10
|
+
replay_diff_id: z.ZodString;
|
|
11
|
+
screenshot_file_name: z.ZodString;
|
|
12
|
+
label: z.ZodString;
|
|
13
|
+
created_at: z.ZodString;
|
|
14
|
+
}, z.core.$strip>;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
//# sourceMappingURL=create-label-action.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-label-action.d.ts","sourceRoot":"","sources":["../../src/tools/create-label-action.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;kBAwB5B,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, mutations } from '../meticulous-api.js';
|
|
4
|
+
import { labelActionSchema, mapLabelAction } from './schemas.js';
|
|
5
|
+
export const createLabelAction = defineTool({
|
|
6
|
+
name: 'create_label_action',
|
|
7
|
+
displayName: 'Create Label Action',
|
|
8
|
+
description: 'Label a specific screenshot diff as approved or rejected. Use this to approve or reject individual visual differences within a test run.',
|
|
9
|
+
summary: 'Label a screenshot diff',
|
|
10
|
+
icon: 'tag',
|
|
11
|
+
group: 'Test Runs',
|
|
12
|
+
input: z.object({
|
|
13
|
+
test_run_id: z.string().describe('Test run ID'),
|
|
14
|
+
replay_diff_id: z.string().optional().describe('Replay diff ID'),
|
|
15
|
+
screenshot_file_name: z.string().optional().describe('Screenshot filename'),
|
|
16
|
+
label: z.string().describe('Label to apply (e.g., approved, rejected)'),
|
|
17
|
+
}),
|
|
18
|
+
output: z.object({ label_action: labelActionSchema }),
|
|
19
|
+
handle: async ({ test_run_id, replay_diff_id, screenshot_file_name, label }) => {
|
|
20
|
+
const data = await graphql(mutations.CREATE_LABEL_ACTION, {
|
|
21
|
+
testRunId: test_run_id,
|
|
22
|
+
replayDiffId: replay_diff_id,
|
|
23
|
+
screenshotFileName: screenshot_file_name,
|
|
24
|
+
label,
|
|
25
|
+
});
|
|
26
|
+
return { label_action: mapLabelAction(data.createLabelAction) };
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=create-label-action.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-label-action.js","sourceRoot":"","sources":["../../src/tools/create-label-action.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEjE,MAAM,CAAC,MAAM,iBAAiB,GAAG,UAAU,CAAC;IAC1C,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,qBAAqB;IAClC,WAAW,EACT,0IAA0I;IAC5I,OAAO,EAAE,yBAAyB;IAClC,IAAI,EAAE,KAAK;IACX,KAAK,EAAE,WAAW;IAClB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC;QAC/C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;QAChE,oBAAoB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC3E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;KACxE,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,iBAAiB,EAAE,CAAC;IACrD,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,cAAc,EAAE,oBAAoB,EAAE,KAAK,EAAE,EAAE,EAAE;QAC7E,MAAM,IAAI,GAAG,MAAM,OAAO,CAAiD,SAAS,CAAC,mBAAmB,EAAE;YACxG,SAAS,EAAE,WAAW;YACtB,YAAY,EAAE,cAAc;YAC5B,kBAAkB,EAAE,oBAAoB;YACxC,KAAK;SACN,CAAC,CAAC;QACH,OAAO,EAAE,YAAY,EAAE,cAAc,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC;IAClE,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getCurrentUser: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{}, z.core.$strip>, z.ZodObject<{
|
|
3
|
+
user: z.ZodObject<{
|
|
4
|
+
id: z.ZodString;
|
|
5
|
+
email: z.ZodString;
|
|
6
|
+
first_name: z.ZodString;
|
|
7
|
+
last_name: z.ZodString;
|
|
8
|
+
is_admin: z.ZodBoolean;
|
|
9
|
+
}, z.core.$strip>;
|
|
10
|
+
is_signed_in: z.ZodBoolean;
|
|
11
|
+
}, z.core.$strip>>;
|
|
12
|
+
//# sourceMappingURL=get-current-user.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-current-user.d.ts","sourceRoot":"","sources":["../../src/tools/get-current-user.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;;;;kBAkBzB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { userSchema, mapUser } from './schemas.js';
|
|
5
|
+
export const getCurrentUser = defineTool({
|
|
6
|
+
name: 'get_current_user',
|
|
7
|
+
displayName: 'Get Current User',
|
|
8
|
+
description: 'Get the currently authenticated user profile including email, name, and admin status.',
|
|
9
|
+
summary: 'Get the current user profile',
|
|
10
|
+
icon: 'user',
|
|
11
|
+
group: 'User',
|
|
12
|
+
input: z.object({}),
|
|
13
|
+
output: z.object({ user: userSchema, is_signed_in: z.boolean() }),
|
|
14
|
+
handle: async () => {
|
|
15
|
+
const data = await graphql(queries.GET_USER_CONTEXT);
|
|
16
|
+
return {
|
|
17
|
+
user: mapUser(data.authInfo.user),
|
|
18
|
+
is_signed_in: data.authInfo.isSignedIn,
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=get-current-user.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-current-user.js","sourceRoot":"","sources":["../../src/tools/get-current-user.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;AACxD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEnD,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC;IACvC,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,kBAAkB;IAC/B,WAAW,EAAE,uFAAuF;IACpG,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,MAAM;IACZ,KAAK,EAAE,MAAM;IACb,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;IACjE,MAAM,EAAE,KAAK,IAAI,EAAE;QACjB,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,gBAAgB,CACzB,CAAC;QACF,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;YACjC,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,UAAU;SACvC,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getProjectPullRequest: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
organization_name: z.ZodString;
|
|
4
|
+
project_name: z.ZodString;
|
|
5
|
+
pull_request_id: z.ZodString;
|
|
6
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
7
|
+
pull_request: z.ZodNullable<z.ZodObject<{
|
|
8
|
+
id: z.ZodString;
|
|
9
|
+
approval_state: z.ZodNullable<z.ZodString>;
|
|
10
|
+
latest_test_run_id: z.ZodNullable<z.ZodString>;
|
|
11
|
+
created_at: z.ZodString;
|
|
12
|
+
}, z.core.$strip>>;
|
|
13
|
+
}, z.core.$strip>>;
|
|
14
|
+
//# sourceMappingURL=get-project-pull-request.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-project-pull-request.d.ts","sourceRoot":"","sources":["../../src/tools/get-project-pull-request.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,qBAAqB;;;;;;;;;;;kBAqBhC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { pullRequestSchema, mapPullRequest } from './schemas.js';
|
|
5
|
+
export const getProjectPullRequest = defineTool({
|
|
6
|
+
name: 'get_project_pull_request',
|
|
7
|
+
displayName: 'Get Project Pull Request',
|
|
8
|
+
description: 'Get the Meticulous test status for a specific pull request by its hosting provider ID (e.g., GitHub PR number).',
|
|
9
|
+
summary: 'Get PR test status',
|
|
10
|
+
icon: 'git-pull-request',
|
|
11
|
+
group: 'Projects',
|
|
12
|
+
input: z.object({
|
|
13
|
+
organization_name: z.string().describe('Organization name'),
|
|
14
|
+
project_name: z.string().describe('Project name'),
|
|
15
|
+
pull_request_id: z.string().describe('Hosting provider PR identifier (e.g., GitHub PR number as string)'),
|
|
16
|
+
}),
|
|
17
|
+
output: z.object({ pull_request: pullRequestSchema.nullable() }),
|
|
18
|
+
handle: async ({ organization_name, project_name, pull_request_id }) => {
|
|
19
|
+
const data = await graphql(queries.GET_PROJECT_PULL_REQUEST, { organizationName: organization_name, projectName: project_name, pullRequestId: pull_request_id });
|
|
20
|
+
return { pull_request: data.project.pullRequest ? mapPullRequest(data.project.pullRequest) : null };
|
|
21
|
+
},
|
|
22
|
+
});
|
|
23
|
+
//# sourceMappingURL=get-project-pull-request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-project-pull-request.js","sourceRoot":"","sources":["../../src/tools/get-project-pull-request.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;AACxD,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAEjE,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC9C,IAAI,EAAE,0BAA0B;IAChC,WAAW,EAAE,0BAA0B;IACvC,WAAW,EACT,iHAAiH;IACnH,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,kBAAkB;IACxB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;QACjD,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;KAC1G,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,iBAAiB,CAAC,QAAQ,EAAE,EAAE,CAAC;IAChE,MAAM,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,EAAE;QACrE,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,wBAAwB,EAChC,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,CACnG,CAAC;QACF,OAAO,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtG,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getProject: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
organization_name: z.ZodString;
|
|
4
|
+
project_name: z.ZodString;
|
|
5
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
6
|
+
project: z.ZodObject<{
|
|
7
|
+
id: z.ZodString;
|
|
8
|
+
name: z.ZodString;
|
|
9
|
+
organization_name: z.ZodString;
|
|
10
|
+
host_kind: z.ZodNullable<z.ZodString>;
|
|
11
|
+
status: z.ZodString;
|
|
12
|
+
recording_token: z.ZodNullable<z.ZodString>;
|
|
13
|
+
api_token: z.ZodNullable<z.ZodString>;
|
|
14
|
+
created_at: z.ZodString;
|
|
15
|
+
updated_at: z.ZodString;
|
|
16
|
+
enterprise_grade_security: z.ZodBoolean;
|
|
17
|
+
auto_session_selection: z.ZodBoolean;
|
|
18
|
+
}, z.core.$strip>;
|
|
19
|
+
}, z.core.$strip>>;
|
|
20
|
+
//# sourceMappingURL=get-project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-project.d.ts","sourceRoot":"","sources":["../../src/tools/get-project.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;kBAmBrB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { projectSchema, mapProject } from './schemas.js';
|
|
5
|
+
export const getProject = defineTool({
|
|
6
|
+
name: 'get_project',
|
|
7
|
+
displayName: 'Get Project',
|
|
8
|
+
description: 'Get detailed information about a specific project including tokens, settings, and configuration.',
|
|
9
|
+
summary: 'Get project details',
|
|
10
|
+
icon: 'folder-open',
|
|
11
|
+
group: 'Projects',
|
|
12
|
+
input: z.object({
|
|
13
|
+
organization_name: z.string().describe('Organization name'),
|
|
14
|
+
project_name: z.string().describe('Project name'),
|
|
15
|
+
}),
|
|
16
|
+
output: z.object({ project: projectSchema }),
|
|
17
|
+
handle: async ({ organization_name, project_name }) => {
|
|
18
|
+
const data = await graphql(queries.GET_PROJECT, {
|
|
19
|
+
organizationName: organization_name,
|
|
20
|
+
projectName: project_name,
|
|
21
|
+
});
|
|
22
|
+
return { project: mapProject(data.project) };
|
|
23
|
+
},
|
|
24
|
+
});
|
|
25
|
+
//# sourceMappingURL=get-project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-project.js","sourceRoot":"","sources":["../../src/tools/get-project.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;AACxD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,kGAAkG;IAC/G,OAAO,EAAE,qBAAqB;IAC9B,IAAI,EAAE,aAAa;IACnB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAC3D,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;KAClD,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,EAAE,iBAAiB,EAAE,YAAY,EAAE,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,MAAM,OAAO,CAAuC,OAAO,CAAC,WAAW,EAAE;YACpF,gBAAgB,EAAE,iBAAiB;YACnC,WAAW,EAAE,YAAY;SAC1B,CAAC,CAAC;QACH,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getReplayScreenshots: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
replay_id: z.ZodString;
|
|
4
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
5
|
+
replay_id: z.ZodString;
|
|
6
|
+
screenshots: z.ZodArray<z.ZodObject<{
|
|
7
|
+
filename: z.ZodString;
|
|
8
|
+
public_url: z.ZodString;
|
|
9
|
+
replay_id: z.ZodOptional<z.ZodString>;
|
|
10
|
+
route_url: z.ZodOptional<z.ZodString>;
|
|
11
|
+
route_group: z.ZodOptional<z.ZodString>;
|
|
12
|
+
identifier_type: z.ZodOptional<z.ZodString>;
|
|
13
|
+
event_number: z.ZodOptional<z.ZodNumber>;
|
|
14
|
+
}, z.core.$strip>>;
|
|
15
|
+
}, z.core.$strip>>;
|
|
16
|
+
//# sourceMappingURL=get-replay-screenshots.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-replay-screenshots.d.ts","sourceRoot":"","sources":["../../src/tools/get-replay-screenshots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;kBAwB/B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
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 getReplayScreenshots = defineTool({
|
|
6
|
+
name: 'get_replay_screenshots',
|
|
7
|
+
displayName: 'Get Replay Screenshots',
|
|
8
|
+
description: 'Get all screenshots captured during a specific replay.',
|
|
9
|
+
summary: 'Get screenshots for a replay',
|
|
10
|
+
icon: 'image',
|
|
11
|
+
group: 'Replays',
|
|
12
|
+
input: z.object({
|
|
13
|
+
replay_id: z.string().describe('Replay ID'),
|
|
14
|
+
}),
|
|
15
|
+
output: z.object({
|
|
16
|
+
replay_id: z.string(),
|
|
17
|
+
screenshots: z.array(screenshotSchema),
|
|
18
|
+
}),
|
|
19
|
+
handle: async ({ replay_id }) => {
|
|
20
|
+
const data = await graphql(queries.GET_REPLAY_SCREENSHOTS, { replayId: replay_id });
|
|
21
|
+
return {
|
|
22
|
+
replay_id: data.replay.id,
|
|
23
|
+
screenshots: (data.replay.screenshotsData ?? []).map(mapScreenshot),
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=get-replay-screenshots.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-replay-screenshots.js","sourceRoot":"","sources":["../../src/tools/get-replay-screenshots.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;AACxD,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE/D,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,wBAAwB;IAC9B,WAAW,EAAE,wBAAwB;IACrC,WAAW,EAAE,wDAAwD;IACrE,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC5C,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;QACrB,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC;KACvC,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,sBAAsB,EAC9B,EAAE,QAAQ,EAAE,SAAS,EAAE,CACxB,CAAC;QACF,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE;YACzB,WAAW,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC;SACpE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getReplay: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
replay_id: z.ZodString;
|
|
4
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
5
|
+
replay: z.ZodObject<{
|
|
6
|
+
id: z.ZodString;
|
|
7
|
+
status: z.ZodString;
|
|
8
|
+
commit_sha: z.ZodNullable<z.ZodString>;
|
|
9
|
+
is_accurate: z.ZodNullable<z.ZodBoolean>;
|
|
10
|
+
app_url: z.ZodNullable<z.ZodString>;
|
|
11
|
+
session_id: z.ZodNullable<z.ZodString>;
|
|
12
|
+
created_at: z.ZodString;
|
|
13
|
+
project_name: z.ZodNullable<z.ZodString>;
|
|
14
|
+
organization_name: z.ZodNullable<z.ZodString>;
|
|
15
|
+
}, z.core.$strip>;
|
|
16
|
+
}, z.core.$strip>>;
|
|
17
|
+
//# sourceMappingURL=get-replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-replay.d.ts","sourceRoot":"","sources":["../../src/tools/get-replay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,SAAS;;;;;;;;;;;;;;kBAgBpB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { replaySchema, mapReplay } from './schemas.js';
|
|
5
|
+
export const getReplay = defineTool({
|
|
6
|
+
name: 'get_replay',
|
|
7
|
+
displayName: 'Get Replay',
|
|
8
|
+
description: 'Get detailed information about a specific replay including its status, accuracy, and associated session.',
|
|
9
|
+
summary: 'Get replay details',
|
|
10
|
+
icon: 'video',
|
|
11
|
+
group: 'Replays',
|
|
12
|
+
input: z.object({
|
|
13
|
+
replay_id: z.string().describe('Replay ID'),
|
|
14
|
+
}),
|
|
15
|
+
output: z.object({ replay: replaySchema }),
|
|
16
|
+
handle: async ({ replay_id }) => {
|
|
17
|
+
const data = await graphql(queries.GET_REPLAY, { replayId: replay_id });
|
|
18
|
+
return { replay: mapReplay(data.replay) };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=get-replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-replay.js","sourceRoot":"","sources":["../../src/tools/get-replay.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;AACxD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEvD,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC;IAClC,IAAI,EAAE,YAAY;IAClB,WAAW,EAAE,YAAY;IACzB,WAAW,EACT,0GAA0G;IAC5G,OAAO,EAAE,oBAAoB;IAC7B,IAAI,EAAE,OAAO;IACb,KAAK,EAAE,SAAS;IAChB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC5C,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAC1C,MAAM,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAsC,OAAO,CAAC,UAAU,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;QAC7G,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;IAC5C,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getSessionEvents: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
session_id: z.ZodString;
|
|
4
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
5
|
+
session_id: z.ZodString;
|
|
6
|
+
events: z.ZodArray<z.ZodObject<{
|
|
7
|
+
type: z.ZodString;
|
|
8
|
+
timestamp: z.ZodNullable<z.ZodNumber>;
|
|
9
|
+
selector: z.ZodNullable<z.ZodString>;
|
|
10
|
+
client_x: z.ZodNullable<z.ZodNumber>;
|
|
11
|
+
client_y: z.ZodNullable<z.ZodNumber>;
|
|
12
|
+
}, z.core.$strip>>;
|
|
13
|
+
}, z.core.$strip>>;
|
|
14
|
+
//# sourceMappingURL=get-session-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-session-events.d.ts","sourceRoot":"","sources":["../../src/tools/get-session-events.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,gBAAgB;;;;;;;;;;;kBAwB3B,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { sessionEventSchema, mapSessionEvent } from './schemas.js';
|
|
5
|
+
export const getSessionEvents = defineTool({
|
|
6
|
+
name: 'get_session_events',
|
|
7
|
+
displayName: 'Get Session Events',
|
|
8
|
+
description: 'Get the user interaction events (clicks, inputs, navigations) recorded during a session.',
|
|
9
|
+
summary: 'Get user events in a session',
|
|
10
|
+
icon: 'activity',
|
|
11
|
+
group: 'Sessions',
|
|
12
|
+
input: z.object({
|
|
13
|
+
session_id: z.string().describe('Session ID'),
|
|
14
|
+
}),
|
|
15
|
+
output: z.object({
|
|
16
|
+
session_id: z.string(),
|
|
17
|
+
events: z.array(sessionEventSchema),
|
|
18
|
+
}),
|
|
19
|
+
handle: async ({ session_id }) => {
|
|
20
|
+
const data = await graphql(queries.GET_SESSION_EVENTS, { sessionId: session_id });
|
|
21
|
+
return {
|
|
22
|
+
session_id: data.session.id,
|
|
23
|
+
events: (data.session.data?.userEvents ?? []).map(mapSessionEvent),
|
|
24
|
+
};
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
//# sourceMappingURL=get-session-events.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-session-events.js","sourceRoot":"","sources":["../../src/tools/get-session-events.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;AACxD,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEnE,MAAM,CAAC,MAAM,gBAAgB,GAAG,UAAU,CAAC;IACzC,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,oBAAoB;IACjC,WAAW,EAAE,0FAA0F;IACvG,OAAO,EAAE,8BAA8B;IACvC,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KAC9C,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE;QACtB,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC;KACpC,CAAC;IACF,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CACxB,OAAO,CAAC,kBAAkB,EAC1B,EAAE,SAAS,EAAE,UAAU,EAAE,CAC1B,CAAC;QACF,OAAO;YACL,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;YAC3B,MAAM,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,eAAe,CAAC;SACnE,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare const getSession: import("@opentabs-dev/plugin-sdk").ToolDefinition<z.ZodObject<{
|
|
3
|
+
session_id: z.ZodString;
|
|
4
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
5
|
+
session: z.ZodObject<{
|
|
6
|
+
id: z.ZodString;
|
|
7
|
+
project_id: z.ZodString;
|
|
8
|
+
project_name: z.ZodString;
|
|
9
|
+
hostname: z.ZodNullable<z.ZodString>;
|
|
10
|
+
datetime: z.ZodNullable<z.ZodString>;
|
|
11
|
+
num_user_events: z.ZodNullable<z.ZodNumber>;
|
|
12
|
+
num_bytes: z.ZodNullable<z.ZodNumber>;
|
|
13
|
+
source: z.ZodNullable<z.ZodString>;
|
|
14
|
+
start_url: z.ZodNullable<z.ZodString>;
|
|
15
|
+
abandoned: z.ZodNullable<z.ZodBoolean>;
|
|
16
|
+
description: z.ZodNullable<z.ZodString>;
|
|
17
|
+
}, z.core.$strip>;
|
|
18
|
+
}, z.core.$strip>>;
|
|
19
|
+
//# sourceMappingURL=get-session.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-session.d.ts","sourceRoot":"","sources":["../../src/tools/get-session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;kBAerB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { defineTool } from '@opentabs-dev/plugin-sdk';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { graphql, queries } from '../meticulous-api.js';
|
|
4
|
+
import { sessionSchema, mapSession } from './schemas.js';
|
|
5
|
+
export const getSession = defineTool({
|
|
6
|
+
name: 'get_session',
|
|
7
|
+
displayName: 'Get Session',
|
|
8
|
+
description: 'Get detailed information about a specific recorded user session.',
|
|
9
|
+
summary: 'Get session details',
|
|
10
|
+
icon: 'monitor',
|
|
11
|
+
group: 'Sessions',
|
|
12
|
+
input: z.object({
|
|
13
|
+
session_id: z.string().describe('Session ID'),
|
|
14
|
+
}),
|
|
15
|
+
output: z.object({ session: sessionSchema }),
|
|
16
|
+
handle: async ({ session_id }) => {
|
|
17
|
+
const data = await graphql(queries.GET_SESSION, { sessionId: session_id });
|
|
18
|
+
return { session: mapSession(data.session) };
|
|
19
|
+
},
|
|
20
|
+
});
|
|
21
|
+
//# sourceMappingURL=get-session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-session.js","sourceRoot":"","sources":["../../src/tools/get-session.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;AACxD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC;IACnC,IAAI,EAAE,aAAa;IACnB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,kEAAkE;IAC/E,OAAO,EAAE,qBAAqB;IAC9B,IAAI,EAAE,SAAS;IACf,KAAK,EAAE,UAAU;IACjB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KAC9C,CAAC;IACF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;IAC5C,MAAM,EAAE,KAAK,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE;QAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,CAAuC,OAAO,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC,CAAC;QACjH,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,CAAC;CACF,CAAC,CAAC"}
|